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.
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.
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 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.
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.