vol_ratio compares current volume to its rolling average. It confirms breakouts and filters dead hours — and has one classic silent-failure parameter everyone hits once.
vol_ratio(20) = volume / rolling_mean(volume, 20). A breakout on 1.5× average volume has more participants behind it than one on a dead book; that is the whole thesis.
Nothing subtle in the math — the subtlety is the period. period must be ≥ 2: with period=1 the "average" is the bar itself, the ratio is identically 1.0, and any condition like vol_ratio > 1.5 becomes permanently false without any error message.
Our engine falls back to period 20 when it sees vol_ratio period < 2, and the playground shows per-condition fire counts so this failure cannot hide.
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.