Vol ratio as cross-symbol regime gate
what you'll learn · Why the vol_5/vol_60 ratio is more useful than vol_5 or vol_60 alone for cross-sectional regime classification, and how to use it as a gate.
Realised vol is a level. Vol-of-vol is its second derivative. The vol_5/vol_60 ratio is neither — it's a dimensionless regime classifier that works the same across a 1%-daily ETF and a 5%-daily small-cap. Why scale-invariance matters when classifying regime across heterogeneous universes.
The feature library now has three vol features at different
horizons (vol_5, vol_20, vol_60) plus a second-order vol
(realized_vol_of_vol_20). They all measure level — a number
attached to a symbol that says how big the recent moves are.
vol_ratio_5_60 is different. It’s the ratio:
vol_5(t) / vol_60(t)
A pure ratio between two estimates of the same symbol’s vol at two horizons. The number isn’t a level; it’s a regime classifier:
ratio > 1: short-term vol exceeds long-term — acceleratingratio ≈ 1: stable regime — vol is what it has beenratio < 1: short-term vol is below long-term — decelerating
The cross-symbol property
The interesting thing about a ratio is what cancels.
vol_60 for a low-vol bond ETF might be 0.005 (50 bps daily). For
a high-vol small-cap it might be 0.05 (5%). The bond and the
small-cap aren’t comparable on the level axis — operators
sensible thresholds wildly differ per universe.
On the ratio axis they ARE comparable:
- Bond ETF in stable regime: ratio ≈ 1.0.
- Bond ETF during a Treasury auction spike: ratio = 1.8.
- Small-cap in stable regime: ratio ≈ 1.0.
- Small-cap during earnings: ratio = 1.8.
A 1.8 ratio means the same thing on both: the short-term vol is
80% above the structural baseline. The cross-symbol regime gate
is the same threshold (say 1.5) for both. Cross-sectional
ranking and gating on vol_ratio_5_60 produce dollar-neutral,
volatility-bucket-agnostic comparisons across a heterogeneous
universe.
Three concrete use cases
1. Size gate
position_size = base_size * min(1.0, 1.0 / max(1.0, vol_ratio_5_60))
Halves position size when ratio = 2.0; goes flat at very high values. Same threshold works for bonds, equities, and crypto.
2. Cross-sectional regime sort
Rank universe by vol_ratio_5_60. The top quintile is the
“regime accelerating” bucket — typical names in this bucket
right now include earnings-week names, news-driven names, and
sector-rotation outliers. Strategies that target regime change
(volatility breakout, mean reversion on first-day spikes) can
restrict their universe to this bucket.
3. Strategy compositor
vol_ratio_5_60 ≤ 1 → run a momentum strategy (regime stable,
trend should persist).
vol_ratio_5_60 > 1.3 → switch to mean-reversion (regime
transitioning, recent moves are likely overreactions).
vol_ratio_5_60 > 2 → flat (no strategy works in transitioning
regimes without symbol-specific calibration).
The thresholds are operator-tunable but the structure (ratio gates compositor) works without per-symbol calibration.
What it doesn’t do
-
Not a level estimator. Two symbols with the same
vol_ratio_5_60can have wildly different dollar-vol levels; one might be a sleepy bond and the other a meme stock that just doubled. Usevol_20to set the dollar-risk budget; usevol_ratio_5_60to classify the regime. -
Not a direction signal. Vol acceleration says regime change, not regime direction. Acceleration happens in both crash and rally scenarios — the ratio doesn’t distinguish. Compose with momentum features to get direction.
-
Not free of look-ahead. Lag 61 (matches
vol_60). Plan the warmup window.
Why not just take a log or a difference?
log(vol_5 / vol_60) is cleaner mathematically (symmetric
around 0, addable across symbols). The current implementation
returns the raw ratio because:
- Interpretation: “ratio = 1.5” is more readable than “log ratio = +0.405”.
- Threshold semantics: gate-at-1.5 reads more directly than gate-at-log(1.5).
- Composition: when feeding into a multiplicative size gate (use case #1 above), the raw ratio is the natural unit.
The log form would be a useful follow-up if operators wanted to build a Z-score of the log-ratio across a universe (the symmetric form behaves better in averages). Out of scope for now.
The discipline rule
Use level features (
vol_20,momentum_20) for level decisions. Use ratio features (vol_ratio_5_60) for cross- symbol regime gates. Level features need per-symbol or per-universe calibration; ratio features work the same across the panel.
A corollary: when proposing a new feature, ask “does this need universe-specific tuning to be useful, or does it work the same across symbols?” Ratio features get a free pass on that question. Level features need an answer.