src/portfolio/sleeves.py: _vrp_combo_returns + vrp_sleeve, self-contained in src/ (pricing BS + gate causali inline, DVOL da data/raw). Settimanale->giornaliero col lump sul giorno di scadenza (preserva lo Sharpe annualizzato, peso costante). Registry: TP01 0.55 / XS01 0.25 / VRP01 0.20 (TP01 resta maggioranza; VRP e' un lead modellato, non deploy pieno). TP01+VRP01 monotono: FULL 1.30->1.44, HOLD 0.31->0.40 a peso 20%. Scorrelato a TP01 (+0.01). Test tests/test_vrp_sleeve.py (5 pass). CLAUDE.md + diario aggiornati. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.9 KiB
2026-06-20 — Analisi strategie FinanceOld + VRP v2 (defined-risk + gate IV-rank)
Contesto
Richiesta: analizzare le strategie in ../FinanceOld, provare a migliorarle, testarle su dati storici.
Quattro progetti esaminati. Verdetto di backtestabilità onesta sui dati certificati (BTC/ETH
Deribit mainnet + DVOL):
| Progetto | Strategia | Backtestabile sui dati certi? |
|---|---|---|
| FundingRateArbitrage | Spread funding cross-exchange (perp-perp, spot-hedge) | ❌ Nessun dato funding storico nel repo (solo exchange_settings.json). Edge = differenza cross-venue, non ricostruibile. |
| Polybot | Latency-arb Polymarket (BS digital-option) + sure-bet delta-neutral | ❌ dataVPS/collector.db (645MB) ha solo ~3 giorni di poly_books+funding, e la tabella ticks (prezzi perp = cuore dell'edge) è corrotta ("database disk image is malformed"). L'edge è la latenza: non riproducibile su barre OHLC comunque. |
| OptionSpalping (→Cerbero) | LLM autonomo su opzioni Deribit + perp Hyperliquid | ⚠️ È un agente LLM, non una regola meccanica. Il concetto (income short-vol su Deribit) è testabile. |
| OptionsAgent | Bear Call Spread + Long VIX hedge su IWM, con 5 gate d'ingresso | ✅ Il concetto (vendi premio rischio-definito, incassa VRP, gate su IV-rank/regime) mappa direttamente sul nostro options_vrp_lab.py. |
→ Scelta operatore: focus VRP opzioni. L'unico filone con dati veri + metodologia onesta.
Baseline (options_vrp_lab.py, ora con fee)
Vendita put NUDA settimanale delta -0.28, premio BS su DVOL reale. f = premio_reale/modellato.
f=1.0(conservativo): FULL Sh 0.78, DD 33%, worst-week -16.6%, HOLD-OUT Sh -0.25 → muore OOS.- Il rischio è la CODA: worst-week su LUNA (2022-06), crash 2021-05. Anno 2022 = -9%.
VRP v2 — 3 idee di OptionsAgent portate nel framework
Nuovo script scripts/research/options_vrp_v2.py. Tutto causale (strike/premio/gate da dati
≤ sell-date; payoff a scadenza sui prezzi certificati). Fee opzioni Deribit modellate (12.5% del
premio netto per round-trip = cap del fee reale). Capitale = strike corto (cash-secured) per
entrambe le strutture → DD/worst comparabili.
- Rischio definito (PUT CREDIT SPREAD) — vendi put -0.28, COMPRI put -0.10. Il long wing cappa la coda per costruzione: worst-week -16.6% → -7.4%, DD 33% → 21%, Sh 0.78 → 0.99.
- Gate IV-RANK > 0.30 (cond. d'ingresso di OptionsAgent) — vendi vol solo quando ricca (percentile espandente causale di DVOL). Trada il 58% delle settimane → Sh 1.35 e ribalta HOLD-OUT da -0.25 a +0.28. È l'alpha vero: il filtro di regime, non la struttura.
- Crash-skip IV-rank > 0.90 (NO-GO, come "VIX>35" di OptionsAgent) — marginale da solo.
- Gate VRP>0 (DVOL>RV30 causale) — marginale (il VRP è >0 il 78% del tempo, poco selettivo).
Risultati chiave (book 50/50 BTC+ETH, f=1.0 conservativo)
| Config | FULL Sh | DD | worst-wk | HOLD-OUT Sh | attivo |
|---|---|---|---|---|---|
| naked (baseline) | 0.78 | 33% | -16.6% | -0.25 | 100% |
| spread | 0.99 | 21% | -7.4% | -0.26 | 100% |
| spread + ivr30 | 1.35 | 14% | -7.4% | +0.28 | 58% |
| COMBO (spread+vrp+ivr30+crashskip) | 1.10 | 12% | -7.4% | +0.60 | 41% |
COMBO f=1.0 per-anno: 2021 +26%, 2022 -6%, 2023 +2%, 2024 +18%, 2025 -0%, 2026 +5% (il 2022, anno-crash che dimezzava il nudo, è quasi piatto: la coda è tagliata).
A f=1.29 (skew reale misurato in regime calmo) la COMBO fa FULL Sh 1.87 / HOLD 1.45 / DD 9%.
Contributo al portafoglio (COMBO f=1.0 vs TP01)
- Corr settimanale +0.07 (scorrelato, come il VRP nudo).
- TP01 70% + OPT 30% → Sh 1.00 (TP01 solo 0.73), DD 7%.
- TP01 50% + OPT 50% → Sh 1.19, DD 7%.
Conclusione onesta
Le idee di OptionsAgent migliorano davvero lo sleeve VRP, in modo OOS-robusto:
- la struttura defined-risk taglia la coda (worst -16.6%→-7.4%, DD -19pt) → meno dipendenza dal f di stress, che era il rischio non catturato del lead nudo;
- il gate IV-rank è l'alpha: ribalta l'HOLD-OUT da negativo a positivo vendendo solo vol ricca.
Resta un lead, non un deploy: premio MODELLATO su DVOL ATM (skew non esplicito), book a 1d, e serve la catena reale (cerbero-bite) per il f di stress in un crash. Ma è un miglioramento netto, quantificato e onesto, del miglior lead income che avevamo. Prossimo passo: rivalutare il f di stress quando cerbero-bite cattura un crash, e validare lo skew reale sul long wing (-0.10).
Script: scripts/research/options_vrp_v2.py. Baseline: scripts/research/options_vrp_lab.py.
Integrazione come sleeve (VRP01)
La COMBO è stata integrata nel portafoglio come VRP01 (src/portfolio/sleeves._vrp_combo_returns,
vrp_sleeve()). Implementazione self-contained in src/ (niente import da scripts/): pricing BS +
strike-from-delta + gate causali inline, DVOL da data/raw/dvol_*.parquet.
Settimanale → giornaliero (onesto): il rendimento settimanale è piazzato sul giorno di scadenza, 0.0 sugli altri giorni dello span. Questo PRESERVA lo Sharpe annualizzato (niente smoothing che gonfierebbe il daily Sharpe) e tiene lo sleeve presente ogni giorno → peso costante nell'outer-join del portafoglio. Verificato: lo sleeve daily replica i numeri settimanali (FULL Sh 1.09, HOLD 0.60, DD 12%), corr daily vs TP01 = +0.01.
Pesi (per evidenza, engine reale): TP01+VRP01 monotòno fino al 40% VRP (FULL 1.30→1.55,
HOLD 0.31→0.52, DD fermo 14%). Essendo VRP un lead MODELLATO (non deploy pieno), non lo sovrappeso:
registry = TP01 0.55 / XS01 0.25 / VRP01 0.20 (TP01 resta maggioranza, l'unico deployable pieno).
La validazione 3-way completa richiede i dati Hyperliquid (XS01, gitignored, token Cerbero) → gira
locale con scripts/portfolio/run_portfolio.py.
Test: tests/test_vrp_sleeve.py (5 pass: monotonìa BS, ordering strike, determinismo+griglia
giornaliera, gate riducono l'attività, coda tagliata <-15%).