Famiglia NUOVA trovata in sessione (dopo aver scartato trend/breakout/seasonal/ opzioni/funding come rumore): ogni 12h long i perdenti relativi / short i vincenti su 8 asset, market-neutral. Scorrelata (~0) da pairs e fade -> diversificatore. - engine canonico scripts/strategies/XS01_cross_sectional.py (no look-ahead, plateau OOS Sharpe 2-3.9, 5/5 anni+, edge concentrato 2025, cost-sensitive ~0.35% RT). - src/live/xsec_worker.py CrossSectionalWorker: validate_xsec_worker == backtest ESATTO (4993/1427 trade). Mirror della cadenza engine (entry-to-entry = hold+1). - gate PORT06: +XS01 -> OOS Sharpe 9.66->10.07, FULL DD 3.68->3.46 (OOS DD +0.17pp, risk-contrib 2.2%). xsec_port06_gate.py. - wiring: _defs XSEC in PORT06 (19 sleeve, family XSEC), build_everything, runner kind=xsec, asset_days da supported (fix fetch alt anche per paper sleeves), paper. - 8 gambe -> niente exec reale -> gira PAPER. Regression-lock 18->19, FULL 7.20->7.34, OOS 9.66->10.07. 93 test verdi. Diario 2026-06-09-xs01-cross-sectional.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.0 KiB
2026-06-09 — XS01: reversione cross-sectional (famiglia nuova, trovata + deployata PAPER)
Origine
Dopo aver scartato (alla cieca, coi giochi) trend/breakout/seasonal/opzioni/funding come rumore o −EV, ho cercato io un meccanismo diverso dalla mean-reversion pairwise. Trovato: XS01 — reversione CROSS-SECTIONAL su 8 asset (BTC/ETH/LTC/ADA/SOL/BNB/XRP/DOGE).
Meccanismo
Ogni HOLD=12 ore: classifica gli 8 asset per rendimento su LB=48 ore, pesi w = −(ret − media_cross-section), normalizzati a gross 1 → long i perdenti relativi / short i vincenti, market-neutral. Roll non sovrapposto (entry-to-entry = hold+1 barre). Fee 0.10% RT/book. Cattura il FATTORE reversione trasversale, distinto dai pairs (pairwise).
Verifica (engine canonico scripts/strategies/XS01_cross_sectional.py)
- No look-ahead verificato (segnale invariato perturbando il futuro).
- Robusto: plateau OOS Sharpe 2–3.9 su lb 12–72 × hold 6–24.
- Scorrelato: corr −0.006 / 0.035 da PR01 ETH/BTC, −0.028 dai fade → diversificatore.
- Per-anno (entry): 2022 +34, 2023 +6, 2024 +21, 2025 +225, 2026 +85 (5/5 anni+).
- Caveat: edge concentrato sul 2025; cost-sensitive (muore ~0.35% RT/book); 8 gambe; storia dal 2022 (no 2018-2020).
Worker validato (== backtest esatto)
src/live/xsec_worker.py CrossSectionalWorker: book market-neutral che rolla ogni HOLD
barre, stessa formula pesi e cadenza dell'engine. validate_xsec_worker.py: replay
bar-per-bar == backtest ESATTO (worker 4993/1427 trade/49.8% == backtest 4993/1427/49.8%).
Bug risolto: il primo prototipo rollava 1 barra troppo tardi (cooldown extra) → rimosso,
guard a lb+1, entry-to-entry = hold+1.
Gate PORT06 — PROMOSSO (con asterisco)
| corr | FULL Sh | FULL DD | OOS Sh | OOS DD | |
|---|---|---|---|---|---|
| ATTUALE (19→ senza XS01) | — | 7.20 | 3.68 | 9.66 | 1.31 |
| +XS01 | −0.006 | 7.34 | 3.46 | 10.07 | 1.48 |
Migliora 3 metriche su 4 (OOS Sharpe +0.41, il salto più grande dal 15m; FULL DD giù). Unico neo: OOS DD +0.17pp. Risk-contrib XS01 solo 2.2% (diversificatore a bassa vol).
Deploy (v?, 2026-06-09) — PAPER
8 gambe → niente esecuzione reale (come TR01/ROT02/TSM01) → XS01 gira PAPER
(paper_sleeves), fuori dal pool, raccoglie statistica forward. Wiring: _defs.XSEC in
PORT06 (19 sleeve, family XSEC via prefix "XS"), build_everything (equity da xsec_sim),
runner kind="xsec" → CrossSectionalWorker, asset_days ora include i paper (fix: gli alt
BNB/DOGE/XRP ora vengono fetchati anche per TR01/ROT02/TSM01). Regression-lock aggiornati
(18→19 sleeve, FULL 7.20→7.34, OOS 9.66→10.07, DD 3.68→3.46). 93 test verdi.
Direzione futura: se la statistica forward conferma, costruire l'esecuzione reale a
N gambe (oggi inesistente) per portarlo nel pool. Per ora: candidato validato che gira
PAPER e si osserva. Artefatti: scripts/strategies/XS01_cross_sectional.py,
src/live/xsec_worker.py, scripts/analysis/{validate_xsec_worker,xsec_port06_gate}.py.