Files
PythagorasGoal/docs/diary/2026-07-01-vrp-refinement.md
T
Adriano Dal Pastro 491411ac77 research(wave-0701): 6 filoni multi-agente — 0 nuovi sleeve, pesi confermati, gate weights_tilt_null
Ondata onesta su angoli non coperti: funding-TS (chiude il filone funding su 3
lati), breadth alt (non-ridondante ma DSR 0.43, rivisitabile con storia),
XS-residmom (REDUNDANT), pesi+guardia-DD (EW-STR refutato dallo scettico come
selezione-sull'hold-out di 2° ordine, firma best-of-15), VRP-refine (filone
esaurito), stagionalità-XS (morta allo step statistico).

Lezione codificata: weights_tilt_null + combine_outer in src/portfolio
(ogni cambio-pesi vs null di tilt casuali cap-respecting + delta in-sample>=0);
5 test nuovi, suite 165/165.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 23:21:59 +00:00

6.0 KiB
Raw Blame History

2026-07-01 — Affinamento VRP01 (sizing IVRV / filtro DVOL-momentum / gate TP01): NON MIGLIORA

Script: scripts/research/r0701_vrp_refine.py (solo ricerca: src/ e scripts/live/ non toccati). Esito: NON MIGLIORA — VRP01 baseline resta la config canonica. La cella IS-best (gate TP01-skip) è un falso positivo in-sample da manuale: IS Sharpe 2.07 ma multi-cut 0/5, hold-out 0.14 (vs 0.59 del baseline), DSR 0.71. Nessuna modifica a sleeves._vrp_combo_returns.

Cosa testava (celle NUOVE, verificate non ripetute nei diari)

Stessa pipeline di options_vrp_v2.py (pricing BS su DVOL reale, payoff sul path certificato, fee 12.5% del premio, f=1.0, tenor 7d, spread 0.28/0.10) — cambiati SOLO gate/sizing:

  1. Sizing sul gap IVRV (carry atteso): size lineare clip(vrp/scale,0,1) (scale 8/12 pt) o percentile espandente causale del VRP; in aggiunta o in sostituzione del gate binario IV-rank. NB: il gate composito "IV-rank>0.30 AND IVRV>0" è già il baseline (gate_vrp=True).
  2. Filtro DVOL-momentum: non vendere se dvol[i]dvol[ik] > thr (k∈{5,10}, thr∈{0, 5pt}). (Diverso da dvol_directional 2026-06-29, dove il DVOL-mom era segnale direzionale sul perp.)
  3. Gate di regime da TP01: skip o half-size quando TP01 è flat su entrambi gli asset (risk-off).
  4. Croce completa: 105 celle, tutte contate nel deflated-Sharpe.

NON ripetuto (già scartato): gestione attiva intra-trade (PT/SL/vol-stop/delta-exit, 2026-06-20-vrp-active-management.md → hold-to-expiry vince).

Metodo: selezione cella in-sample (pre-2025) con floor di attività IS ≥20%, hold-out 2025-26, multi-cut 5 tagli (2023-01→2025-01, richiesti ≥4/5 uplift>0), altlib.deflated_sharpe su tutti i 105 trial, effetto sul portafoglio 4-sleeve (TP01 41.25 / XS01 18.75 / VRP 15 / SKH01 25).

Risultati (book 50/50 BTC+ETH, rendimenti settimanali)

Baseline riprodotto esattamente: FULL Sh 1.09 / IS 1.26 / HOLD 0.59 / DD 12% / worst 7.4% / attivo 41%.

