Files
PythagorasGoal/docs/diary/2026-06-19-strategy-portfolio.md
Adriano Dal Pastro ef52ad6a79 feat(portfolio): contenitore di strategie ESTENSIBILE — TP01 primo sleeve
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>
2026-06-19 19:17:18 +00:00

1.9 KiB
Raw Permalink Blame History

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.