Direct answer
A worked example of ATR shows how you turn a small set of prices into True Range values and then average them to get ATR. To keep the example verifiable, the numbers below are assumed (no live quotes), and every calculation assumption is stated.
Mechanism or definition
ATR (Average True Range) is a volatility measure based on True Range (TR). For each period, TR is defined as the greatest of:
- current high − current low
- absolute value of (current high − prior close)
- absolute value of (current low − prior close)
Then ATR is typically an average of TR over a chosen lookback length (often 14 periods in many common conventions). Because the lookback length and the period data you choose are inputs, ATR is not a single universal number; it depends on the dataset and settings.
Key idea: ATR summarizes movement size, not direction. A higher ATR means larger typical ranges in the measured periods; it does not tell you whether price will go up or down next.
Evidence or example (worked calculation)
Assumptions (made explicit)
- We use 3 periods to keep the arithmetic transparent.
- Each period is one bar (for example, one day). The ATR lookback in this example is 3, so ATR will be the average of TR1, TR2, TR3.
- Prices are assumed exactly as listed below.
Assumed OHLC inputs
Let prior close for period 1 be given as C0. Then for each period t we need High (Ht), Low (Lt), and prior close (Ct−1).
- Period 1: H1 = 1.2000, L1 = 1.1950, prior close C0 = 1.1980
- Period 2: H2 = 1.2020, L2 = 1.1970, prior close C1 = 1.2000
- Period 3: H3 = 1.2010, L3 = 1.1960, prior close C2 = 1.1975
(Notice we only need the prior close for each period’s TR calculation. The example provides it.)
Step 1: Compute True Range (TR)
Period 1
- (H1 − L1) = 1.2000 − 1.1950 = 0.0050
- |H1 − C0| = |1.2000 − 1.1980| = 0.0020
- |L1 − C0| = |1.1950 − 1.1980| = 0.0030
- TR1 = max(0.0050, 0.0020, 0.0030) = 0.0050
Period 2
- (H2 − L2) = 1.2020 − 1.1970 = 0.0050
- |H2 − C1| = |1.2020 − 1.2000| = 0.0020
- |L2 − C1| = |1.1970 − 1.2000| = 0.0030
- TR2 = max(0.0050, 0.0020, 0.0030) = 0.0050
Period 3
- (H3 − L3) = 1.2010 − 1.1960 = 0.0050
- |H3 − C2| = |1.2010 − 1.1975| = 0.0035
- |L3 − C2| = |1.1960 − 1.1975| = 0.0015
- TR3 = max(0.0050, 0.0035, 0.0015) = 0.0050
Step 2: Average TR to get ATR
If ATR is the average of TR over these 3 periods:
- ATR(3) = (TR1 + TR2 + TR3) / 3 = (0.0050 + 0.0050 + 0.0050) / 3 = 0.0050
So, under these explicit assumptions, ATR equals 0.0050 in the price units of the input series.
How you can verify it independently
Recompute TR1, TR2, TR3 using the same formulas and the same assumed H/L/prior-close values, then take the arithmetic mean. If any value differs, the discrepancy must come from a different input dataset, a different period definition, or a different averaging length.
Limitations and risks (material failure modes)
- Not directional: ATR measures volatility magnitude. Using ATR alone to infer direction can fail because direction depends on price structure, not just range size.
- Choice of inputs changes ATR: Different bar timeframe (daily vs hourly), different lookback length, or different data vendor adjustments can change TR and therefore ATR.
- Regime changes: Volatility can shift suddenly. Past ATR (even if computed correctly) may not reflect future volatility when market conditions change.
- Cost and execution effects: ATR is computed from price ranges, but real outcomes depend on spreads, slippage, and fees, which can be material relative to the scale of movement.
Verification or next question
To deepen understanding, you can redo the worked example with a different lookback (for example, 5 periods) and confirm how the ATR value moves when TR values vary. A useful next question is: how would TR change if a period’s high or low is far from the prior close (for example, a large gap), since TR takes the maximum of three terms?