ef52ad6a79
src/portfolio/: Sleeve (serie rendimenti netti per-barra, causale/fee-aware) + StrategyPortfolio (combina N sleeve per peso su griglia giornaliera comune, metriche FULL/HOLD-OUT/per-anno + standalone per-sleeve, vs buy&hold). Registry sleeve attivi in sleeves.py: per ora SOLO TP01 (peso 100%); aggiungere = una riga (dopo validazione col gauntlet). Report (run_portfolio.py): TP01 FULL Sh 1.30 / DD 14.3% / ~€1.52/g, HOLD-OUT 0.31 / +3.5% (buy&hold -0.32 / -39%). Posizione corrente flat (difensivo). tests/test_portfolio.py (6 test). CLAUDE.md aggiornato (struttura + comando + come aggiungere uno sleeve). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 lines
1.9 KiB
Markdown
32 lines
1.9 KiB
Markdown
# 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.
|