# 2026-06-19 — Portafoglio di strategie estensibile (TP01 primo sleeve) Creato un contenitore di portafoglio (`src/portfolio/`) con TP01 come unico sleeve attivo per ora, progettato per aggiungerne altri (ognuno validato col gauntlet onesto). ## Design - **Sleeve** = una strategia validata che produce una serie di rendimenti netti per-barra (datetime-indexed, CAUSALE, netto fee). Opzionale `pos_fn` per le posizioni correnti (live). - **StrategyPortfolio**: porta ogni sleeve su griglia GIORNALIERA comune (compounding intra-giorno → mixa TF diversi in modo coerente), combina per PESO rinormalizzato sui giorni comuni (= equal-capital-by-weight ribilanciato di continuo). Metriche FULL + HOLD-OUT 2025-26 (bloccato) + per-anno + standalone per-sleeve, vs benchmark buy&hold 50/50. - **Estensibilità**: aggiungere uno sleeve = una riga in `src/portfolio/sleeves.active_sleeves` (dopo validazione: research_lab + hold-out + cross-asset + causality guard). Niente sleeve non validati. ## Stato attuale (1 sleeve = TP01, peso 100%) `scripts/portfolio/run_portfolio.py`: - **FULL** Sharpe 1.30 / ret +201% / DD 14.3% / ~€1.52/g su 2k (n=2655 giorni 2019-2026) - **HOLD-OUT 2025-26** Sharpe 0.31 / +3.5% / DD 7.5% (buy&hold 50/50: Sharpe −0.32 / −39% / DD 59%) - Per-anno positivo quasi ovunque (2022 −2.1%, 2026-YTD −0.7%) - Posizione corrente: **flat** (TP01 in cash nel regime attuale = difensivo) ## File - `src/portfolio/{__init__,portfolio,sleeves}.py`, `scripts/portfolio/run_portfolio.py`, `tests/test_portfolio.py` (6 test, passano). CLAUDE.md aggiornato. ## Prossimo Il portafoglio è pronto per ospitare nuovi sleeve. Candidati naturali (da validare prima): un secondo edge scorrelato a TP01 (TP01 è trend long-flat → serve qualcosa di diverso, es. una strategia che lavori quando TP01 è flat). Finché non c'è un secondo edge che regge il gauntlet, il portafoglio = TP01 difensivo. Quando arriverà, basta una riga in sleeves.py.