Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.7 KiB
2026-06-10 — XS01 dispersion-gate: PROMOSSO e LIVE (entry solo con dispersione da fare rientrare)
Domanda
L'edge di XS01 (reversione cross-sectional 8 asset) era concentrato (2025 domina, 2023 quasi piatto) e cost-sensitive. La reversione cross-sezionale va accesa solo quando c'e' dispersione da far rientrare?
Metodo (anti multiple-testing): scripts/analysis/xs01_dispersion_gate.py
3 feature di regime CAUSALI calcolate dallo stesso panel closes (nessun feed
esterno): g_disp = std cross-section del momentum lb (la grandezza che si fada),
g_corr = correlazione media pairwise 72h (identita' della varianza dell'indice),
g_vol = vol BTC 168h. Diagnostica per quintili (quintili dal TRAIN, 70/30) sul
net per-trade dell'engine canonico NON gateato, TRAIN e OOS separati: si procede
solo con relazione monotona e concorde nelle due finestre.
Esito diagnostica
- g_disp: monotona e concorde — Q1 NEGATIVO (−10 bps TRAIN / −8 OOS) → Q5 +26/+280. Senza dispersione i trade sono solo fee. PROMOSSA.
- g_corr e g_vol: non monotone / segno incoerente → BOCCIATE (niente fishing).
Gate (sweep soglie = percentili TRAIN, side dal TRAIN)
Plateau pieno p30-p70, niente picco: TRAIN Sh 1.51 → 2.0-2.3, OOS Sh 5.73 → 6.2-7.5. Scelta p50 (disp_min = 0.0313), ~47% delle ore aperte:
- Standalone: trade 1427→859 (−40% turnover → meta' fee), win 50→53%, Sharpe 2.50→3.46, DD 16.2→15.8%. Ogni anno migliora: 2022 +34→+40, 2023 +6→+28, 2024 +21→+44, 2025 +225→+237, 2026 +85→+108 — risolve la concentrazione, il punto debole della validazione originale.
- Fee stress 2x (0.20% RT/book): OOS Sh 6.76 — la cost-sensitivity e' mitigata (il gate taglia proprio i trade che pagavano fee senza edge).
- Gate PORT06 (swap equity sleeve): FULL Sh 7.34→7.41 DD pari, OOS Sh 10.07→10.37 DD 1.48→1.47 → PROMOSSO (criterio standard).
Implementazione (solo path LIVE, come trend/hurst sulle fade)
src/live/xsec_worker.py: param opzionaledisp_min(None = off), check in_open_booksunanstd(logC[i] − logC[i−lb]). Default off → la validazionevalidate_xsec_worker(replay == backtest) resta esatta.src/portfolio/runner.py: pass-through didisp_min(il runner costruiva il dict params esplicitamente e l'avrebbe perso).scripts/portfolios/_defs.py:disp_min: 0.0313nella spec XS01.- Il backtest canonico (
build_everything) resta NON filtrato → il live fara' meglio del backtest, coerente con le altre guardie.
Unit check: gate blocca panel piatto / apre panel disperso / default off invariato. 99/99 test. Nota macro della giornata: FC01 funding-carry SCARTATA (diario separato) — il protocollo promuove ~1 idea su molte, come deve.