Skip to content
Skip to content
← all research
STUDY

"Flagship Next Levers — OOS split (2026-08-20)"

2026-08-20

·
varianttune CAGRtune DDtune PFtest CAGRtest DDtest PFfull CAGRfull DD2026
base+13.91%36.6%1.44+17.71%29.0%1.44+14.34%36.6%+3.9%
c_w30+16.14%36.3%1.48+18.12%25.9%1.48+15.67%36.3%+6.4%
c_w40+13.81%37.4%1.41+14.33%32.2%1.41+14.61%37.4%+8.2%
c_w60+17.29%39.2%1.52+17.79%30.8%1.52+17.20%39.2%+17.6%
c_w70+16.20%36.2%1.47+17.17%29.5%1.47+16.15%36.2%+11.9%
b_tilt+16.75%38.0%1.42+13.95%26.1%1.42+16.06%38.0%+2.0%
a_k4+19.06%33.6%1.55+20.35%22.6%1.55+15.05%33.6%+38.9%
a_k6+18.39%34.6%1.46+18.15%26.2%1.46+13.53%34.6%+32.8%
a_k8+22.60%30.8%1.67+28.06%19.4%1.67+18.85%30.8%+30.7%

Baseline (base): test CAGR +17.71%, PF 1.44, DD 29.0%

Selection gate (tune window ONLY): tune CAGR >= base+1.5pp AND tune DD <= base+5pp AND tune PF >= base PF.

Passes gate on tune: c_w30, c_w60, c_w70, a_k4, a_k6, a_k8

  • c_w30: tune +16.14% (req +15.41%) | test +18.12% | DD tune 36.3%
  • c_w60: tune +17.29% (req +15.41%) | test +17.79% | DD tune 39.2%
  • c_w70: tune +16.20% (req +15.41%) | test +17.17% | DD tune 36.2%
  • a_k4: tune +19.06% (req +15.41%) | test +20.35% | DD tune 33.6%
  • a_k6: tune +18.39% (req +15.41%) | test +18.15% | DD tune 34.6%
  • a_k8: tune +22.60% (req +15.41%) | test +28.06% | DD tune 30.8%

#MC gauntlet (winners only, seed 20260820)

variantbaselinenull meannull maxpboot 95% CIP(loss)
a_k8+2923.8%+1081.9%+1662.3%0.000 (0/40)[2,609k, 5,469k] vs realized 3,024k0.000
a_k4+1492.7%+1027.0%+1953.7%0.050 (2/40)[1,296k, 2,840k] vs realized 1,593k0.000

a_k4 sits exactly at the p=0.050 false-discovery cliff (2 of 40 null permutations already beat it) — rejected despite passing the tune gate.

#Decision memo

  • ADOPT candidate a_k8 (top-8 cross-sectional entry overlay): passes tune gate (+22.60% vs +13.91%), test CAGR +28.06% (+10.3pp over baseline, +10.3pp over best calibration c_w60), test DD 19.4% (vs 29.0%), PF 1.67 (vs 1.44), MC 0/40 null beat it (p=0.000), P(loss)=0.000. Edge is broad-based, not single-year: 2022 +4% vs −10%, 2024 +33% vs +16%, 2025 +28% vs +39%, 2026 +31% vs +4%; 59/59 symbols still traded; 1559 vs 1576 trades (selection quality, not pick count).
  • Candidate B (b_tilt) rejected: test 13.95% < base 17.71% — the regime tilt does not survive the held-out window even though it looked good on tune.
  • Calibration C: w5=0.6 is the best single reweight (+17.79% test, full 17.20%) but does not beat a_k8 and adds no mechanism; keeping w5=0.5 with the a_k8 overlay.
  • Ledger entries added: b_tilt (regime-weight tilt — test-fails), a_k4 (p=0.050 cliff), a_k6 (+0.4pp over calibration — complexity unproven).

#Deployment — DONE (research → live, 2026-08-20)

  1. execution/flagship_signal.py blend_live() applies the a_k8 overlay after blending: per-bar rank of combined within the pool (ml_active AND combined

    = 0.05), keep the top-8, gate the rest at entry. combined itself untouched (exits/stops never gated). TOP_K=8, ENTRY_THRESHOLD=0.05.

  2. Live h5/h21 legs re-extended and the blended traded cache rebuilt.
  3. Bug found & fixed during deploy: the h21 live leg was originally anchored to the wrong base cache (h5), so the traded blend silently degenerated to ~h5. extend_scores(horizon=21) now defaults to the h21 base cache; h21 leg rebuilt; final blend re-verified byte-for-byte against the validated research build_topk(8) (59/59 symbols' ml_active identical, 0 combined diff bars). Last virtual bar: exactly 8 of 59 symbols entry-eligible.
  4. No bot restart needed: flagship_live.py imports flagship_signal inside cmd_update, so the 16:15 ET cycle loads the fixed module.

All trading described is paper (simulated). Not investment advice.

← all research