Files
PythagorasGoal/docs/diary/2026-07-01-portfolio-weights-ddguard.md
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

13 KiB
Raw Permalink Blame History

2026-07-01 — Pesi statici ri-ottimizzati + guardia-DD sul portafoglio a 4 sleeve

Mandato

Migliorare il portafoglio ATTIVO (TP01 41.25 / XS01 18.75 / VRP01 15 / SKH01 25) SENZA nuove strategie: (A) ri-ottimizzazione onesta dei pesi statici, (B) guardia-drawdown a livello portafoglio (replica del soft-guard vincente del tail-hedge lab 2026-06-23), (C) combinazione. NON meta-allocazione dinamica (già scartata, thread 3 del 2026-06-29). Script: scripts/research/r0701_portfolio_opt.py. Solo ricerca: nessun file di src/ o live toccato, i pesi sono PROPOSTI, non applicati.

Baseline riprodotta

run_portfolio.py oggi: FULL Sh 2.12 / HOLD 2.21 / DD full 7.8% / CAGR 23.3% (vs 2.13/2.30 del diario Skyhook: i dati sono avanzati di una settimana, coerente). Matrice sleeve outer-join 2019-03-14 → 2026-07-01 (TP01/SKH01 dal 2019, VRP01 dal 2021-05, XS01 dal 2024-01), combine identico a portfolio.combined_daily (pesi rinormalizzati per-riga sugli sleeve attivi).

