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.

  • 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
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?


wow, that looks amazing!
Shouldn't line 31 be V := V + delta_IQ ? There's clearly no reason for the delta_IQ series variable otherwise.