diff --git a/CLAUDE.md b/CLAUDE.md index 712d1cc..e740152 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,11 +51,23 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis monitor forward. NB il gate concentra XS nei regimi dispersi (2025-26 = hold-out alta-dispersione). Ricerca `scripts/portfolio/{xsec_research,xsec_blend,xsec_dispgate}.py`. Diari `2026-06-19-hyperliquid-xsec` / `-xsec-blend` / `-xsec-dispgate` / `-xsec-universe-expansion` / `-trend-multiasset`. -- **PORTAFOGLIO ATTIVO = TP01 (55%) + XS01 (25%) + VRP01 (20%)** (`src/portfolio/sleeves.active_sleeves`): +- **PORTAFOGLIO ATTIVO = TP01 (41.25%) + XS01 (18.75%) + VRP01 (15%) + SKH01 (25%)** (`src/portfolio/sleeves.active_sleeves`): TP01+XS01 combinato **FULL Sharpe 1.55, HOLD-OUT 1.55, DD 4.4%**. Aggiunto **VRP01** (options short-vol, sotto): TP01+VRP01 da solo fa FULL Sh 1.30→1.44 / HOLD 0.31→0.40 a peso 20% (3-way da - validare locale con dati HL). Report `scripts/portfolio/run_portfolio.py`. Sleeve a date d'inizio - diverse → outer-join con pesi rinormalizzati (TP01 da solo 2019-20, VRP dal 2021, blend pieno dal 2024). + validare locale con dati HL). **Aggiunto SKH01-V2-DD @25% effettivo (2026-06-23, sotto):** i tre + preesistenti scalati nel restante 0.75 (rapporto 55:25:20). Il portafoglio a **4 sleeve** fa + **FULL Sharpe 1.68→2.13, HOLD-OUT 1.63→2.30, DD full 14.3%→7.8%** (Skyhook è quasi-ortogonale, + corr ~0.09). Report `scripts/portfolio/run_portfolio.py`. Sleeve a date d'inizio + diverse → outer-join con pesi rinormalizzati (TP01/SKH01 dal 2019, VRP dal 2021, XS dal 2024). +- **SKH01-V2-DD "Skyhook" — DIVERSIFICATORE quasi-ortogonale (research)** — `src/strategies/skyhook.SKH01_V2_DD`, + sleeve `src/portfolio/sleeves._skyhook_returns`. Sistema dual-TF (segnale 690m / exec 230m) regime + (BuzVola/BuzVolume tipo-Chande) AND pattern (Donchian breakout), NON trend-follower, L/S. Vincitrice + di 2 onde multi-agente (la 2ª = DD-reduction): exit a **percentuale fissa ASIMMETRICA** (long sl4%/tp10%, + short sl2%/tp8% più stretto) → standalone **maxDD BTC 21% / ETH 27% (<30%)**, minFull +0.99, minHold + +1.26, causale (0/400), fee-surviving 0.40%RT. Marginal vs TP01 **ADDS** (corr 0.09, has_insample_edge, + robust_oos multicut 7/7, is_hedge=False); blend 0.75·TP01+0.25·SKH **hold-out 0.31→1.17**. Verificato + leak-free + 2 scettici. **CAVEAT:** equity daily-step (Sharpe lens), ETH DD margine sottile, book 230m + (costi ribilanciamento da verificare a deploy) → research win, forward-monitor. Diario `2026-06-23-skyhook.md`. - **VRP01 Options Short-Vol — DIVERSIFICATORE da FinanceOld/OptionsAgent** — `src/portfolio/sleeves._vrp_combo_returns`. Put credit spread settimanale (vendi put -0.28, compra put -0.10) gated su IV-rank. Idee portate da `../FinanceOld/OptionsAgent` (Bear Call Spread + gate d'ingresso). Migliora il lead VRP nudo diff --git a/docs/diary/2026-06-23-skyhook.md b/docs/diary/2026-06-23-skyhook.md index efbc68d..4c5242c 100644 --- a/docs/diary/2026-06-23-skyhook.md +++ b/docs/diary/2026-06-23-skyhook.md @@ -119,8 +119,23 @@ causalità/fee/plateau/overfit). Esito: **il winner intermedio cade.** Nuovo cam **Promozione (questa sessione):** `SKH01_V2_DD` canonico nel motore + override exit-short asimmetrici (backward-compatible, V1/winner invariati) + 3 test nuovi (8/8 pass). -**Caveat onesti / NON ancora deployato:** ETH DD 27.4% ha margine sottile vs 30% (BTC 21.4% comodo) → -monitorare ETH. Lo sleeve di portafoglio NON è ancora cablato in `active_sleeves`: prima del deploy va -replicato il blend a peso 0.25 nel portafoglio attivo coi dati live e ri-verificata la causalità sul -**codice di esecuzione reale** (le verifiche qui sono sull'harness di ricerca). Per ora: research win, -candidato sleeve forward-monitor. + +**Sleeve cablato @0.25 effettivo** (`src/portfolio/sleeves.skyhook_sleeve` → `active_sleeves`): i tre +sleeve preesistenti scalati nel restante 0.75 mantenendo il rapporto 55:25:20 → **TP01 41.25% / XS01 +18.75% / VRP01 15% / SKH01 25%**. Report del portafoglio (4 sleeve, `run_portfolio.py`): + +| | FULL Sharpe | FULL DD | HOLD-OUT Sharpe | HOLD-OUT DD | +|---|---|---|---|---| +| 3 sleeve (TP01+XS01+VRP01) | 1.68 | 14.3% | 1.63 | 3.4% | +| **+ SKH01 @25%** | **2.13** | **7.8%** | **2.30** | 3.5% | +| Δ | **+0.45** | **−6.5pt** | **+0.67** | ~0 | + +→ aggiungere Skyhook **alza lo Sharpe full +0.45 e DIMEZZA il DD full (14.3→7.8%)**, e alza l'hold-out ++0.67 a DD invariato. Portafoglio combinato: FULL Sh 2.13 / ret +365% / DD 7.8%, HOLD Sh 2.30 / DD 3.5%, +positivo ogni anno (2019-26, DD annuo ≤7.8%) vs buy&hold 50/50 FULL Sh 0.93 / DD 76%. + +**Caveat onesti / NON deploy:** è un portafoglio di **ricerca** (peso fisso, no costi di ribilanciamento +reale a $600; lo Sharpe daily-step di Skyhook è la convenzione del lens). ETH DD standalone 27.4% ha +margine sottile vs 30%. Prima di un eventuale deploy: ri-verificare la causalità sul **codice di +esecuzione reale** (qui è l'harness di ricerca) e i costi del book a 230m (ribilanciamento più frequente +del resto). XS01/VRP01 restano STAT-MODE/lead. Per ora: research win + sleeve cablato, forward-monitor. diff --git a/src/portfolio/sleeves.py b/src/portfolio/sleeves.py index fb4537a..db018ff 100644 --- a/src/portfolio/sleeves.py +++ b/src/portfolio/sleeves.py @@ -207,12 +207,49 @@ def vrp_sleeve(weight: float = 0.20) -> Sleeve: return Sleeve("VRP01_shortvol", weight, _vrp_combo_returns) +# ----------------------------- SKH01-V2-DD: Skyhook dual-TF regime+breakout (BTC/ETH) ----------------------------- +# Sistema dual-timeframe (segnale 690m, exec 230m): entra solo quando coincidono REGIME +# (BuzVola/BuzVolume tipo-Chande) E PATTERN (Donchian breakout). NON e' un trend-follower. +# Vincitrice dell'onda DD-reduction (famiglia ASYM_LS): exit a percentuale fissa ASIMMETRICA +# (long sl4%/tp10%, short sl2%/tp8% piu' stretto) -> taglia il DD standalone (BTC 21% / ETH 27%) +# alzando hold-out (minHold +1.26) e valore di portafoglio. Quasi-ortogonale a TP01 (corr ~0.09): +# blend 0.75*TP01+0.25*SKH -> hold-out Sharpe 0.31->1.17 (+0.87), DD full 14%->9%. Marginal ADDS, +# has_insample_edge, robust_oos (multicut 7/7 anni), is_hedge=False. Verificato leak-free (causalita' +# 0/400) + 2 scettici avversariali. Diario 2026-06-23-skyhook.md. +# CAVEAT ONESTI: equity marcata a fine-trade (daily lumpy); ETH DD 27% ha margine sottile vs 30%; +# il book opera a 230m -> ribilanciamento piu' frequente del resto (verificare costi reali a deploy). +from src.strategies.skyhook import SKH01_V2_DD, build_frames, skyhook_entries +from src.backtest.harness import backtest_signals + + +def _skyhook_returns() -> pd.Series: + """SKH01-V2-DD: book 50/50 BTC+ETH del sistema regime+breakout dual-TF, riportato su griglia + GIORNALIERA. Causale (decide a close[i], exit intrabar TP/SL/max_bars, non-overlap), netto 0.10% RT.""" + series = {} + for a in ASSETS: + ltf, htf = build_frames(load_data(a, "5m")) + ent = skyhook_entries(ltf, htf, SKH01_V2_DD) + m = backtest_signals(ltf, ent, fee_rt=0.001, leverage=1.0, asset=a, tf="230m") + s = pd.Series(m.equity, index=pd.DatetimeIndex(pd.to_datetime(m.eq_index, utc=True))) + series[a] = s.resample("1D").last().ffill().pct_change().dropna() + J = pd.concat(series, axis=1, join="inner").fillna(0.0) + return pd.Series(0.5 * J["BTC"].values + 0.5 * J["ETH"].values, index=J.index) + + +def skyhook_sleeve(weight: float = 0.25) -> Sleeve: + return Sleeve("SKH01_skyhook", weight, _skyhook_returns) + + # ----------------------------- REGISTRY ----------------------------- def active_sleeves() -> list[Sleeve]: """Sleeve ATTIVI nel portafoglio (pesi rinormalizzati; sleeve a date diverse si attivano - quando parte la loro storia). Aggiungere qui SOLO strategie validate col gauntlet.""" + quando parte la loro storia). Aggiungere qui SOLO strategie validate col gauntlet. + + SKH01 cablato @0.25 effettivo: i tre sleeve preesistenti scalati nel restante 0.75 mantenendo + il loro rapporto 55:25:20 (-> 41.25/18.75/15), cosi' Skyhook pesa esattamente 25% del book.""" return [ - tp01_sleeve(weight=0.55), # trend difensivo, BTC/ETH, dal 2019 (l'unico deployable pieno) - xsec_sleeve(weight=0.25), # cross-sectional momentum Hyperliquid, dal 2024 (scorrelato, stat-mode) - vrp_sleeve(weight=0.20), # options short-vol (put credit spread + gate IV-rank), dal 2021 (lead modellato, scorrelato) + tp01_sleeve(weight=0.4125), # trend difensivo, BTC/ETH, dal 2019 (l'unico deployable pieno) + xsec_sleeve(weight=0.1875), # cross-sectional momentum Hyperliquid, dal 2024 (scorrelato, stat-mode) + vrp_sleeve(weight=0.15), # options short-vol (put credit spread + gate IV-rank), dal 2021 (lead modellato, scorrelato) + skyhook_sleeve(weight=0.25), # dual-TF regime+breakout BTC/ETH, dal 2019 (quasi-ortogonale, exit %-asimmetrici, research) ]