Skip to main content

ATR Explained

TL;DR

ATR (Average True Range) is a volatility indicator — the average size of a bar's range over the last N periods (default 14). It does not predict direction. Its job is to tell you how big a typical move is right now so you can size stops, targets, and position sizes to actual conditions rather than arbitrary point values.

How ATR is calculated

"True Range" is the greater of:

  1. Current bar high − current bar low
  2. Current bar high − prior bar close (gap-inclusive)
  3. Prior bar close − current bar low (gap-inclusive)

The bigger of those three numbers is the true range for that bar. ATR is then the moving average (typically Wilder smoothing) of true range over N periods.

Key property: ATR is in the same units as price. On ES, ATR is in points. On CL, ATR is in dollars per barrel. On EUR/USD, ATR is in pips.

The three ways traders use ATR

1. Stop placement. Place stops at 1.5× to 2× ATR beyond entry. This gives the trade room to breathe without risking a huge dollar amount on a low-volatility day.

2. Profit targets. Scale targets by ATR multiples — 1× ATR for first target, 2× ATR for runner, 3× ATR for stretch. Adapts automatically across market regimes.

3. Position sizing. Given a fixed dollar risk per trade, compute contract size as: risk_$ / (ATR × dollar_per_point × stop_multiple). Contracts shrink on volatile days and grow on quiet ones — your dollar risk stays constant.

ATR in Pine Script (v6)

//@version=6
indicator("ATR Stop Levels", overlay=true)

length = input.int(14, "ATR Length")
stopMult = input.float(2.0, "Stop Multiplier")
tpMult = input.float(3.0, "Target Multiplier")

atrVal = ta.atr(length)

longStop = close - atrVal * stopMult
longTarget = close + atrVal * tpMult
shortStop = close + atrVal * stopMult
shortTarget = close - atrVal * tpMult

plot(longStop, title="Long Stop", color=color.red, style=plot.style_linebr)
plot(longTarget, title="Long Target", color=color.green, style=plot.style_linebr)
plot(shortStop, title="Short Stop", color=color.red, style=plot.style_linebr)
plot(shortTarget, title="Short Target", color=color.green, style=plot.style_linebr)

// Emit ATR in alert messages so your webhook can use it downstream
alertcondition(true, "ATR value", "ATR is {{plot_1}}")

Settings

Default: 14 periods, Wilder smoothing. Leave it alone.

The only knob worth tuning is the multiplier applied to ATR for stops and targets. Tighter (1×) for scalping, wider (2–3×) for swing.

Common mistakes

  • Hardcoding point-based stops. A 10-point stop on ES makes sense on one day and is suicidal on another. ATR-scaled stops self-adjust.
  • Using raw ATR as an entry signal. ATR says nothing about direction. A rising ATR means "volatility is increasing" — not "go long."
  • Applying ATR across instruments without scaling. 2-point ATR on ES and 2-point ATR on a micro make wildly different trade sizes.

Automating ATR-based stops through CrossTrade

Use a TradingView strategy() with ATR-based stops defined in strategy.exit(). When the strategy fires an entry, route it through a CrossTrade webhook with a bracket-order payload that includes the stop and target price. The bracket orders guide walks through the exact payload.

Frequently Asked Questions

What is a good ATR value?

There is no universal 'good' ATR. It's a measurement of current volatility in the instrument's native units. ES typically runs 20–40 ATR on 5-minute bars intraday; NQ runs 60–120. Compare today's ATR to the instrument's recent ATR history, not to an absolute number.

ATR vs standard deviation — what's the difference?

Both measure volatility. ATR uses true bar ranges (including gaps); standard deviation uses closing prices only. ATR is more commonly used for stop placement because it accounts for intraday range; standard deviation is used in Bollinger Bands and statistical models.

Can ATR predict market direction?

No. ATR is directionless — it only measures magnitude. A rising ATR tells you volatility is increasing, which often precedes trend changes, but ATR alone does not say whether to buy or sell.

What's the best ATR multiplier for stops?

1.5× to 2× ATR for day trading futures is a common range. Tighter (1×) increases stop-outs; wider (3×) reduces stop-outs but increases per-trade risk. Backtest any multiplier before committing.