Turnmarks

Six ways to build a moving average

Every smoothing indicator is one of a small number of constructions. This page puts 12 of them on one ruler — the same four numbers for each, computed from the coefficients and not from any market — so that for once they can be compared instead of advocated.

Not one of the numbers below comes from a chart. They are properties of the coefficients, so no backtest can disagree with them, no choice of period or instrument can flatter one filter over another, and you can recompute every one of them from the exported taps in a spreadsheet.

What the four numbers are

The four numbers, and what each one is
Number What it is
LagHow many bars behind price the line sits: the centre of mass of the impulse response, which for taps summing to 1 is exactly the group delay at zero frequency.
Noise gainWhat it does to the variance of random movement — the sum of the squared taps. Below 1 it damps, above 1 it amplifies.
Peak gainThe most it magnifies anything, at any frequency. Usually not in the band it keeps but in the transition just below it, which is where a fast design overshoots.
LeakHow much of the movement faster than 4.0 bars still gets through, at the single frequency it handles worst.

12 filters, measured identically

Every filter at period 24, measured by identical code. Green marks the best value in a column, and less is better in all of them — the marks land on three different filters, which is the point. No column marked Peak: too many rows tie for the best value there for a mark to single anything out. Every filter name is a link: it opens that method's generator with these exact settings already in the dials.
Filter Method Lag Noise Peak Leak vs an EMA of the same lag
SMAwindowed11.500.04171.0000.05546leak 0.942× · noise 1.00×
WMAwindowed7.670.05441.0000.05656leak 0.654× · noise 0.889×
ALMA (0.85/6)windowed4.620.09221.0000.05202leak 0.378× · noise 0.944×
EMApoles11.500.04171.0000.05887leak 1.00× · noise 1.00×
Ehlers SuperSmootherpoles4.930.09201.0000.02421leak 0.187× · noise 1.00×
Hullcascade0.670.17921.2870.04552leak 0.0817× · noise 0.418×
ZLEMAcascade0.500.14171.1450.14882leak 0.235× · noise 0.283×
T3 (v=0.7)cascade10.350.04201.1350.00095leak 0.0146× · noise 0.911×
Ehlers Laguerre (g=0.8)laguerre17.500.03091.0000.00547leak 0.139× · noise 1.11×
ours, Fastleast-squares4.380.24541.5700.01026leak 0.0713× · noise 2.40×
ours, Balancedleast-squares7.660.15141.0620.00169leak 0.0195× · noise 2.47×
ours, Smoothleast-squares18.500.12991.0040.00154leak 0.0415× · noise 4.94×

Leak is measured over periods of 4.0 bars and shorter for every row, which is what makes the column comparable across the table. The generator on each method page prints it over that design's own stopband instead — the more useful figure there, and a different one.

What the table says

Read down the lag column, not down the names: filters only argue with each other at equal delay. The lowest leak here belongs to T3 (v=0.7) at 0.00095, and the highest noise gain to ours, Fast at 0.2454 — two different filters, which is the whole point. Rejection is bought with tap energy; lag is bought back with negative coefficients; the two mechanisms have different price lists, and no name tells you which one you have.

Zero lag, and what it costs

Every few months somebody publishes a smoother that claims no lag, and the argument that follows is about whether that is possible. It is, it is not new, and it is measurable. Tillson's T3 has carried a dial for it since 1998.

T3's v dial: one filter, walked from very late to not late at all. The green collects at v = 0.0, which takes three of the columns and sits 34.50 bars behind price; v = 1.0 takes the lag column alone. That trade, in one table, is the whole point of the dial.
v Lag Noise Peak Leak
0.034.500.01561.0000.00020
0.324.150.02221.0000.00044
0.710.350.04201.1350.00095
1.00.000.07281.4790.00153

At v=0 it is a plain triple cascade, 34.50 bars behind price, leaking 0.00020. At v=1 the lag is 0.00 — not nearly zero, zero — and the bill is a noise gain of 0.0728 against 0.0156 and a peak gain of 1.479 against 1.000. The question was never whether zero lag exists. It is whether the thing offering it also tells you that it carries 37% past the top of every move before it settles.

The methods, one page each

What this cannot tell you

What is measured here is the filter: how far behind price it sits, what it does to random movement, how much it overshoots, how much of the fast movement it lets through. Nothing here measures what happens when you trade with one. That depends on the rule you put it in, and we have not tested yours.

So the table answers one question and not the other. It is for choosing a delay with the bill in front of you, instead of choosing a name.