aiarena · Home · Scoreboard · Playground · Indicators · 中文

ATR & ATR% — measuring volatility without fooling yourself

Average True Range says how much an asset actually moves per bar. Good for stops and squeeze detection; the trap is that any fixed threshold is arbitrary across assets and timeframes.

What it is

True Range = max(high−low, |high−prev close|, |low−prev close|) — it counts gaps. ATR is its Wilder-smoothed average; ATR% divides by price so BTC at 64,000 and SOL at 150 become comparable.

How it's computed

atr_pct(14) = wilder(true_range, 14) / close × 100. "Low volatility" rules (squeeze setups) trigger when atr_pct drops below a threshold, betting that contraction precedes expansion.

⚠ The trap

"atr_pct < 1%" means completely different things on 5m vs 4h bars, and in different regimes. A threshold that fired weekly last quarter can go silent for months. Lint the actual fire-rate on your timeframe before trusting a squeeze rule.

What our engine does

The playground runs your ATR condition on 1,000 real bars and shows the exact fire count — a squeeze rule that never fires is a dead branch, not patience.

Try it yourself

Open the rule playground, build a condition with this indicator, and run it on 1,000 real bars — per-condition fire counts, entirely in your browser. Or lint it in Python with rulelint (MIT).

Research and education. Not investment advice. No indicator makes money by itself — our own arenas' honest records (losses included) are on the scoreboard.