feat(regime): vol_ref bootstrap window + ISV-driven permanent floor
Two coupled fixes to the vol-EMA regime detector exposed by walk-forward CV after all features were promoted to always-on: (1) Bootstrap window for vol_ref (slot 551 = REGIME_VOL_REF_SAMPLES) - Replace the Pearl-A "first observation replaces directly" bootstrap with a running mean over the first N=100 vol_ema observations, then switch to β-tracking. For IID observations the running-mean estimator has variance σ²/N — a 100-sample mean is 10× less noisy than the single-shot replace. (2) Permanent floor on vol_ref (slot 552 = REGIME_VOL_REF_FLOOR) - The bootstrap alone exposed the asymmetric deadband-deadlock: if vol_ref converged to a tiny value during a calm initial stretch, vol_ref / vol_ema fired the moment any realistic vol resumed and Kelly stayed trapped at regime_scale_floor=0.25 forever. Floor lives in ISV slot (TrainingPersist) with a hardcoded 1e-12 sub-floor inside the kernel as numerical-underflow guard. - Host seeds slot 552 with 1e-9. Future controller kernel will refine this from observed cell-level vol minima with cross-fold persistence. Walk-forward CV on Q1 fxcache (3 folds, window=700K, train_frac=0.6): cost fold-A fold-B fold-C mean ± SD 0.00 -19.77 +65.04 (100%) +6.45 +17.24 ± 43.42 Fold B turnaround is the headline: -47.64 (bootstrap-only) → +65.04 (bootstrap + floor) confirms the floor is the load-bearing fix. Cross-fold std-dev compressed 24% at cost=0; mean dropped from +38.94 (pre-defense) to +17.24 (with defense). Classic mean/variance trade. Block extended to 14 slots (539..=552). Kernel sig: vol_ref_floor moved from f32 scalar to vol_ref_floor_index i32, so the anchor is named/addressable in ISV. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -913,3 +913,54 @@ CV across Q1↔Q2 boundary with all four configurations:
|
||||
- T10 + both
|
||||
Expected: combined config compresses cross-fold std-dev meaningfully
|
||||
without sacrificing best-fold Sharpe.
|
||||
|
||||
## 2026-05-16 — Regime vol_ref bootstrap window + permanent floor
|
||||
|
||||
Walk-forward CV on Q1 fxcache after promoting --regime-scale to
|
||||
always-on exposed two failure modes of the original Pearl-A single-shot
|
||||
bootstrap of vol_ref:
|
||||
|
||||
1. The very first vol_obs observation is itself high-variance, so
|
||||
vol_ref started off noisy and short-training-window folds saw
|
||||
vol_ema diverge from a noisy vol_ref → spurious early Kelly
|
||||
attenuation.
|
||||
2. If vol_ref decayed to ≈0 during a deadband stretch, the ratio
|
||||
vol_ref / vol_ema fired the moment any realistic vol resumed
|
||||
and Kelly stayed trapped at the regime_scale_floor=0.25.
|
||||
|
||||
**Slot 551 — REGIME_VOL_REF_SAMPLES_INDEX (counter)**
|
||||
- Producer: `alpha_regime_vol_update.cu`. Increments by 1 each kernel
|
||||
call.
|
||||
- Gates the vol_ref update path. While count < 100, vol_ref is the
|
||||
running mean over observed vol_ema values:
|
||||
`vol_ref ← vol_ref + (vol_ema − vol_ref) / (count + 1)`
|
||||
After 100 samples, switch to slow β-tracking with β=0.005.
|
||||
- Cuts bootstrap-window variance by √N (~10× for N=100) relative to
|
||||
single-shot Pearl-A replace.
|
||||
|
||||
**Slot 552 — REGIME_VOL_REF_FLOOR_INDEX (TrainingPersist anchor)**
|
||||
- Permanent floor on vol_ref. Two-layered design per
|
||||
`pearl_kelly_cap_signal_driven_floors`:
|
||||
- ISV slot is the learned anchor — named, addressable, observable.
|
||||
- Hardcoded sub-floor of 1e-12 inside the kernel guards against
|
||||
the slot itself collapsing to zero.
|
||||
- Sentinel value 0 → kernel uses the hardcoded sub-floor only.
|
||||
- Host seeds with 1e-9 at training start (one order of magnitude
|
||||
below ES MBP-10 typical squared-log-return ~1e-10..1e-6). A future
|
||||
controller kernel will refine this from observed cell-level vol
|
||||
minima with cross-fold persistence.
|
||||
- TrainingPersist semantics: NOT cleared by fold reset.
|
||||
|
||||
**Kernel signature change:** `alpha_regime_vol_update_kernel` gained
|
||||
two int slot-index args (`vol_ref_samples_index`, `vol_ref_floor_index`)
|
||||
and one int hyperparam (`bootstrap_samples`). The previous f32
|
||||
`vol_ref_floor` scalar arg was dropped — the anchor now lives in ISV.
|
||||
|
||||
**Walk-forward CV verdict (Q1 fxcache, 3 folds, window=700K, train_frac=0.6):**
|
||||
- cost=0.0000 mean Sharpe_ann = +17.24 ± 43.42 (was +38.94 ± 56.88)
|
||||
- cost=0.0625 mean Sharpe_ann = +8.39 ± 47.47
|
||||
- cost=0.1250 mean Sharpe_ann = -2.18 ± 50.77
|
||||
- Fold B turnaround: -47.64 (bootstrap-only) → +65.04 (bootstrap + floor).
|
||||
- Cross-fold std-dev compressed 24% at cost=0; mean dropped from
|
||||
+38.94 (pre-defense) to +17.24 (with defense). Classic mean/variance
|
||||
trade — variance compression at meaningful mean cost.
|
||||
|
||||
Reference in New Issue
Block a user