All indicators

Ehlers 2-Pole Super Smoother Filter (SSF2)

A two-pole recursive smoother that removes the fast wiggle a moving average of the same length still passes, with less lag.

BTCUSD1h
Fixed data to Oct 6, 2026, UTC
Loading the chart

The 2-Pole Super Smoother is a recursive lowpass filter. Each value blends the current price with the filter's two previous outputs, using coefficients chosen so that fast price noise is strongly damped while slower movement passes through.

From the length it sets arg = sqrt(2) pi / length and e = exp(-arg), then c2 = 2e cos(arg), c3 = -e squared and c1 = 1 - c2 - c3. On each bar the value is c1 times the price plus c2 times the previous output plus c3 times the output two bars back. Where an earlier output does not exist yet, the nearest price is used in its place, so on the first bar the filter returns the price itself and settles from there without a blank warmup. A missing price borrows the previous one.

How to read Ehlers 2-Pole Super Smoother Filter (SSF2)

Use it as a low-lag moving average. Price above a rising line points to upward short-term direction, and below a falling line to downward direction. Turns in the line, and crossings between price and the line, mark changes in the smoothed trend.

It stays smooth through choppy bars where a simple or exponential average of the same length would still twitch. A longer length gives a calmer line that turns later. It follows moves rather than anticipating them.

Settings

Length
The cutoff period in bars. A longer length removes more noise and turns later.
Source
The price series the filter smooths. The close by default.

Frequently asked questions

How is it different from an exponential moving average?

An exponential average has one pole and still passes much of the fastest noise. This filter has two poles, so its response falls off about twice as steeply past the cutoff and damps that noise far more.

Why does it start on the first bar?

Missing earlier values are filled with the nearest available price, so the first output equals the price and the recursion builds from there.

Write your own in OpenScript

Every study here is plain OpenScript. Change a setting, combine two, or turn one into a strategy, then backtest it in /trading and run it in sandbox trading (analyzer mode in OpenAlgo) before going further.