(A) Pesi statici — metodo

  • Ottimizzazione SOLO in-sample (pre-cut), valutazione OOS (post-cut), multi-cut {2024-01, 2024-07, 2025-01}. Sleeve con <120 giorni in-sample al cut (XS01 al 2024-01) PINNED al peso corrente (l'ottimizzatore non ha dati per giudicarli).
  • Criteri: MAXSH (max-Sharpe del combo simulato), RP (inverse-vol), ERC, MINVAR-R (min-var con vincolo ritorno ≥ pesi correnti). Null: EW (25×4) e CURRENT. Vincoli 5%≤w≤60%, Σ=1.
  • Cap STRUTTURALI dichiarati (prudenza, non statistica): VRP01 ≤ 15% (sleeve MODELLATO su DVOL ATM, stress-f non catturato — "niente short-vol da modello in deploy"), XS01 ≤ 25% (STAT-MODE, storia ~2.5 anni). Varianti sotto cap: MAXSH-STR (ottimizzato) e EW-STR (EW proiettato sui cap, parameter-free → TP 30 / XS 25 / VRP 15 / SKH 30).

Risultati (pesi ottimizzati pre-2025, valutati FULL e HOLD-OUT 2025-26)

criterio pesi TP/XS/VRP/SKH FULL Sh FULL DD FULL CAGR HOLD Sh HOLD DD HOLD CAGR multi-cut ΔSh OOS anni vinti
CURRENT 41.2/18.8/15/25 2.12 7.8% +23.3% 2.21 3.5% +16.0%
MAXSH 27.6/17.5/39.5/15.4 2.17 6.3% +21.8% 2.27 2.8% +12.7% +0.24/+0.08/+0.06 1/8
RP-invvol 26.7/15.5/41.6/16.3 2.17 6.4% +21.8% 2.25 2.8% +12.4% +0.28/+0.07/+0.04
ERC 26.6/16.2/41.6/15.7 2.17 6.3% +21.7% 2.25 2.8% +12.4% +0.29/+0.07/+0.05
MINVAR-R 26.7/23.3/29.6/20.4 2.18 6.4% +23.3% 2.37 2.6% +16.1% +0.20/+0.10/+0.16 4/8
MAXSH-STR 38.6/25/15/21.4 2.14 7.5% +23.4% 2.28 3.3% +16.8% 0.00/+0.03/+0.07 3/8
EW 25/25/25/25 2.14 7.0% +24.5% 2.39 2.8% +18.1% +0.16/+0.17/+0.18 6/8
EW-STR 30/25/15/30 2.10 8.5% +25.2% 2.35 3.2% +19.7% +0.06/+0.13/+0.14 7/8

Lettura onesta

  1. Gli OTTIMIZZATORI non aggiungono nulla — anzi overfittano. Tutti (MAXSH/RP/ERC/MINVAR-R) convergono sulla stessa mossa: scaricare TP01 e caricare VRP01 al 30-42% perché ha la vol più bassa (7.7%/anno). Ma quella è la vol del MODELLO (premio BS su DVOL, coda di stress non catturata): è esattamente il punto cieco tipo-CC01 ("Sharpe/vol implausibile → rischio nascosto"). E per-anno MAXSH vince 1/8 anni vs CURRENT — l'uplift multi-cut è smoothing di vol modellata, non alpha di allocazione. Dentro i cap l'ottimizzatore (MAXSH-STR) converge quasi sui pesi correnti (38.6/25/15/21.4) e NON è persistente (0.00 al cut 2024-01) → i pesi correnti sono già ~ottimi per ciò che il backtest può giudicare lecitamente.
  2. L'unico segnale robusto è la DE-CONCENTRAZIONE parameter-free: EW-STR (EW sotto i cap, nessun parametro fittato) vince 7/8 anni (unica perdita 2021 3.1pp), tutti i cut OOS (ΔSh +0.06/+0.13/+0.14), HOLD Sh 2.21→2.35, HOLD CAGR +16.0→+19.7%. Classico "1/N batte l'ottimizzazione" (DeMiguel). La sostanza: CURRENT dà il 41% al peggior Sharpe FULL del book (TP01 1.30) e EW-STR sposta ~11pp da TP01 verso SKH01 (+5pp) e XS01 (+6.25pp).
  3. MA non è un free lunch risk-adjusted: FULL Sh 2.12→2.10 e FULL DD 7.8→8.5% (più SKH01, che ha DD standalone 18%, pesa di più nei primi anni a 2 sleeve). L'uplift è un TILT di ritorno verso gli sleeve research-grade con la storia più corta/caveat più pesanti (SKH01 = research win, book 230m da verificare a deploy; XS01 = STAT-MODE non eseguibile a 2k). E TP01 resta l'unico sleeve deployed live: il suo 41% nel report riflette una scelta di prudenza/eseguibilità, non solo statistica.

VERDETTO (A)

  • Ottimizzazione formale: NON MIGLIORA (viola i cap strutturali o converge ai pesi correnti). Per il book reale i pesi correnti reggono.
  • Candidato PROPOSTO (non applicato): EW-STR = TP01 30 / XS01 25 / VRP01 15 / SKH01 30 — uplift OOS persistente e per-anno (7/8), dentro i cap, al costo di FULL DD +0.7pp e FULL Sh 0.02. È una decisione di risk-appetite (più ritorno atteso spostando peso su sleeve research-grade), non un miglioramento dominante. Se si vuole adottare, farlo consapevoli che aumenta la dipendenza da SKH01/XS01, e NON tocca il book Deribit eseguibile (TP75/SKH25).

Caveat metodologici (A)

  • Le 3 finestre multi-cut sono ANNIDATE (tutte contengono il 2025-26): non 3 conferme indipendenti. Il test disgiunto vero è il per-anno (7/8 per EW-STR è il dato forte).
  • EW-STR è stato costruito DOPO aver visto EW vincere (proiezione del null sui cap dichiarati): costruzione principled e parameter-free, ma va detto — non era nella griglia iniziale.
  • I pesi CURRENT stessi furono fissati (2026-06-23) conoscendo l'hold-out → il confronto "in-sample-opt vs CURRENT su hold-out" è semmai sbilanciato A FAVORE di CURRENT; EW-STR vince comunque.

(B) Guardia-drawdown a livello portafoglio — metodo

Soft-guard causale sul combo 4-sleeve (pesi CURRENT): esposizione del giorno D decisa dal DD dell'equity fino a D1; trigger/re-entry sul NAV ombra non-guardato (lezione stops_lab: sull'equity congelata a expo=0 il DD non rientra mai); isteresi re-risk a 0.4·X come nel tail-hedge lab. Griglia X∈{3,4,5,6}%, derisk∈{0,0.5}. Selezione cella IN-SAMPLE (max Calmar pre-2025), verifica hold-out + multi-cut, null de-levering (expo costante c che pareggia il MaxDD in-sample della guardia: Sharpe di c·r è invariante → la guardia vale solo se batte quello).

