# 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 opzionale `disp_min` (None = off), check in `_open_book` su `nanstd(logC[i] − logC[i−lb])`. Default off → la validazione `validate_xsec_worker` (replay == backtest) resta esatta. - `src/portfolio/runner.py`: pass-through di `disp_min` (il runner costruiva il dict params esplicitamente e l'avrebbe perso). - `scripts/portfolios/_defs.py`: `disp_min: 0.0313` nella 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.