← 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

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

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.