Skip to main content
2026-05-22 · 4 min read · ← 2 · research · vol · negative-result

Three vol-intervention experiments, zero wins on this synthetic

what you'll learn · Why three different per-symbol vol-intervention shapes (filter/transition-filter/penalty) all underperform baseline on this synthetic, and what the cluster of negative results tells us about where the next experiment should go.

Across three different shapes — level filter, transition filter, score-stage continuous penalty — no per-symbol vol intervention beats baseline cross-sectional momentum on the harness. The score-stage penalty was the best of the three on clustered-vol data, but still below baseline. The meta-finding: cross-sectional momentum is robust enough that per-symbol vol interventions consistently cost Sharpe regardless of shape.

This session shipped three per-symbol vol-intervention variants:

  1. vol_regime_filter (PR #655) — binary filter, gate on vol LEVEL (vol_5/vol_60 > 1.5).
  2. vol_transition_filter (PR #719) — binary filter, gate on vol CHANGE (|vol_5_now/vol_5_prev - 1| > 0.5).
  3. vol_penalty (PR #725) — score-stage continuous penalty (score - 0.5 × vol_5/vol_60).

The harness measured all three against baseline cross-sectional momentum, on both i.i.d. and clustered-vol synthetic modes:

Mode:                  I.I.D.       Clustered (cluster=0.8)
baseline:              +0.961       +1.348
vol_regime_filter:     +0.791       +0.526
vol_transition_filter: +0.540       +0.329
vol_penalty:           +0.591       +0.634

The pattern: zero wins

None of the three vol interventions beat baseline. The variant ordering changes between modes (level wins among the three on i.i.d.; penalty wins on clustered), but the cross-shape claim (“vol-aware intervention beats vol-blind baseline”) is rejected on every shape and every mode.

This is three independent shapes, two synthetic modes, six measurement points — and baseline wins every comparison. The disconfirmed-fix discipline (one shape failed → maybe wrong shape) doesn’t apply when ALL shapes fail in the same direction.

What does work, partially

The variant ordering still tells us something:

  • vol_penalty has the lowest stdev of the four on i.i.d. (0.594 vs baseline 1.021). Score-stage intervention preserves ranking structure → less per-seed dispersion. That’s interpretation B from the disconfirmed-fix note — score-stage > binary filter on stability.

  • vol_penalty beats both filter variants on clustered-vol data. Confirms that filter shapes specifically fail when vol has persistent state — the penalty’s continuous treatment is less sensitive to the level/change distinction.

  • vol_regime_filter beats the transition variant on i.i.d. Confirms the original level-gate design works when vol is mean-reverting; the transition variant adds noise without catching extra signal.

These are useful gradient-tracking observations, but they’re gradient on a function whose maximum is below baseline.

The meta-finding

On this synthetic, per-symbol vol intervention is the wrong operation. The cross-sectional ranking already averages across the universe → the universe-wide vol shape doesn’t help. Adding a per-symbol penalty (or filter) on top of the ranking creates bucket-boundary noise that costs Sharpe more than the noise reduction recovers.

Three reasons this might be specific to the synthetic:

  1. No regime-specific alpha: the synthetic adds vol clustering but doesn’t make the clustering predictive of returns. Real markets often have vol-regime alpha (e.g., low-vol period → trend persists; high-vol period → mean-reversion). Our synthetic has neither.

  2. No risk premium asymmetry: real markets have lower returns per unit of vol in high-vol regimes (vol risk premium). The synthetic’s per-symbol shocks are unsigned — no bias.

  3. No correlation structure: real-market vol clustering often coincides with cross-symbol correlation regime change. Per-symbol intervention misses the cross-symbol signal.

What to do next

The three interventions exhausted the per-symbol-vol space. The next experiment should leave that space:

  1. Cross-symbol vol gate. Compute universe-wide vol (median vol_5/vol_60 across symbols); size down the WHOLE portfolio when it’s elevated. This is the “portfolio-level gate” follow-up named in PR #723’s disconfirmed-fix note.

  2. Vol-conditional rebalancing frequency. Don’t try to gate on vol; just stop rebalancing during high-vol windows. The intervention is on the CADENCE, not the universe.

  3. Real data. The simplest hypothesis is that the synthetic doesn’t have the alpha that vol intervention captures. Real US equities have documented vol-regime alpha; the same experiment on real data might tell a different story.

What this rules out

  • Not “vol-aware strategies don’t work.” They demonstrably work on real-market data in the published literature (Moreira & Muir 2017, Harvey 2018, etc.). The negative result is synthetic-specific.

  • Not “the strategies are wrong.” The implementations are correct (unit tests pass, contract tests pass, behaviour matches the spec). The strategies do exactly what they say — they just don’t add value to baseline on this synthetic.

  • Not “interpretation B was wrong.” Interpretation B predicted score-stage > binary filter on stability. That’s confirmed (vol_penalty has lower stdev). Interpretation B ALSO predicted score-stage > baseline on mean. That’s not confirmed.

The discipline rule

When N independent shapes of the same intervention all fail in the same direction, the intervention itself is the wrong operation for the data — not the shape. Move to a different intervention point (cross-symbol, cadence, score-feature) rather than refining the failed shape.

A corollary: the harness’s measurement discipline is what made this rule visible. Without three independent shapes + multi-seed

  • dual-mode + side-by-side reporting, “vol intervention doesn’t work here” would be one unconfirmed claim. With it, it’s a documented pattern with concrete numbers.
deskgdfindgfstrategiesgsfeaturesgepromotionsgpapigabotgbwritinggw

Shortcuts are no-ops while typing in an input or textarea.