DonovanWall

Roofing Filter [DW]

This is an experimental study built on the concept of using roofing filters on price data proposed by John Ehlers .
Roofing filters are a type of bandpass filter conventionally used in HF radio receivers in the first IF stage to limit the frequency spectrum passed on to later stages in the receiver.

The goal in applying roofing filters to a price signal is to simultaneously attenuate high frequency noise and low frequency distortion to pass an oscillating signal with a nearly zero mean for analysis and/or further calculation.

In this study, there are three filter types to choose from:
-> Ehlers Roofing Filter, which passes data through a 2 pole high pass filter, then through a Super Smoother filter.
-> Gaussian Roofing Filter, which passes data through a 2 pole Gaussian high pass filter, then through a 2 pole Gaussian low pass filter.
-> Butterworth Roofing Filter, which passes data through a 2 pole Butterworth high pass filter, then through a 2 pole Butterworth low pass filter.
Each filter type has different amplitude and delay characteristics, so play around with each type and see which response suits your needs best.

There is an option to normalize the scale of the output as well. The normalization process in this script is computed by comparing positive and negative outputs to the filter's moving RMS value.

The resulting oscillator can be fed through numerous conventional indicators including Stochastic Oscillator, RSI , CCI , etc. to generate smoother, less distorted indicators for a clearer view of turning points.
Alternatively, it can also act as an indicator itself, as implied by the corresponding color scheme included in the script.

Although roofing filters are not conventionally used in the analysis of market data, applying such spectral analysis techniques may prove to be quite useful for the design of more efficient indicators and more reliable predictions.
Release Notes: Updates:
-> Fixed bug in RMS calculation. Big thanks to @yatrader2 for bringing this issue to my attention!
-> Reoganized script structure.
-> Added an optional compression algorithm to the script. This can be used to reduce transients (short duration, high amplitude values) by a specified level of intensity.
Ta bort från favoritskript Add to favorite indicators
For my full list of premium tools, check the blog:
https://wallanalytics.com/

Reach out on Telegram:
https://t.me/DonovanWall

Kommentarer

thank you - big fan of your work, sir :)
+3 Svara
This is a clean, lovely and useful implementation. THANK YOU.

There are 2 small bugs in the normalization feature.
1) sum should be sma because you need the average of the squares that is sum/len.
2) you should round (or floor) the hp+lp/2 to make sure you have an integer length

You can correct this by changing line 97 to: rms = sqrt(sma(pow(roof, 2), round((hp_per + lp_per)/2)))

Here is a general rms function for reuse:
rms_f(_signal,_len)=>sqrt(sma( pow(_signal,2),round(_len)))
+1 Svara
DonovanWall yatrader2
@yatrader2, Thanks for pointing that out. I'll implement the RMS fix in the next update.

I appreciate the feedback!
+1 Svara
Thank you once again!
+1 Svara
John Ehlers studies I love to use it too; thanks for sharing your stuff at TV =D
+1 Svara
great indicator as always mate. i added a histogram and it looks amazing.

+1 Svara
DonovanWall francxisz
@francxisz, That's awesome! Very clever way to utilize the filter. I'm glad to see this indicator is already being put to good use.
+2 Svara
Docop1 francxisz
@francxisz, How do you get the histogram ? And you pass from 1 line to 2... as with another one or so .. i don't see how the script was modded to.. ? thanks
Svara
pshai Docop1
@Docop1, The second line looks like a signal line, similar to what MACD has. So that's simply a moving average of the indicator. The histogram is the difference between those two.
Svara
Grabbing this for another project and I had a thought after rereading my comments below.

I'm wondering if line 139 should be:
rms = RMS(roof, round(sqrt(hp_per * lp_per)))

ie Should it use the geometric mean rather than the arithmetic since we are averaging wave lengths. I know it is pretty subtle, but since you care about details, I thought I'd raise it...
Svara
Hem Aktie-screener Forex-screener Krypto-screener Ekonomisk kalender Hur det fungerar Diagramfunktioner Priser Tipsa en vän Ordningsregler Hjälpcenter Webbsidor och mäklarlösningar Widgets Diagramlösningar Lightweight Charting Library Blogg och nyheter Twitter
Profil Profilinställningar Konto och fakturering Hänvisade vänner Mynt Mina kölappar Hjälpcenter Publicerade idéer Följare Följer Privata meddelanden Chatt Logga ut