cella IS Sh FULL HOLD DD worst attivo
BASELINE bin+ivr30 1.26 1.09 0.59 12% 7.4% 41%
sizing lin 8pt (+ivr30) 1.20 1.05 0.61 11% 7.4% 41%
sizing lin 12pt (+ivr30) 1.12 0.98 0.54 11% 7.4% 41%
sizing rank (+ivr30) 1.07 0.94 0.54 9% 5.7% 41%
sizing lin 8pt al posto di ivr 0.89 0.58 0.38 21% 7.4% 86%
sizing rank al posto di ivr 1.03 0.69 0.36 11% 5.7% 86%
mom k=5 thr=5pt 1.24 1.02 0.37 9% 6.5% 34%
mom k=10 thr=5pt 1.26 1.08 0.55 9% 6.5% 31%
mom k=5 thr=0 1.78 1.24 0.10 5% 3.9% 20%
mom k=10 thr=0 1.36 0.78 0.47 7% 3.9% 18%
tp01-skip 2.05 1.43 0.14 7% 4.7% 27%
tp01-half 1.72 1.34 0.27 7% 4.7% 41%
IS-best: lin8+tp01-skip 2.07 1.43 0.14 6% 4.2% 27%

Multi-cut della IS-best vs baseline: uplift negativo in 5/5 tagli (0.35 → 0.73, monotono peggiorando verso il presente). DSR IS-best 0.709 (<0.95); baseline 0.472 dentro questa griglia (contesto onesto: nemmeno il baseline è statisticamente distinguibile su 105 trial correlati — ma è pre-committed, non selezionato qui). Celle che battono l'hold-out del baseline: 1/105 (lin8pt tp-off, +0.02 — rumore; non selezionabile: sarebbe selection-on-holdout).

Frequenza d'intervento dei gate (settimane-trade del baseline = 163)

  • TP01-skip: blocca il 32.5% delle settimane tradabili (TP01 flat il 38% dei giorni della finestra DVOL). NON è ridondante col baseline — lavora tanto — ma lavora male OOS.
  • mom thr=5pt: blocca 24-32%; mom thr=0: blocca 60-64% (quasi metà del book).

Portafoglio 4-sleeve (VRP @15%)

VRP nello slot FULL Sh FULL DD HOLD Sh HOLD DD
baseline 2.12 7.8% 2.21 3.5%
IS-best (lin8+tp01-skip) 2.11 7.8% 2.12 3.5%

Anche a livello portafoglio la variante peggiora l'hold-out (2.21→2.12) e non migliora nulla.

Lettura (perché non migliora)

  1. L'alpha del VRP è già tutto nel gate IV-rank binario ("vendi solo vol ricca"). Il sizing proporzionale al gap IVRV è ridondante dato il gate (Δ ≈ ±0.05, dentro il rumore); usato al posto del gate, riporta dentro le settimane di vol povera e distrugge l'hold-out (0.36/0.38). Il carry atteso (IVRV) NON è un segnale di intensità utile oltre il suo segno+rank.
  2. Il gate TP01 è la trappola in-sample perfetta (la lezione macro-gate al contrario): schiva il 2022 (6%→0%) gonfiando l'IS a 2.05, ma nel 2025-26 TP01 è flat proprio nei regimi di vol ricca in cui la vendita gated di put guadagna — il gate taglia le settimane migliori dell'hold-out (0.59→−0.14). Short-vol gated e trend sono complementari, non condizionabili l'uno sull'altro.
  3. Il DVOL-momentum non aggiunge protezione: il crash-skip IV-rank>0.90 + il long wing dello spread coprono già il run-up di vol; thr=0 è troppo aggressivo (blocca ~60%), thr=5pt è neutro (mai meglio del baseline su hold-out).

Onestà / caveat (invariati)

Premio MODELLATO su DVOL ATM (no skew), book 1d, f di stress reale non catturato → tutto questo resta dentro il modello; il verdetto massimo possibile era "sleeve modellato migliorato", e non è stato raggiunto. Il DSR sulla griglia è un limite superiore (celle correlate + ~20 config storiche di options_vrp_lab/_v2 non contate).

Azione

Nessuna. VRP01 resta com'è (bin + gate_vrp + ivr30 + crash-skip 0.90, hold-to-expiry). Terzo tentativo di affinamento fallito (dopo active-management e — per il portafoglio — DVOL overlay): il filone "migliorare VRP01 dentro il modello" è da considerarsi esaurito; il prossimo passo utile resta quello noto: f di stress reale quando cerbero-bite cattura un crash + skew reale sul long wing.

Script: scripts/research/r0701_vrp_refine.py (--skip-portfolio per la sola griglia).