Trend & direction

Fractal 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
14512096Price above EMA 12 = strengthPrice below EMA 12 = weaknessEMA 12 acts as support / resistance
EMA 12EMA 26How to read FRAMA on the chart — the callouts mark what to look for.

The formula

First estimate D, the fractal dimension of recent price — roughly, how jagged the path is (1 = a straight line, 2 = a filled-in, box-like scribble). That D sets the smoothing constant α each bar: clean, trending price (D near 1) makes α large so the average speeds up, while congested, jagged price (D near 2) makes α small so it slows down and filters the chop.

α = e^(−4.6 × (D − 1)), FRAMA = α × Price + (1 − α) × prior FRAMA
Worked example
Fractal dimension Dα = e^(−4.6(D−1))Behaviour
1.0 (smooth trend)1.00Fast — tracks price
1.5 (mixed)0.10Medium
2.0 (choppy)0.01Slow — filters noise

Low D → high α → responsive; high D → low α → smooth

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.

Reading the signals on the chart

14512096
EMA 12EMA 26The ▲/▼ marks flag where price most recently crossed the line — the cues a trend-follower would act on.

Best timeframes

  • Scalping1m – 5mvery noisy at this speed
  • Day trading5m – 15m
  • Swing1h – 4hsweet spot
  • PositionDailystable trend filter

FRAMA shines where price alternates between trend and congestion — its adaptiveness is wasted on a single, uniform regime.

FRAMA vs other adaptive averages

FRAMAKAMAEMA
Adapts speedYesYesNo
Adapts usingFractal dimensionEfficiency ratioFixed
Fast in trendsYesYesNo
Quiet in chopYesYesNo

Common price-action setups

How the signal typically plays out on the chart.

Ride the FRAMA slope

In a clean uptrend FRAMA speeds up and slopes higher; stay long while it rises and price holds above it, and step aside the moment it flattens.

Buy the slope
Trend continuation
Pullback to a rising FRAMA

Price dips back to touch a still-rising FRAMA and resumes higher; enter on the bounce with a stop just below the average.

Buy the pullback
Uptrend resumes
FRAMA rolls over

The FRAMA flattens and price closes below it as the slope turns down; exit longs or short, with a stop back above the average.

Sell the cross
Trend turns down

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.

Common mistakes

  • Using FRAMA in a tight range and treating every small slope wiggle as a trend.
  • Setting the fractal window too short, which makes the dimension estimate jumpy and unreliable.
  • Expecting it to call tops and bottoms — it follows trends, it does not predict reversals.
  • Trading a flat FRAMA, when its whole value is telling you to stand aside there.
  • Assuming more complexity means more accuracy — a plain EMA often does the same job.