Setting-Less Trend-Step FilteringIntroduction
Indicators settings have been a major concern in trading strategies, in order to provide the best results each indicators involved in the strategy must have its settings optimized, when using only 1 indicator this task can easily be achieved, but an increasing number of indicators involve more slower computations, lot of softwares will use brute force for indicators settings optimization, this involve testing each indicator settings and see which setting/combination maximize the equity, in order to fasten this process softwares can use a user defined range for the indicator settings. Nonetheless the combination that maximize the equity at time t might be different at time t+1...n .
Therefore i propose an indicator without any numerical setting that aim to filter small price variations using the architecture of the T-step lsma, such indicator can provide robust filtering and can therefore be used as input for other indicators.
Robustness Vs Non Robustness
Robustness is often defined as the ability of certain statistical tools to be less affected by outliers, outliers are defined as huge variations in a data-set, high volatility movements and large gaps might be considered as outliers. However here we define robustness as the ability of an indicator to be non affected by price variations that are not correlated with the main trend, which can be defined in technical analysis as pullbacks.
Some small pullbacks in INTEL, the indicator is not affected by them, which allow the indicator to filter the price in a "smart" way.
This effect is made possible by using exponential averaging in the indicator, exponential averaging is defined as y = sc*x + (1-sc)*y , with 1 > sc > 0 . Here sc is calculated in a similar way as the kalman gain, which is in the form of a/(a + b) , in our case this is done with :
sc = abs(input - nz(b ))/(abs(input - nz(b )) + nz(a ))
Non Robust Version Of The Indicator
The user is allowed to use the non robust version of the indicator by unchecking "robust" in the setting panel, this allow a better fit with the price at the cost of less filtering.
robust checked
robust unchecked
Conclusion
I proposed a technical indicator that aim to filter short frequencies without the use of parameters, the indicator proven to be robust to various pullbacks and therefore was able to follow the main trend, although using the term trend for such small price variations might be wrong. Removing high frequencies is always beneficial in trading, noisy series are harder to manipulate, this is why you'll see a lot of indicators using median price often defined as hl2 instead of the closing price.
Like previous settings-less indicators i published this one can behave differently depending on the time frame selected by the user, lower time frames will make the indicator filter more. I'll try to make more setting-less indicators that will correct this effect.
Acknowledgements
The support and interest of the community is only thing that allowed me to be where i'am today, i'am thankful. Special thanks to the tv staff, LucF, and my family who may not have believed in this project but are still proud of their son.
Filtering
Smart Labelling - Candlestick ChartingThis is a full-fledged implementation of a system presented in an unique research paper 'Profitability of Candlestick Charting Patterns in the Stock Exchange of Thailand' (2017) on candlestick charting, candlestick patterns, trend identification methods, and testing.
You can easily find this paper in the Web. For example, visit: www.researchgate.net
This script is best suited for middle-to-higher time frames. Possible future developments: trend identification and factor calculation techniques.
Donate: PayPal (paypal.me)
HMA-Kahlman Trend, DifferenceFilter & TrendlinesThis update to the previous HMA-Kahlman Trend, Clipping & Trendlines script features the same structure with the three modules:
- Trendlines module,
- NEW Winsorizing submodule using difference-based filtering.
- HMA-Kahlman Trend module.
The Winsorizing submodule filters signals by a volume level, eliminating the ones with the volume below a threshold. This module substitutes the previous 'low-level' filtering implementation. This time it filters out based on difference between scaled volume and its moving average.
Tested with BTCUSD.
Edge-Preserving FilterIntroduction
Edge-preserving smoothing is often used in image processing in order to preserve edge information while filtering the remaining signal. I introduce two concepts in this indicator, edge preservation and an adaptive cumulative average allowing for fast edge-signal transition with period increase over time. This filter have nothing to do with classic filters for image processing, those filters use kernels convolution and are most of the time in a spatial domain.
Edge Detection Method
We want to minimize smoothing when an edge is detected, so our first goal is to detect an edge. An edge will be considered as being a peak or a valley, if you recall there is one of my indicator who aim to detect peaks and valley (reference at the bottom of the post) , since this estimation return binary outputs we will use it to tell our filter when to stop filtering.
Filtering Increase By Using Multi Steps Cumulative Average
The edge detection is a binary output, using a exponential smoothing could be possible and certainly more efficient but i wanted instead to try using a cumulative average approach because it smooth more and is a bit more original to use an adaptive architecture using something else than exponential averaging. A cumulative average is defined as the sum of the price and the previous value of the cumulative average and then this result is divided by n with n = number of data points. You could say that a cumulative average is a moving average with a linear increasing period.
So lets call CMA our cumulative average and n our divisor. When an edge is detected CMA = close price and n = 1 , else n is equal to previous n+1 and the CMA act as a normal cumulative average by summing its previous values with the price and dividing the sum by n until a new edge is detected, so there is a "no filtering state" and a "filtering state" with linear period increase transition, this is why its multi-steps.
The Filter
The filter have two parameters, a length parameter and a smooth parameter, length refer to the edge detection sensitivity, small values will detect short terms edges while higher values will detect more long terms edges. Smooth is directly related to the edge detection method, high values of smooth can avoid the detection of some edges.
smooth = 200
smooth = 50
smooth = 3
Conclusion
Preserving the price edges can be useful when it come to allow for reactivity during important price points, such filter can help with moving average crossover methods or can be used as a source for other indicators making those directly dependent of the edge detection.
Rsi with a period of 200 and our filter as source, will cross triggers line when an edge is detected
Feel free to share suggestions ! Thanks for reading !
References
Peak/Valley estimator used for the detection of edges in price.
Ehlers Decycler OscillatorThis indicator was originally developed by John F. Ehlers (Stocks & Commodities , V.33:10 (September, 2015): "Decyclers").
The idea is still the same as for the Simple Decycler.
Mr. Ehlers suggested to virtually eliminate lag by getting rid of the very low-frequency components. So, he applied the high-pass filter to the simple decycler.
Mr. Ehlers recommended to use two instances of the Decycler Oscillator with different parameters (high-pass filter period and multiplier). As a result, he got the Decycler Oscillator pair.
The first oscillator (red line) has a period of 125 bars, the second one (yellow line) has a period of 100 bars.
The interpretation is straightforward:
When the yellow line crosses over the red line, a trend reversal to the upside is indicated.
When the yellow line crosses under the red line, a trend reversal to the downside is indicated.
Ehlers Simple DecyclerThis indicator was originally developed by John F. Ehlers (Stocks & Commodities, V.33:10 (September, 2015): "Decyclers").
Mr. Ehlers suggested a way to improve trend identification using high-pass filters. The basic smoothers like SMA, low-pass filters, have considerable lag in their display. Mr. Ehlers applied the high-pass filter and subtracted the high-pass filter output from the time series input. Doing these steps he removed high-frequency short-wavelength components (the ones causing the wiggles) from the time series.
As a result he got a special series of the low-frequency components with virtually no lag - the Decycler.
The Decycler is plotted with two additional lines (the percent-shifts of Decycler) and together they form a hysteresis band.
If the prices are above the upper hysteresis line, then the market is in an uptrend . If the prices are below the low hysteresis line, then the market is in a downtrend . Prices within the hysteresis band are trend-neutral .
1LC-LSMA (1 line code lsma with 3 functions)Even Shorter Estimation
I know that i'am insistent with the lsma but i really like it and i'm happy to deconstruct it like a mad pinescript user. But if you have an idea about some kind of indicator then dont hesitate to contact me, i would be happy to help you if its feasible.
My motivation for such indicator was to use back the correlation function (that i had putted aside in the ligh-lsma code) and provide a shorter code than the estimation using the line rescaling method (see : Approximating A Least Square Moving Average In Pine) .
The Method
Fairly simple, lets name y our estimation, we calculate it as follow:
y = x̄ + r*o*1.7
where x̄ is the price moving average, r the correlation between the price and a line (or n) and o the standard deviation. If plotted against a classic lsma the difference would be meaningless at first glance so lets plot the absolute value between the difference of the lsma and our estimation of both period 100.
The difference is under 0.0000 on eurusd, its really low.
In general the longer the period of the estimation, the lower the difference between a normal lsma, but when using shorter period they can differ a little bit.
Why 1.7 ?
We need to multiply the standard deviation by a constant in order to match the overshoot and the rise-time of the original lsma. The constant 1.7 is one that work well but actually this constant should be dependant of the length period of the filter to make the estimation more accurate.
More About Step-Response
Most of the time when a filter have less lag, it mean that he induce overshoot in order to decrease the rise-time . Rise-time is the time the output take to match the target input, its related to the lag. Overshoot mean that the output exceed the target input, you can clearly see those concept in the image above.
Conclusion
I've showed that its possible to be even more concise about the code it take to estimate an lsma. I've also briefly explained the concept of rise-time and overshoot, concepts really important to signal processing and particularly in filter design. I'm sure that it can be even more simplified and i have some ideas for such estimate.
Thanks for reading !
Filtered ATRThis script defines an average true range where extreme events are filtered out.
Extreme events are those bars with a true range larger than 3*sigma+average,
where average and standard deviation are estimated from the last 200 bars.
In this way the ATR is not altered by exceptional events (e.g. the flash crash of Jan 3rd 2019)
and can still be used safely for Stop Losses and Take Profits.
Hitting the like button is a free sign of gratitude, thanks.
Adaptive StochasticAdapt To The Right Situation
There are already some Adaptive Stochastic scripts out there, but i didn't see the concept of using different periods highest/lowest for their calculations. What we want
for such oscillator is to be active when price is trending and silent during range periods. Like that the information we will see will be clear and easy to use.
Switching between a long term highest/lowest during range periods and a short term highest/lowest during trending periods is what will create the adaptive stochastic.
The switching is made thanks to the Efficiency Ratio , the period of the efficiency ratio is determined by the length parameter.
The period of the highest and lowest will depend on the slow and fast parameters, if our efficiency ratio is close to one (trending market) then the indicator will use highest and lowest of period fast , making the indicator more reactive, if our efficiency ratio is low (ranging market) then the indicator will use highest and lowest of period slow , making the indicator less reactive.
The source of the indicator is a running line ( lsma ) of period slow-fast .
it is also possible to switch the parameters values, making the indicator reactive during ranging market and less reactive during trending ones.
Hope you enjoy
For any questions/demands feel free to pm me, i would be happy to help you
One Dimensional Parametric Kalman FilterA One Dimensional Kalman Filter, the particularity of Kalman Filtering is the constant recalculation of the Error between the measurements and the estimate.This version is modified to allow more/less filtering using an alternative calculation of the error measurement.
Camparison of the Kalman filter Red with a moving average Black of both period 50
Can be used as source for others indicators such as stochastic/rsi/moving averages...etc
For any questions/suggestions feel free to contact me
Auto-FilterA least squares filter using the Auto line as source, practical for noise removal without higher phase shift.
Its possible to create another parameter for the auto-line length, just add a parameter Period or whatever you want.
r = round(close/round)*round
dev = stdev(close,Period)
Hope you enjoy :)
Fractals and Levels by JustUncleLEven though there are a many other Fractal and Level indicators, this indicator has some unique features. The indicator will display Fractals, fractal levels and HH/LL points, they will only be drawn after they have completed. Also the indicator has options to :
Show Ideal Fractals Only.
Use Renko Style Fractals, where open/close values are used instead of high/low to find Fractals. This is used to show the correct Fractals when Renko Wicks are enabled.
Has an optional Filter to only display Fractals that are above/below a MA Ribbon.
References:
This code is based on Fractal Levels V8 by RicardoSantos
This is a Renko Chart with "Renko Style Fractals" enabled, notice that the wicks are ignored and only the true Bricks are used for Fractals: