# 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.
