Right Sided Ricker Moving Average And The Gaussian Derivatives

In general gaussian related indicators are built by using the gaussian function in one way or another, for example a gaussian filter is built by using a truncated gaussian function as filter kernel (kernel refer to the set weights) and has many great properties, note that i say truncated because the gaussian function is not supposed to be finite. In general the gaussian function is represented by a symmetrical bell shaped curve, however the gaussian function is parametric, and the user might adjust the position of the peak as well as the width of the curve, an indicator using this parametric approach is the Arnaud Legoux moving average ( ALMA ) who posses a length parameter controlling the filter length, a peak parameter controlling the position of the peak of the gaussian function as well as a width parameter, those parameters can increase/decrease the lag and smoothness of the moving average output.

However what about the derivatives of the gaussian function ? We don't talk much about them and thats a pity because they are extremely interesting and have many great properties as well, therefore in this post i'll present a low lag moving average based on the modification of the 2nd order derivative of the gaussian function, i believe this post will be extremely informative and i hope you will enjoy reading it, if you are not a math person you can skip the introduction on gaussian derivatives and their properties used as filter kernel.

Gaussian Derivatives And The Ricker Wavelet

The notion of derivative is continuous, so we will stick with the term discrete derivative instead, which just refer to the rate of change in the function, we have a change function in pinescript, and we will be using it to show an approximation of the gaussian function derivatives.

Earlier i used the term 2nd order derivative, here the derivative order refer to the order of differentiation, that is the number of time we apply the change function. For example the 0 (zeroth) order derivative mean no differentiation, the 1st order derivative mean we use differentiation 1 time, that is change(f), 2nd order mean we use differentiation 2 times, that is change(change(f)), derivates based on multiple differentiation are called "higher derivative". It will be easier to show a graphic :

Here we can see a normal gaussian function in blue, its scaled 1st order derivative in orange, and its scaled 2nd derivative in green, note that i use scaled because i used multiplication in order for you to see each curve, else it would have been less easy to observe them. The number of time a gaussian function derivative cross 0 is based on the order of differentiation, that is 2nd order = the function crossing 0 two times.

Now we can explain what is the Ricker wavelet, the Ricker wavelet is just the normalized 2nd order derivative of a gaussian function with inverted sign, and unlike the gaussian function the only thing you can change is the width parameter. The formula of the Ricker wavelet is show'n here , where sigma is the width parameter.

The Ricker wavelet has this look :

Because she is shaped like a sombrero the Ricker wavelet is also called "mexican hat wavelet", now what would happen if we used a Ricker wavelet as filter kernel ? The response is that we would end-up with a bandpass filter, in fact the derivatives of the gaussian function would all give the kernel of a bandpass filter, with higher order derivatives making the frequency response of the filter approximate a symmetrical gaussian function, if i recall a filter using the first order derivative of a gaussian function would give a frequency response that is left skewed, this skewness is removed when using higher order derivatives.

The Indicator

I didn't wanted to make a bandpass filter, as lately i'am more interested in low-lag filters, so how can we use the Ricker wavelet to make a low-lag low-pass filter ? The response is by taking the right side of the Ricker wavelet, and since values of the wavelets are negatives near the border we know that the filter passband is non-monotonic, that is we know that the filter will have low-lag as frequencies in the passband will be amplified.

So taking the right side of the Ricker wavelet only mean that t has to be greater than 0 and linearly increasing, thats easy, however the width parameter can be tricky to use, this was already the case with ALMA , so how can we work with it ? First it can be seen that values of width needs to be adjusted based on the filter length.

In red width = 14, in green width = 5. We can see that an higher values of width would give really low weights, when the number of negative weights is too important the filter can have a negative group delay thus becoming predictive, this simply mean that the overshoots/undershoots will be crazy wild and that a great fit will be impossible.

Here two moving averages using the previous described kernels, they don't fit the price well at all ! In order to fix this we can simply define width as a function of the filter length, therefore the parameter "Percentage Width" was introduced, and simply set the width of the Ricker wavelet as p percent of the filter length. Lower values of percent width reduce the lag of the moving average, but lets see precisely how this parameter influence the filter output :

Here the filter length is equal to 100, and the percent width is equal to 60, the fit is quite great, lower values of percent width will increase overshoots, in fact the filter become predictive once the percent width is equal or lower to 50.

Here the percent width is equal to 50. Higher values of percent width reduce the overshoots, and a value of 100 return a filter with no overshoots that is suited to act as a lagging moving average.

Above percent width is set to 100. In order to make use of the predictive side of the filter, it would be great to introduce a forecast option, however this require to find the best forecast horizon period based on length and width, this is no easy task.

Finally lets estimate a least squares moving average with the proposed moving average, you know me...a percent width set to 63 will return a relatively good estimate of the LSMA .

LSMA in green and the proposed moving in red with percent width = 63 and both length = 100.


A new low-lag moving average using a right sided Ricker wavelet as filter kernel has been introduced, we have also seen some properties of gaussian derivatives. You can see that lately i published more moving averages where the user can adjust certain properties of the filter kernel such as curve width for example, if you like those moving averages you can check the Parametric Corrective Linear Moving Averages indicator published last month :

I don't exclude working with pure forms of gaussian derivatives in the future, as i didn't published much oscillators lately.

Thx for reading !

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.

Want to use this script on a chart?

Become a Patreon and get access to exclusive technical indicators!

You can also check out some of the indicators I made for luxalgo :


Very informative as always. I've enjoyed reading all of your publishings.

You have inspired me into learning more about using digital filters in trading. I've seen very few (if any) informative quantitative-minded writers similar to your calibre, let alone involving DSP.

Just to let you know there are someone out there really respect your work and contribution :)
+3 Reply
@varote, Thx a lot for reading my posts, its the best thing i can hear from peoples. Also knowing that i can inspire others is a great thing, its in fact mostly why i'am publishing stuff. As for my calibre i don't think i'am that great, if you actually see how true quant analyst and engineers work you'll see how my skills are really poor in comparison.

But thx a lot for your comment and i hope you will like my future works :)
+1 Reply
Very interesting, Alex. Thanks!
+2 Reply
alexgrover wroclai
@wroclai, If i remember well you liked the gaussian filter quite a lot, so i thought about you when making this post, i hope you will use the proposed indicator :D
wroclai alexgrover
@alexgrover, that’s right! I love it. Can’t wait to play with this one!
Thank you for the indicator. The indicator works great also as source for the RSI indicator.
The RSI will then be smoother.
+1 Reply
@xcromo, Indeed, using smooth inputs for other indicators will often return a smooth output, thx for your support :3
Thanks, Alex. I learn a lot from your posts.
+1 Reply
Hey Alex, I do love all your work and I can see you have put a lot of efforts to introduce all your algo.
This RSRMA so impressive as always as varote mentioned in top of the comment section.

Appreciated your generosity and contribution =D
+1 Reply
Thanks. Any ideas for how can I reduce lag of a longer period oscillator with a shorter period oscillator by using their second derivatives?
+1 Reply
Home Stock Screener Forex Screener Crypto Screener Economic Calendar About Chart Features Pricing Refer a friend House Rules Help Center Website & Broker Solutions Widgets Charting Solutions Lightweight Charting Library Blog & News Twitter