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>
6.0 KiB
2026-07-01 — Affinamento VRP01 (sizing IV−RV / 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:
- Sizing sul gap IV−RV (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 IV−RV>0" è già il baseline (gate_vrp=True). - Filtro DVOL-momentum: non vendere se
dvol[i]−dvol[i−k] > thr(k∈{5,10}, thr∈{0, 5pt}). (Diverso dadvol_directional2026-06-29, dove il DVOL-mom era segnale direzionale sul perp.) - Gate di regime da TP01: skip o half-size quando TP01 è flat su entrambi gli asset (risk-off).
- 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)
- L'alpha del VRP è già tutto nel gate IV-rank binario ("vendi solo vol ricca"). Il sizing proporzionale al gap IV−RV è 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 (IV−RV) NON è un segnale di intensità utile oltre il suo segno+rank.
- 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.
- 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).