Vol-regime filter wins on mean, pays in variance
what you'll learn · Why a regime gate that wins on mean Sharpe across seeds can simultaneously be a worse choice for operators with bounded drawdown tolerance, and how to read the trade-off.
The vol-regime gate dropped the harness's top spot from three_clock_momentum (+1.429) to vol_regime_filter (+1.493) — a 4.5% mean Sharpe improvement at the cost of doubling the per-seed dispersion (0.672 → 1.383). When a gate concentrates exposure on a survivors-only universe, the mean might tick up but the worst case gets meaningfully worse.
The 17-arm comparison harness now has two arms at the top of the mean-Sharpe table:
three_clock_momentum: mean +1.429, stdev 0.672, min +0.396, max +2.079
vol_regime_filter: mean +1.493, stdev 1.383, min −0.069, max +3.307
Mean: +1.493 > +1.429. vol_regime_filter wins on Sharpe.
Min: −0.069 < +0.396. three_clock_momentum wins on worst-case.
Stdev: 1.383 vs 0.672 — the filter has more than DOUBLE the per-seed dispersion. The 4.5% mean improvement cost a 106% variance increase. That trade is real and operator-facing — it isn’t visible if you only read the headline Sharpe number.
Why the variance jumps when a gate fires
The vol-regime filter drops symbols whose vol_5 / vol_60 exceeds
1.5. On the synthetic with --fomc-drift-bps 50, FOMC days push
most symbols above threshold around the event window. After the
gate fires, the cross-sectional ranking happens on a smaller
universe — sometimes 2 or 3 names instead of 10.
A smaller universe means less diversification. Top-quantile and bottom-quantile buckets each contain fewer symbols; one mis-ranked name now drives a larger share of PnL. The strategy concentrates exposure on the survivors.
When the survivors happen to be right (good seed): big win, because position sizes inside the bucket are bigger.
When the survivors happen to be wrong (bad seed): big loss, same reason.
The min Sharpe went negative on at least one of the five seeds
(−0.069). The max hit +3.307 — the highest of any arm in the
harness, including three_clock_momentum’s max of +2.079.
Reading the two numbers together
A strategy’s mean Sharpe is the expected annualised Sharpe under the seed distribution. A strategy’s stdev is the inter-seed variability — how much your realised Sharpe will differ from the mean depending on which world you ended up in.
For an operator who has many independent bets and can average across them (large hedge fund running 50 strategies), mean dominates: realised Sharpe converges to the mean across the portfolio.
For an operator with one bet (running this strategy on one real universe over one real out-of-sample period), the stdev dominates: their realised Sharpe is one draw from a normal centered at the mean with the given stdev. A −0.069 worst-case on a +1.493 mean isn’t a hypothetical — it’s “you have a real risk of underperforming bonds for a year.”
The right metric depends on the operator’s situation:
| Operator | Pick | Why |
|---|---|---|
| Many independent strategies | vol_regime_filter |
Mean dominates |
| One strategy, can ride a year | three_clock_momentum |
Better worst-case |
| One strategy, must cut at -50bps | three_clock_momentum |
Min Sharpe is the gate |
| Tactical overlay, weekly review | vol_regime_filter |
Can pull plug on bad regime |
What this isn’t
- Not “vol_regime_filter is bad.” It’s the highest-mean arm. Bad on one dimension doesn’t make it bad overall.
- Not “always pick the higher-variance arm.” Mean isn’t always the right metric. Drawdown tolerance, regime stability, and the operator’s ability to cycle out matter.
- Not specific to vol-regime gates. This is the general shape of “gate drops symbols → universe shrinks → variance rises.” Every filter strategy has it. The spread_filter and ts_momentum arms have the same pattern in milder form.
The discipline rule
When comparing strategies, name BOTH the mean and the stdev across seeds before picking a winner. A higher mean with much higher stdev is a different bet, not an unambiguous upgrade. Operators with bounded drawdown tolerance should rank on min Sharpe (or some specified-quantile Sharpe) rather than mean.
A corollary: when a harness has 17 arms, the “top mean Sharpe” column is a misleading sort order. Report at minimum (mean, stdev, min) and let the operator pick by their constraint.