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.
Adaptive
Bryant Adaptive Moving Average@ChartArt got my attention to this idea.
This type of moving average was originally developed by Michael R. Bryant (Adaptrade Software newsletter, April 2014). Mr. Bryant suggested a new approach, so called Variable Efficiency Ratio (VER), to obtain adaptive behaviour for the moving average. This approach is based on Perry Kaufman' idea with Efficiency Ratio (ER) which was used by Mr. Kaufman to create KAMA.
As result Mr. Bryant got a moving average with adaptive lookback period. This moving average has 3 parameters:
Initial lookback
Trend Parameter
Maximum lookback
The 2nd parameter, Trend Parameter can take any positive or negative value and determines whether the lookback length will increase or decrease with increasing ER.
Changing Trend Parameter we can obtain KAMA' behaviour
To learn more see www.adaptrade.com
Adaptive Moving AverageAdaptive Moving Average indicator script. This indicator was originally developed by Vitali Apirine (Stocks & Commodities V.36:5: Adaptive Moving Averages).
MESA Adaptive Moving AverageIntro
One of Ehlers most well-known indicators! I've seen many variations of this on TradingView, however, none seem to be true to the original released by Ehlers himself.
I've taken it upon myself to simply translate the MAMA into Pinescript, instead of re-writing like some others have done.
You can use it as a very effective & adaptive moving average with other signals or
as a standalone signal.
In the case that you're going to use it for signals and not simple technical trading (non-quantitative),
I've also added a threshold parameter to filter out weak signals.
My MAMA indicator is different from others in very simple ways - I don't use the nz() command, which sets all "Not a Number" values to 0. In others' scripts, you immediately load the indicator with several 0 values,
causing a slight lag in future calculations since this code is recursive (refers to previous values it generated).
In my version, I simply wait until the script has access to all the bar data it needs, instead of instantly performing calculations and
setting erroneous values to 0. In this case, we start with the correct values (or closer to correct).
If you want to compare this indicator the current most popular MAMA by LazyBear, you'll notice it often gives buy and sell crosses one bar earlier than theirs.
Setting Parameters
Source - the data series to perform calculations on. (Initially, Ehlers himself favored hl/2, but conceded that there isn't empirical benefit over close.)
Fast Limit - controls how quickly the MAMA will "ratchet up" fast price action. (Higher values are faster)
Slow Limit - controls how closely the FAMA will follow the MAMA. (Again, higher is faster. You typically want the FAMA to be slower though.)
Crossover Threshold - simple error thresholding to limit the number of weak trade signals. (Lower means lower tolerance)
Show Crosses? - show/hide the arrows at moving average crosses
Robust Cycle Measurement [Ehlers]The last of Ehlers Instantaneous Frequency Measurement methods.
This is a more robust version of this script.
I wrote it as a function, so you can simply copy and paste it into any script to add an adaptive period setting capability.
Cheers,
DasanC
Low Lag Exponential Moving AverageThis is a low-lag EMA, colorized to help identify turn around points. You have the option of making it adaptive as well, different methods
of signal processing or simply an average of the two.
See my previous script to understand how these adaptive methods work
Adaptive Bandpass Filter [Ehlers]This is my latest bandpass filter - used to determine if a security is in a trend or cycle.
Now with an adaptive period setting! I use Ehlers in-phase & quadrature dominant cycle measurement (IQ IFM) method to set the period dynamically.
This method favors longer periods which tend to produce smoother, albeit laggier bandpass oscillator plots. From my quick tests, I tend to have lag between 4 and 8 bars, depending on the Timeframe.
The lower timeframes tend to have more noise and thus produce more interfering frequencies that may cause lag.
>Settings
Source: Select the data source to perform calc's on (close, open, etc...)
Period: Select the period to tune. Periods outside of this value will be attenuated (reduced)
Adaptive: Enable to have the I-Q IFM set the period for you (disables Period setting)
Bandpass Tolerance: Allow periods that are plus/minus the chosen period to pass.
Cycle Tolerance: Sensitivity of cycle mode. Lower values consider trends more frequent, higher values consider cycles more frequent.
Bandpass tolerance example: for instance, if this setting is 0.1 (10%) and Period is set to 20, then waves with a period of 18 - 22 will pass.
>How to read
Red line is the bandpass output, showing a lagged version of the dominant cycle representing the
Black lines are the upper and lower bounds for a cycle
Green Background indicates an uptrend
Red background indicates a downtrend
Relative Strength Volatility Variable Bands [DW]This is an experimental adaptive trend following study inspired by Giorgos Siligardos's Reverse Engineering RSI and Tushar S. Chande's Variable Moving Average.
In this study, reverse engineered RSI levels are calculated and used to generate a volatility index for VMA calculation.
First, price levels are calculated for when RSI will equal 70 and 30. The difference between the levels is taken and normalized to create the volatility index.
Next, an initial VMA is calculated using the created volatility index. The moving average is an exponential calculation that adjusts the sampling length as volatility changes.
Then, upper and lower VMAs are calculated by taking a VMA of prices above and below the initial VMA. The midline is produced by taking the median of the upper and lower VMAs.
Lastly, the band levels are calculated by multiplying the distance from the midline to the upper and lower VMAs by 1, 2, 3, 4, and 5.
Bar colors are included. They're based on the midline trend and price action relative to the upper and lower VMAs.
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
Retention-Acceleration FilterAnother Adaptive Filter
This indicator share the same structure as a classic adaptive filter using an exponential window with a smoothing constant.
However the smoothing constant used is different than any previously made (Kalman Gain, Efficiency ratio, Scaled Fractal Dimension Index) ,
here the smoothing constant is inspired by the different formulations for parameters resolution used in HPLC S. Said (J. High Resolution Chromatograpy &Chromatography Communciations, (1979) 193).
Different assumptions can be made which lead to different expressions for resolution in chromatographic parameters, therefore we will use highest's and lowest's in order to estimate an optimal smoothing constant based on if the market is trending or not. It can be complicated at first but the goal is to provide both smoothness at the right time and a fast estimation of the market center.
Handling Noise
In Red a Pure Sinewave. In White Sinewave + Noise. In Blue our filter of Period 3
Handling stationary signals is not the best thing to do since we need highest's and lowest's and for that non stationary signals with trend + cycle + noise are more suitable.
It is also possible to make it act faster by quiting the pow() function of AltK with sqrt(length) and smoothing the remaining constant.
Range Filter [DW]This is an experimental study designed to filter out minor price action for a clearer view of trends.
Inspired by the QQE's volatility filter, this filter applies the process directly to price rather than to a smoothed RSI.
First, a smooth average price range is calculated for the basis of the filter and multiplied by a specified amount.
Next, the filter is calculated by gating price movements that do not exceed the specified range.
Lastly the target ranges are plotted to display the prices that will trigger filter movement.
Custom bar colors are included. The color scheme is based on the filtered price trend.
Jurik Moving AverageThis indicator was originally developed by Mark Jurik.
NOTE: If Mr. Jurik ask me to remove this indicator from public access then I will do it.
Adaptive Least SquaresAn adaptive filtering technique allowing permanent re-evaluation of the filter parameters according to price volatility. The construction of this filter is based on the formula of moving ordinary least squares or lsma , the period parameter is estimated by dividing the true range with its highest. The filter will react faster during high volatility periods and slower during low volatility ones.
High smooth parameter will create smoother results, values inferior to 3 are recommended.
You can easily replace the parameter estimation method as long as the one used fluctuate in a range of , for example you can use the efficiency ratio
ER = abs(change(close,length))/sum(abs(change(close)),length)
Or the Fractal Dimension Index , in fact any values will work as long as they are rescaled (stoch(value,value,value,length)/100)
For any suggestions/questions feel free to send me a message :)
Ehlers Smoothed Adaptive MomentumEhlers Smoothed Adaptive Momentum script.
This indicator was developed and described by John F. Ehlers in his book "Cybernetic Analysis for Stocks and Futures" (2004, Chapter 12: Adapting to the Trend).
Ehlers Instantaneous TrendlineEhlers Instantaneous Trendline script.
This indicator was described by John F. Ehlers in his book "Rocket Science for Traders" (2001, Chapter 10: The Instantaneous Trendline).
Kaufman Adaptive Moving AverageKaufman Adaptive Moving Average script.
This indicator was originally developed by Perry J. Kaufman (`Smarter Trading: Improving Performance in Changing Markets`, 1995).
Ehlers FilterThis is the Adaptive Ehlers Filter.
I had to unroll the for loops and array because TV is missing crucial data structures and data conversions (Arrays and series to integer conversion for values).
I'm in the process of releasing some scripts. This is a very old script I had. This contains volatility ranges and can be used as trading signals. You can also see how the EF moves up or down, the direction, when price is sideways, and use price breaks up and down as signals from the line.
Have fun, because I didn't making this script hahaha
NOTE : There is an issue with the script where at certain time frames it positions itself below or above. I think its due to calculations. If anyone knows the fix before I get the chance to take a look at it, please let me know.
books.google.com
Ehlers MESA Adaptive Moving Averages (MAMA & FAMA)Ehlers MESA Adaptive Moving Averages (MAMA & FAMA) script.
These indicators was originally developed by John F. Ehlers (Stocks & Commodities V. 19:10: MESA Adaptive Moving Averages).
Ehlers Deviation-Scaled Moving Average (DSMA)Ehlers Deviation-Scaled Moving Average indicator script.
This indicator was originally developed by John F. Ehlers (Stocks & Commodities V. 36:8: The Deviation-Scaled Moving Average).
Holt Exponential Moving AverageHolt Exponential Moving Average indicator script.
This indicator was originally developed by Charles C. Holt (International Journal of Forecasting 20(1):5-10, March 2004: Forecasting seasonals and trends by exponentially weighted moving averages).
Ahrens Moving AverageAhrens Moving Average indicator script.
This indicator was originally developed by Richard D. Ahrens (Stocks & Commodities V.31:11 (26-30): Build A Better Moving Average).
Adaptive Laguerre FilterAdaptive Laguerre Filter indicator script.
The Adaptive Laguerre Filter was originally developed and described by John Ehlers in his paper `Time Warp – Without Space Travel`.
Thanks to @apozdnyakov for the sorting solution.
Sharp Modified Moving AverageSharp Modified Moving Average indicator script. This indicator was originally developed by Joe Sharp (Stocks & Commodities, V.18:1, More Responsive Moving Averages).