Risultati

  • Cella scelta in-sample: X=5% / derisk=0.5 (IS Calmar 3.64 vs 3.24 baseline; IS DD 7.8→6.6%, IS CAGR 25.3→23.9%, IS Sh 2.13→2.12). In-sample batte il null de-levering c=0.84 a pari DD (CAGR 23.9% vs 21.0%) — il timing esiste in-sample.
  • MA OOS è INERTE: a ogni cut la cella scelta non scatta MAI (ΔSh +0.00, ΔDD 0.0pp, ΔCAGR 0.0pp su tutti e 3 i cut) perché il DD OOS del 4-sleeve resta 3.5-4.8% < trigger 5%. La diversificazione a 4 sleeve fa già il lavoro della guardia (il 2022 del book è +11.6% con DD 3.6%: non c'è il grind da proteggere che aveva il combo TP01+GTAA del tail-hedge lab, DD 8.4% / 2022 4.4%).
  • Trigger più stretti che scattano davvero COSTANO: X=3%/d=0.5 → HOLD Sh 2.10 (< 2.21), CAGR 13.7% (< 16.0%); X=3-4%/d=0 whipsaw pieno (HOLD Sh 1.83-2.09; a X=4/d=0 il DD guardato IS sale addirittura a 8.8% > 7.8% baseline — accumulo di perdite su cicli off/on, lo stesso fenomeno visto in stops_lab con l'uscita totale).

VERDETTO (B)

NON MIGLIORA. La guardia-DD che vinceva sul combo TP01+GTAA (DD 8.4%, 2022 4.4%) qui non ha bersaglio: il 4-sleeve ha già DD ~3.5-4.8% OOS. Coerente col thread meta-allocazione 2026-06-29 (drawdown-control ridondante). Nota operativa: la cella X=5%/d=0.5 è innocua (non fa nulla finché il DD non supera il 5%) e in-sample mostrava timing genuino sopra il null de-levering — può valere come circuit-breaker di emergenza sul live (risk management, non alpha), ma non è un miglioramento statistico e non la si adotta come tale.

(C) Combinazione

(B) è inerte → niente da combinare. Per completezza: EW-STR + guard X=5%/d=0.5 → FULL Sh 2.08, DD 6.7%, CAGR 23.7% | HOLD invariato 2.35/3.2%/19.7% (la guardia lima il DD 2021-2023 del tilt a costo di 0.02 Sh FULL). Nessuna adozione proposta.

Sintesi

config FULL Sh FULL DD FULL CAGR HOLD Sh HOLD DD HOLD CAGR
CURRENT (attivo) 2.12 7.8% +23.3% 2.21 3.5% +16.0%
EW-STR (proposta A, non applicata) 2.10 8.5% +25.2% 2.35 3.2% +19.7%
CURRENT + guard 5%/0.5 (B) 2.11 6.6% +22.3% 2.21 3.5% +16.0%
EW-STR + guard (C) 2.08 6.7% +23.7% 2.35 3.2% +19.7%
  • (A) NON MIGLIORA in senso forte — i pesi correnti reggono; l'unico candidato onesto è il tilt de-concentrante EW-STR (30/25/15/30), un trade-off di risk-appetite da decidere, non un upgrade dominante. Gli ottimizzatori in-sample o violano i cap strutturali (VRP01 40%) o riconvergono sui pesi correnti.
  • (B) NON MIGLIORA — guardia inerte OOS sul 4-sleeve; utile al più come circuit-breaker.
  • Nessuna modifica a src/portfolio/sleeves.py o al live. Test 160/160 verdi.

Script: scripts/research/r0701_portfolio_opt.py (~4s, vettoriale).

Verifica avversariale (agente scettico)

Script: scripts/research/r0701_portfolio_skeptic.py. VERDETTO: NON APPLICARE — CURRENT resta. I numeri dell'agente riproducono ESATTAMENTE (via StrategyPortfolio.combined_daily, path di produzione: CURRENT 2.12/2.21, EW-STR 2.10/2.35, multi-cut +0.06/+0.13/+0.14, |diff|=0). Il claim muore altrove: l'uplift è selezione-sull'hold-out di 2° ordine, non alpha di allocazione.

  1. L'uplift OOS vive TUTTO nel 2025-26 — la finestra che ha selezionato i beneficiari. Finestre OOS DISGIUNTE (i 3 cut del diario sono annidati): ΔSh EW-STR vs CURRENT = 0.12 (2024H1) / +0.06 (2024H2) / +0.14 (2025+). L'unica finestra OOS non toccata dalla selezione hold-out è negativa. Sharpe standalone IS→HOLD per sleeve: TP01 1.49→0.30, SKH01 1.42→1.64, XS01 1.22→1.51: EW-STR compra esattamente i due sleeve ammessi/affinati (2026-06-23 / 2026-06-19) PERCHÉ forti sull'hold-out e vende quello che lì collassa. Meccanico.
  2. Pre-2025 (finestra non contaminata) EW-STR PERDE risk-adjusted: ΔSh aggregato 0.05, Sharpe per-anno vinti 2/6 (2021 0.29, 2020 0.10, 2023/2024 negativi).
  3. "7/8 anni vinti" è un artefatto di metrica: è RITORNO composto (un tilt a più vol/ritorno li vince quasi per costruzione), non risk-adjusted. Su Sharpe per-anno: 3/8. E due dei 7 "vinti" (2023, 2024) hanno margine +0.03pp = tie. Bilancio materiale sul ritorno: 5 vinti / 1 perso (2021 3.1pp) / 2 pari.
  4. Plateau: liscio ma il gradiente è solo "meno TP01"; a TP fisso, alzare SKH 25→30 è piatto/negativo (min multi-cut a TP35: +0.07→+0.02). Scomposizione: il tilt solo-SKH (+5pp, TP 36.25) da solo NON è persistente (multi-cut 0.00/+0.05/+0.04); il tilt solo-XS (TP35/XS25/VRP15/SKH25) è l'unico positivo su tutte le finestre disgiunte (+0.05/+0.02/+0.11) — ma pre-2025 fa ΔSh 0.00 (edge ≈ zero fuori dal 2025-26) e carica lo sleeve MENO eseguibile (STAT-MODE).
  5. Realismo: con l'outer-join rinormalizzato EW-STR tiene SKH01 al 50% effettivo nel 2019-20 e 40% nel 2021-23 (book research 230m a metà portafoglio: da lì il FULL DD 8.5%). Punto onesto A FAVORE: un haircut d'esecuzione a drag su SKH01(-20/30%) e SKH+XS non ribalta il ranking hold-out (ΔSh resta +0.08..+0.13), ma i livelli assoluti crollano (HOLD Sh CURRENT 2.21→1.64 al 30% su entrambi) e il beneficio resta di CARTA: il book Deribit eseguibile (TP75/SKH25) non è toccato dalla decisione.
  6. Forking paths quantificato: ≥15 config valutate sull'hold-out (7 vettori pesi + 8 celle guardia), EW-STR costruito dopo aver visto EW vincere. Su 500 tilt CASUALI cap-respecting: 51% batte CURRENT sull'hold-out (mediana ΔSh +0.00), solo 11% sul FULL, 30% su tutti e 3 i cut. EW-STR è al 94° percentile dell'uplift hold-out fra i tilt casuali ≈ il massimo atteso di ~15 tentativi (k/(k+1)=93.8%): l'uplift osservato è indistinguibile dal "best of 15 tilt casuali scelto sull'hold-out".

Conclusione: il tilt non è disonesto nei conti ma non è evidenza — è la stessa lezione del gate SELECTION-ON-HOLDOUT applicata al livello dei PESI (2° ordine: gli sleeve stessi sono stati selezionati su quell'hold-out). Unica direzione sopravvissuta: XS01 18.75→25 (solo-XS, positivo su tutte le finestre disgiunte), MA edge ≈0 fuori dal 2025-26, sleeve STAT-MODE non eseguibile a $600, e l'hold-out-strength di XS01 è a sua volta concentrata dal gate di dispersione nel regime 2025-26 → da rivalutare SOLO con più storia forward, non ora. CURRENT (41.25/18.75/15/25) resta.