Trend & directionFractal Adaptive Moving Average · FRAMA
John Ehlers's average that uses fractal dimension to run fast in trends and slow in congestion.
Works in most conditionsEngine-computed on a fixed sample series
What it is
The Fractal Adaptive Moving Average, or FRAMA, is a trend-following line invented by engineer John Ehlers that automatically changes its own speed depending on how the market is behaving. A normal moving average has one fixed length, so it is always the same amount of slow: too laggy in a fast trend, too jumpy in a quiet range. FRAMA answers a sharper question — how cleanly is price actually moving right now? — and uses that answer to speed up when the market trends smoothly and slow down when the market chops sideways. The clever part is that it measures cleanliness using the fractal dimension of the price path, a number from geometry that describes how jagged a line is. A perfectly straight line has a low fractal dimension; a scribble that fills up space has a high one. FRAMA turns that jaggedness reading into a smoothing setting, bar by bar, with no input from you beyond a single window length.
How it is calculated
FRAMA takes a lookback window (16 bars is the classic default and it must be an even number) and splits it into two equal halves. For each half it measures the price range (highest high minus lowest low) divided by the number of bars, giving two slope-like quantities called N1 and N2; it also measures the range over the full window, giving N3. The fractal dimension D is then D = (ln(N1 + N2) − ln(N3)) / ln(2). When price travels in a clean straight line, the two half-ranges add up to about the full range, so N1 + N2 is close to N3 and D lands near 1; when price zig-zags, the halves cover far more ground than the whole, N1 + N2 is much larger than N3, and D climbs toward 2. That dimension is converted into a smoothing constant with alpha = exp(−4.6 × (D − 1)), which gives alpha = 1 when D = 1 (fastest) and alpha ≈ 0.01 when D = 2 (slowest). Finally FRAMA is just an exponential average using that live alpha: today's FRAMA = alpha × price + (1 − alpha) × yesterday's FRAMA. Later versions by Ehlers clamp the effective length between a fast and a slow limit so the line never freezes completely or reacts to every tick.
Reading it, step by step
Read FRAMA first by its slope: a line tilting clearly up says the adaptive engine has detected a clean uptrend and sped up to hug it, while a downward tilt says the same for a downtrend. Read it second by its flatness: a horizontal, sluggish FRAMA is the indicator telling you the market is jagged and directionless, because a high fractal dimension has throttled it down to a crawl. When price crosses from below to above a rising FRAMA, momentum has shifted up; the reverse when price drops through a falling line. Because the average is fast in trends, its turns arrive far earlier than a fixed 16-period average would, yet in congestion it barely moves, so price can weave back and forth across a flat FRAMA without it changing direction. The distance between price and the line also matters: a wide, growing gap signals a strong impulsive move, while price hugging the line tightly signals a slow grind.
Best timeframes and settings
FRAMA is a swing and position tool at heart and performs best on daily and 4-hour charts where genuine multi-day trends give the fractal-dimension calculation something clean to measure. The default window is 16 bars; shortening it toward 10 makes the whole indicator quicker to re-evaluate the regime but also noisier, while lengthening it toward 40 makes the regime read steadier at the cost of later switches. Intraday scalpers sometimes drop it onto 5- or 15-minute charts, but thin, noisy data inflates the fractal dimension and can leave FRAMA stuck in slow mode when a real move is underway. The modified version adds a fast constant (often equivalent to a 1- to 4-bar EMA) and a slow constant (often 198 or 200 bars) that bracket how quick or sluggish the line is allowed to get. The core trade-off never disappears: the window controls how much history the dimension is measured over, so a shorter window means faster regime detection but a jumpier judgment of whether the market is really trending.
When and where to use it
Reach for FRAMA when you want a single line that behaves itself in both trends and ranges without you re-tuning it, which makes it attractive for systematic and semi-automated strategies. It shines on liquid, well-behaved instruments — major index futures, large-cap stocks, major FX pairs — where price paths are smooth enough for the fractal reading to be meaningful. It is designed to be regime-agnostic, but its real edge is protecting you during chop: the flattening behaviour is a built-in no-trade filter. Avoid leaning on it in very thin or gap-prone markets, on illiquid small-caps, or on ultra-short timeframes where microstructure noise dominates and the dimension estimate becomes unreliable. It is also a poor fit if you specifically want a fixed, predictable amount of lag, because by design its responsiveness is always shifting underneath you.
Strategies that use it
Slope-filter strategy: trade only in the direction FRAMA points — take long setups from other tools when the line is rising and ignore shorts, and vice versa — then flatten or stand aside whenever FRAMA goes flat, treating the flat stretches as explicit no-trade zones. Price-cross strategy: go long when price closes above a FRAMA that has just turned up, place the stop below the recent swing low, and exit when price closes back below the line or the line rolls over. Dual-FRAMA strategy: plot a fast FRAMA (window 10) and a slow FRAMA (window 40) and act on their crossover, entering when the fast line crosses above the slow line in the direction of the higher-timeframe trend and exiting on the opposite cross. In all three, the key discipline is respecting the flat line — most FRAMA losses come from forcing trades while the indicator is signalling congestion.
Combining it with other indicators
Because FRAMA gives direction but not conviction, pair it with a momentum oscillator such as RSI or the MACD histogram to confirm that force is behind the move before you act on a slope change. An explicit trend-strength gauge like ADX is a natural partner: require ADX above 20 to 25 before trusting a FRAMA slope, since a strong ADX confirms the very trend FRAMA is trying to ride. Volatility bands such as Bollinger Bands or Keltner Channels add context on whether price is stretched or coiled around the FRAMA line. Some traders overlay FRAMA on top of Kaufman's Adaptive Moving Average (KAMA), which adapts through an efficiency ratio rather than fractal geometry, and only trust a signal when both adaptive lines agree — a robust way to filter out one method's blind spots.
Where it fails
The fractal-dimension estimate is the weak link: on noisy or thin data it can misjudge the regime, keeping FRAMA slow through the start of a real trend or, less often, letting it speed up into a false break. Sudden gaps and one-off spikes distort the range measurements that feed N1, N2, and N3, so a single wild bar can throw the dimension off for several bars afterward. In a slow, grinding trend that never becomes truly clean, FRAMA may stay half-throttled and lag more than a trader expects from an adaptive tool. It is also more complex and less consistently implemented across platforms than standard averages, so two charting packages can draw meaningfully different FRAMA lines from the same data. The classic mistake is treating a flat FRAMA as a trade signal — it is the opposite, a warning to wait — so discipline around its flat phases is what separates profitable use from whipsaw.
A worked example
Take a 16-bar window that splits into two 8-bar halves. Suppose the first half ranged from 100 to 105, so N1 = (105 − 100) / 8 = 0.625, and the second half ranged from 104 to 110, so N2 = (110 − 104) / 8 = 0.750; over the full 16 bars price ranged 100 to 110, so N3 = (110 − 100) / 16 = 0.625. The fractal dimension is D = (ln(0.625 + 0.750) − ln(0.625)) / ln(2) = (ln 1.375 − ln 0.625) / ln 2 ≈ 1.14, which is close to 1 and marks a fairly clean, trending path. That yields alpha = exp(−4.6 × (1.14 − 1)) ≈ 0.53, a brisk setting. If yesterday's FRAMA was 106 and today's price is 109, then today's FRAMA = 0.53 × 109 + 0.47 × 106 ≈ 107.6, jumping most of the way toward price because the market was judged clean. Had the same window been choppy with D near 1.9, alpha would collapse toward 0.016 and the new FRAMA would sit around 106.05 — barely moving — which is exactly the protective slowdown the indicator is built to provide.