Files
PythagorasGoal/docs/diary/2026-06-20-financeold-analysis-vrp-v2.md
T
Adriano c6236ed5d9 feat: integra VRP01 come sleeve del portafoglio (put credit spread + gate IV-rank)
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>
2026-06-20 11:24:40 +02:00

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.

  1. 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.
  2. 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.
  3. Crash-skip IV-rank > 0.90 (NO-GO, come "VIX>35" di OptionsAgent) — marginale da solo.
  4. 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%).