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 !
Smooth
Pentuple Exponential Moving Average (PEMA)This type of moving average was originally developed by Bruno Pio in 2010. I just ported the original code from MetaTrader 5. The method uses a linear combination of EMA cascades to achieve better smoothness. Well, actually you can create your own X-uple EMA, but be sure that the combination' coefficients are valid.
Quadruple Exponential Moving Average (QEMA)This type of moving average was originally developed by Bruno Pio in 2010. I just ported the original code from MetaTrader 5.
Parabolic Weighted Moving AverageThe weights of this moving average are powers of the weights of the standard weighted moving average WMA .
Remember:
When parameter Power = 0, you will get SMA .
When parameter Power = 1, you will get WMA .
Good luck!
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.
Smoothed RSIThis is a sample script I coded during one of my mentoring videos about my methodology, the goal of that video is to teach my students how they can do their R&D !
Efficient PriceTrading The Movements That Matters
Inspired by the Price Volume Trend indicator the Efficient Price aim to create a better version of the price containing only the information a trend trader must need.
Calculation
This indicator use the Efficiency Ratio as a smoothing constant, it is calculated as follow :
ER = abs(change(close,length))/sum(abs(change(close)),length)
The goal of the Efficiency Ratio is to show if the market is trending or ranging.If ER is high then the market is considered to be trending, if ER is low then the market is considered to be ranging.
Then the Efficient Price is calculated :
EP = cum(change(close)*ER)
When the price is trending, the indicator will show movements of the price with unchanged volatility, but if the price is not trending then the indicator will flatten those movements.Think of this indicator as both a filter and a compressor and the Efficient Price as some kind of threshold.
The Efficient Price As Input For Indicators/Strategies
If the indicator show the movement of the trending price, it can be interesting to use it as input in order to reduce the number of false signals in a strategy.
We will test 2 MACD strategy provided by tradingview, one using the closing price (In Red) and one with the efficient price (In White) as input
with both the following parameters :
fastLength = 50
slowlength = 200
MACDLength = 20
length = 50
Where length is the parameter of the Efficient Price.A spread of 2 pips is used.
Without Efficient Price : 26.88% of profitability, 69 pips of profit.
With Efficient Price : 38.46% of profitability, 336 pips of profit.
The difference of profitability is of 11.58%, the strategy with the Efficient Price made few trades and its equity have a lower variance than the equity of the MACD strategy using closing price.
Smoothed Version
It is possible to smooth the indicator output by using the following code :
EP = cum(change(close,length)*ER)
Hope you enjoy
For any questions/demands feel free to pm me, i would be happy to help you
Recursive StochasticThe Self Referencing Stochastic Oscillator
The stochastic oscillator bring values in range of (0,100). This process is called Feature scaling or Unity-Based Normalization
When a function use recursion you can highlights cycles or create smoother results depending on various factors, this is the goal of a recursive stochastic.
For example : k = s(alpha*st+(1-alpha)*nz(k )) where st is the target source.
Using inputs with different scale level can modify the result of the indicator depending on which instrument it is applied, therefore the input must be normalized, here the price is first passed through a stochastic, then this result is used for the recursion.
In order to control the level of the recursion, weights are distributed using the alpha parameter. This parameter is in a range of (0,1), if alpha = 1, then the indicator act as a normal stochastic oscillator, if alpha = 0, then the indicator return na since the initial value for k = 0. The smaller the alpha parameter, the lower the correlation between the price and the indicator, but the indicator will look more periodic.
Comparison
Recursive Stochastic oscillator with alpha = 0.1 and bellow a classic oscillator (alpha = 1)
The use of recursion can both smooth the result and make it more reactive as well.
Filter As Source
It is possible to stabilize the indicator and make it less affected by outliers using a filter as input.
Lower alpha can be used in order to recover some reactivity, this will also lead to more periodic results (which are not inevitably correlated with price)
Hope you enjoy
For any questions/demands feel free to pm me, i would be happy to help you
Karobein OscillatorDeveloped by Emily Karobein, the Karobein oscillator is an oscillator that aim to rescale smoothed values with more reactivity in a range of (0,1)
Calculation
The scaling method is similar to the one used in a kalman filter for the kalman gain.
We first average the up/downs x, those calculations are similar to the ones used for calculating the average gain/loss in the relative strength index.
a = ema(src < src ? x : 0,length)
b = ema(src > src ? x : 0,length)
where src is a exponential moving average of length period and x is src/src in the standard calculations, but anything else can be used as long as x > 0 .
Then we rescale the results.
c = x/(x + b)
d = 2*(x/(x + c*a)) - 1
How To Use
It is better to use centerline-cross/breakouts/signal line.
In general when we use something smooth as input in oscillators, breakouts are better than reversals, you can see this with the stochastic and rsi.
So a simple approach could be buying when crossing over 0.8 and selling when crossing under 0.2.
Here is the balance of a strategy using those conditions, length = 50 .
20 trades have been mades since the 29 oct we made 341 pips with eur/usd, of course this backtest was made during good trends period,
this result is not representative of how the strategy work with other conditions/markets.
For any questions/suggestions feel free to contact me
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
Mean Reversion and Momentum - Updated with gaussiana smoothingMean Reversion and Momentum
Interpretation:
- Divergence means trend reversal
- Parallel movement means trend continuation
Squares above serve as a confirming signal
Quadratic RegressionA quadratic regression is the process of finding the equation that best fits a set of data.This form of regression is mainly used for smoothing data shaped like a parabola.
Because we can use short/midterm/longterm periods we can say that we use a Quadratic Least Squares Moving Average or a Moving Quadratic Regression.
Like the Linear Regression (LSMA) a Quadratic regression attempt to minimize the sum of squares (sum of the squared difference between a set of data and an estimator), this is why
those kinds of filters have low lag .
Here the difference between a Least Squared Moving Average ( green ) and a Quadratic Regression ( red ) of both period 500
Here it look like the Quadratic Regression have a best fit than the LSMA
Hamming Windowed Volume Weighted Moving AverageApplying a window to the filter weights provides sometimes extra control over the characteristics of the filter.In this script an hamming window is applied to the volume before being used as a weight.In general this process smooth the frequency response of a filter.
Lets compare the classic vwma with hamming windowed vwma
Something i noticed is that windowed filters depending on their period ( high ones in general ) tend to make less bad crosses with the price ( at least with the hamming window )
Here are some data regarding number of crosses with period 50 with the hamming vwma in orange and the classic vwma in purple
Feel free to use the hamming window when using weighted filter.
Retrospective Candlestick ChartWhen i was in Japan with some traders colleagues we talked about traditional charting tools from this country and how they changed the way we look at our charts today. Then suddenly one of the japanese traders i have met earlier said "Why not making another charting tool ? Smoother than Heikin-Ashi and including all the information a trader may need but easier to interpret".
So i had the idea of averaging the input and the output of the respective close / open / high and low price using a recursive exponential window functions, each values will be closer to their true value if they are volatile, if they are not then those values will look smoother, the length input represents the reactivity of the candles, high values represents smoother results but less reactive.The goal of those candles is to make all the information easier to interpret by a trader.
500 input length , the price look smoother, supports and resistances are easier to make.
The interpretation of highs and lows are important, the Retrospective Candlestick Chart save you time by showing only huge movements.
Logistic CorrelationLogistic Correlation is a correlation oscillator using a logistic function.
A Logistic Function is a Sigmoid Function who stabilize the variance of data.The logistic function have the same function as the inverse fisher transform but with an advantage over it, the k constant can control the steepness of the curve, lowers k's will preserve the original form of the data while highers one will transform it into a more square shaped form.
10 k
20 k
Double Exponential SmoothingSingle Exponential Smoothing ( ema ) does not excel in following the data when there is a trend. This situation can be improved by the introduction of a second equation with a second constant gamma .
The gamma constant cant be lower than 0 and cant be greater than 1, higher values of gamma create less lag while preserving smoothness.Higher values of length must be followed by higher values of gamma in order to keep the lag low.
The first smoothing part consist of a classic ema but we add s-s1 to the previous smoothed value, this will help decrease lag.The second smoothing part then updates the trend, which is expressed as the difference between the last two values.
KT_Smooth_StochasticI normally don't publish my indicators. However, I couldn't find a smoothed stochastic on TradingView officially or unofficially. This is a standard implementation of a smoothed Fast Stochastic where %K and %D are calculated and then smoothed by n periods. This helps to reduce chop and gives better extreme signals.
I have defaulted the indicator to use commonly used settings where %K is over 14 periods, %D is over 7 period, and the smoothing factor is 3 periods. I have also defaulted the extreme lines to an upper band of 80, mid band of 50, and lower band of 20. However, my favorite settings are %K = 10, %D = 10, Smooth = 3, upper band = 75, mid band = 50, and lower band = 25.