Files
PythagorasGoal/docs/diary/2026-09-01-collar-btc.md
T
Adriano Dal Pastro 05816c49f9 COLLAR01 (§71): il pavimento funziona, il tetto lo paga troppo — e cio' che vince e' VRP01
Chiesto dall'operatore in quattro battute: hold BTC long o short coperto in
opzioni, scadenza <=15gg, "ridurre la vincita ma bloccare la perdita" (=>
collar, non put protettiva), entrata gated da indicatori ("forte bull"), e
uscita dalle opzioni fra il 50% e il 75% del tempo.

PERCHE' SI POTEVA RIAPRIRE DOPO §46. §46 (tail-hedge) fu refutato sul beta
+0,076 del libro — "non si assicura un libro che nei crash e' gia' quasi
piatto". Qui il sottostante e' un hold di BTC, beta 1,0: quel motivo non si
applica. E §46 dichiarava non provata proprio la copertura gated su regime.

L'entrata non aggiunge un solo parametro: tsmom_blend media tre np.sign() su
(30,90,180) => valori in {-1,-1/3,+1/3,+1}, quindi "forte bull" = |blend|==1
(52,5% dei giorni) contro il confronto dichiarato |blend|>=1/3 (97,1%).

RISULTATI (lente lunga 2021-03 -> 2026-09, 5,44 anni; griglia 48 celle
dichiarata prima + 36 di estensione dichiarata):
- A1 CONFERMATA: il pavimento FUNZIONA, maxDD scende in 36/48 (§46: saliva
  in 162/162). La meta' della domanda ha risposta positiva.
- A3 CONFERMATA: il de-levering lo fa meglio in 45/48. Δdrift/ΔmaxDD 7,90
  (gate forte) / 1,98 (largo): 2-8 punti di drift per punto di DD.
- C9 in forma pura: il tetto taglia il 46,2% dei cicli VINCENTI, il pavimento
  para il 6,7% dei PERDENTI — 7x piu' spesso sui vincenti: troncatura.
- M1: collar Sharpe 0,508 vs TP01 0,852; TP01+10% => +0,000 di Sharpe e
  +2,32pp di maxDD.

IL FATTO CHE VALE PIU' DEL VERDETTO. Le 3 celle vincenti stavano tutte sul
BORDO; estesa la famiglia vince 35/36 nell'ANGOLO (dput 0,02 / dcall 0,50,
Sharpe 1,471) — e il limite di quell'angolo e' una COVERED CALL: la pendenza
porta fuori dalla domanda posta e dentro lo short-vol. E quel 1,471 e' il
prezzatore che si paga da solo: DVOL/RV-forward 1,320 a 7g (sopra nel 76,9%
dei giorni) => riprezzato alla vol vera l'angolo cade a 0,511, che e' VRP01
(0,47). Non una scoperta: VRP01 per una strada piu' lunga. §3 lo blocca.

USCITA ANTICIPATA: implementata (exit_frac) e COSTA. Cella onesta gate forte:
drift +9,48% (scadenza) -> +3,84% (50%), esito da VINCE a perde sotto 0,75.
Il meccanismo previsto c'e' (VRP residuo +3,38 -> +1,27pp) ma lo spread lo
travolge. Corregge l'applicazione di §46: "un roll anticipato non paga f"
vale per una copertura solo LONG; in un collar la gamba venduta va
RICOMPRATA, quindi si paga f sulla parte che a scadenza si regolava gratis.
L'asimmetria si INVERTE quando la struttura ha una gamba corta.

CONTROLLI DELL'APPARATO 3/3 (M15): pranzo gratis riconosciuto (maxDD
51,83%->36,76%, drift +10,04%->+35,69%), premio x10 rifiutato, zero-cost
finito. Cinque difetti miei catturati dai controlli, non a occhio: bisezione
zero-cost invertita (dava Sharpe -3,9), dcall=NaN nella cassa, C9 non
consapevole della direzione (S1>S0 non e' "vincente" per uno short), e due di
contabilita' che avrebbero ADULATO il collar (base che rollava lo spot
pagando ~3,6%/a di fee inesistenti; roll che chiudeva lo spot senza motivo).

Corregge anche un muro di §46: il tick da 5 USDC e' della famiglia USDC; la
catena che raccogliamo e' 100% inverse, quindi li' non si applica.

Regole nuove in CLAUDE.md: M29 (un edge da opzioni prezzate a modello si
riprezza alla vol REALIZZATA prima di crederci), M8 esteso (un argmax sul
BORDO e' una pendenza, non una cella), C4 esteso (il segno dell'asimmetria di
f dipende dal verso della gamba).

Libro, pesi, cron, config INVARIATI. Nessun ordine. Suite: 807 passati.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 17:30:18 +00:00

12 KiB
Raw Blame History

2026-09-01 — COLLAR01: il pavimento funziona, il tetto lo paga troppo, e ciò che vince è VRP01 travestito

Scritto il 2026-09-01. Ogni numero è riprodotto da scripts/research/r0901_btc_collar.py. Libro, pesi, cron, config INVARIATI. Nessun ordine.

0. La domanda, come è arrivata

«crea una strategia di hold BTC in long o short con copertura con options (max 15gg)» «opzione deve essere al max di 15gg» «voglio ridurre la vincita, ma bloccare la perdita» «ovviamente l'entrata deve essere gestita da una strategia confortata da indicatori (es. è in forte bull)» «dalle opzioni dobbiamo uscire prima del termine (tra 50% e 75% del tempo)»

Le tre precisazioni cambiano l'oggetto, e vanno lette insieme: non è una put protettiva, è un COLLAR (pavimento comprato, tetto venduto per finanziarlo), su un hold gated da indicatori, con scadenza ≤15 giorni.

1. Perché questo filone si poteva riaprire

§46 (TAIL-HEDGE, 2026-08-23) è REFUTATO e la memoria dice di battere il motivo, non di ripetere la misura. Il motivo di §46, verbatim:

il maxDD SALE in 162/162 celle, a ogni lente di f, perché il beta del libro al sottostante è +0,076: non si assicura un libro che nei crash è già quasi piatto.

Quel motivo non si applica qui. §46 assicurava il libro (TP01+SKH01, piatto il 28% dei giorni); qui il sottostante è un hold di BTC, beta 1,0 per costruzione. E §46 dichiara di non aver provato proprio questo: «Nessuna copertura dinamica (gated su regime) è stata provata: la domanda era la statica».

Riusati e non rimisurati: metriche e k_for_same_dd da r0823_tail_hedge, il listino fee opzioni Deribit, la catena via cblib.load_chain().

2. L'entrata, presa dal progetto invece che inventata

trend_portfolio.tsmom_blend media tre np.sign() sugli orizzonti (30, 90, 180), quindi assume solo i valori {1, 1/3, +1/3, +1} (il bucket 2/3 non esiste — errore già corretto in §57). Questo dà a "forte bull" una definizione che non aggiunge nemmeno un parametro nuovo:

  • gate FORTE = |blend| == 1, tutti e tre gli orizzonti concordi → a mercato 52,5% dei giorni
  • gate LARGO = |blend| ≥ 1/3, confronto dichiarato → a mercato 97,1% dei giorni

Il segno dà la direzione, quindi long e short sono entrambi coperti come chiesto. Si entra il giorno dopo il segnale (eseguibile, §8.1).

3. La calibrazione: quello che il modello non poteva assumere

161.964 quote a due lati su 95 giorni (2026-05-07 → 2026-09-01), scadenze 1-15 giorni.

Lo skew, ed è il fatto strutturale del filone:

|δ| IV put / ATM IV call / ATM la put costa
0,10 1,249 0,959 +30% della call
0,20 1,132 0,950 +19%
0,30 1,072 0,960 +12%

Un collar delta-simmetrico è un debito netto: compro l'ala cara e vendo quella a buon mercato. Non è un dettaglio di prezzo, è la ragione per cui "gratis" non esiste a delta simmetrici. Spread (mezza forchetta / mid): put 1,9-8,3%, call 2,1-10,0% secondo il delta. Struttura a termine IV/DVOL30 ≈ 0,92-0,94 a 2-14 giorni.

📌 A5 confermata, e corregge un muro di §46: il tick da 5 USDC che lì era «il secondo muro, strutturale» vale per la famiglia USDC. La catena che raccogliamo è 100% inverse (BTC-31JUL26-45000-P), col tick in BTC. Il muro di §46 non si applica a questo filone.

4. Il risultato, in ordine di come uccide

Lente lunga 2021-03-24 → 2026-09-01 (1.988 giorni, 5,44 anni). BTC buy&hold nudo: Sharpe 0,413 · maxDD 76,73% · drift +7,82%/a. Griglia dichiarata prima: 3 δput × 3 δcall × 2 tenor × 2 gate = 48 celle, più 12 varianti zero-cost dichiarate a parte.

A1 CONFERMATA — il pavimento funziona davvero (e §46 è battuto sul suo motivo)

maxDD scende in 36/48 celle. Con beta 1,0 la put para davvero: è il risultato che §46 non poteva ottenere. Questa metà della domanda dell'operatore ha risposta positiva.

A3 CONFERMATA — ma il de-levering lo fa meglio in 45/48 celle

gate base gated senza opzioni
FORTE Sharpe 0,442 · maxDD 51,83% · drift +10,04%/a ← il null da battere
LARGO Sharpe 0,578 · maxDD 71,94% · drift +17,37%/a

Il null è lo stesso hold gated, senza opzioni, scalato a iso-maxDD — generato dallo stesso motore, non ridichiarato (P1). Il collar lo batte in 3 celle su 48.

A2 CONFERMATA — ogni punto di DD risparmiato costa 2-8 punti di drift

Δdrift/ΔmaxDD mediano: 7,90 col gate FORTE, 1,98 col LARGO. Il tetto costa più di quanto il pavimento renda, e non di poco.

🚨 C9 — non è protezione, è troncatura

Cella migliore, 196 cicli: il tetto taglia nel 46,2% dei cicli vincenti, il pavimento para nel 6,7% dei cicli perdenti. Scatta 7 volte più spesso sui vincenti che sui perdenti — la definizione letterale di C9. La regola dell'operatore («ridurre la vincita, bloccare la perdita») è implementata fedelmente: il problema è che su BTC quel baratto è pagato male.

M1 — dentro il libro non aggiunge nulla

Collar Sharpe 0,508 contro TP01 0,852, corr +0,486. TP01 + 10% di collar: Sharpe +0,000 e maxDD +2,32pp. A 25%: 0,065 di Sharpe e +6,57pp di maxDD. Peggiora proprio la cosa che dovrebbe proteggere.

5. 🚨 Il fatto che vale più del verdetto

Tutte e 3 le celle vincenti stanno sul BORDO della griglia (δput al minimo, δcall al massimo). M8: un argmax sul bordo non è una decisione. Ho esteso la famiglia (M4) con 36 trial dichiarati verso l'angolo — e lì vince in 35/36 celle, con il massimo nell'angolo:

gate FORTE, 7 giorni, δput 0,02 · δcall 0,50 → Sharpe 1,471 · maxDD 18,12% · drift +29,99%/a

Il limite di quell'angolo è nessun pavimento, tetto ATM: una covered call. Cioè la pendenza porta fuori da ciò che l'operatore ha chiesto e dentro lo short-vol.

E quel Sharpe 1,471 non è una scoperta — è il mio prezzatore che si paga da solo:

DVOL / RV-forward DVOL sta sopra
a 7 giorni 1,320 76,9% dei giorni
a 14 giorni 1,253 74,8% dei giorni

Riprezzando le opzioni alla volatilità effettivamente realizzata (diagnostica con look-ahead dichiarato — è il valore equo ex-post, non una strategia):

cella a DVOL a vol realizzata il VRP valeva
FORTE 7g δ0,02/0,50 Sh 1,471 · +29,99% Sh 0,511 · +8,45% +21,54 pp (72%)
LARGO 7g δ0,02/0,50 Sh 1,141 · +32,17% Sh 0,114 · 1,10% +33,26 pp (tutto)
FORTE 7g δ0,10/0,30 VINCE perde +6,75 pp
LARGO 14g δ0,10/0,30 perde perde +8,02 pp

Il 72-100% dell'edge dell'angolo è il premio di varianza, non la struttura. E ciò che sopravvive alla riprezzatura — Sharpe 0,511 — è, entro il rumore, il numero che il progetto ha già: VRP01 a f=0,73 vale Sharpe 0,47. Non ho trovato una strategia nuova: ho ri-scoperto VRP01 per una strada più lunga. E §3 lo blocca comunque: «niente short-vol da modello in deploy» — questo è esattamente short-vol da modello.

5-bis. L'uscita anticipata: chiesta, implementata, e costa

L'operatore ha chiesto di uscire dalle opzioni fra il 50% e il 75% del tempo. Implementato come exit_frac, su tenor 14 giorni (⇒ uscita a 7 / 9 / 10 giorni). La mia ipotesi a priori era che migliorasse: uscire presto recupera valore temporale sulla put e rinuncia al theta più veloce sulla call, cioè proprio alla parte che stampava il premio di varianza. Metà giusta, metà no.

cella δ0,10/0,30, gate FORTE uscita Sharpe drift null esito VRP residuo
a scadenza 1,000 0,488 +9,48% +8,07% VINCE +3,38pp
75% 0,750 0,457 +8,59% +7,72% VINCE +4,93pp
62,5% 0,625 0,366 +6,11% +7,98% perde +2,51pp
50% 0,500 0,278 +3,84% +8,04% perde +1,27pp

Il meccanismo previsto c'è — il VRP residuo scende da +3,38 a +1,27pp, quindi uscire presto davvero rinuncia allo short-vol — ma lo spread lo travolge: 5,6 punti di drift sul gate FORTE, 10,2 sul LARGO (12,06% → 1,88%), e su δ0,20/0,20 da 4,37% a 8,58%.

🚨 E qui §46 va corretto nella sua applicazione. §46 misurò: «f si paga solo sulla parte di valore che converge a intrinseco, quindi un roll anticipato non lo paga». Vero per una copertura SOLO LONG. In un collar c'è una gamba venduta da ricomprare: uscire prima paga f esattamente sulla parte che a scadenza si sarebbe regolata gratis, e si fa ~2× più spesso per unità di tempo. L'asimmetria di §46 si inverte quando la struttura ha una gamba corta. È il risultato trasferibile di questa richiesta.

Nella banda chiesta (50-75%) il verdetto si spacca: a 0,75 la cella onesta passa ancora il null (di poco); a 0,625 e sotto non lo passa più. Nessun exit_frac ribalta il verdetto del filone — lo peggiora.

6. I controlli dell'apparato (M15) — 3/3

§46 insegna che «un controllo positivo rotto dichiara guasto l'apparato». Prima di credere a un verdetto negativo ho verificato che l'apparato sappia riconoscere un successo:

controllo atteso misurato
pavimento a premio zero (pranzo gratis) deve VINCERE maxDD 51,83%→36,76%, drift +10,04%→+35,69%
premio ×10 deve PERDERE drift 33,96%/a
zero-cost costruibile e finito non NaN drift 3,50%/a

7. Tre difetti miei, catturati dai controlli e non a occhio

  1. Bisezione dello zero-cost invertita (hi = md dove serve lo = md): il premio cresce col delta, quindi se incasso troppo poco il tetto va avvicinato. Dava Sharpe 3,0/3,9 e drift 53%/a — spazzatura che al primo giro avevo quasi pubblicato.
  2. dcall=NaN nella variante zero-cost propagava NaN nella cassa allo smontaggio anticipato.
  3. C9 non consapevole della direzione: usavo S1 > S0 come proxy di "ciclo vincente", ma per un ciclo short un prezzo che sale è una perdita. Era la causa del risultato impossibile «il pavimento para nello 0,0% dei cicli perdenti» con una put a 10 delta.

E due difetti di contabilità trovati prima di misurare, che avrebbero adulato il collar: la base senza opzioni rollava lo spot ogni tenor giorni pagando ~3,6%/anno di fee inesistenti; e al roll delle opzioni chiudevo e riaprivo anche lo spot, che non ha motivo di muoversi.

8. Cosa NON ho misurato, dichiarato

  • La lente reale (quote vere, 2026-05→09) non è stata girata come backtest. 123 giorni = ~8 cicli non sovrapposti: sotto-potenziata per costruzione, e su una finestra in cui BTC è salito da ~64,7k a ~77,5k — avversa a un collar per costruzione. La catena è servita a calibrare (skew, termine, spread), che è l'uso in cui 161.964 quote hanno potenza.
  • Nessun DSR, nessun study_family_honest. Non servono: il filone cade al primo gate (M5), e M2 si spende su ciò che il primo gate lascia in piedi.
  • A6 e A7 non verificate (lente reale non girata; il verso short è dentro i gate ma non separato). Restano previsioni non misurate, non risultati.
  • Il funding dei perp non è nel motore, come in ogni backtest del progetto: 2,16%/a di drift. Colpisce base e collar quasi allo stesso modo (stessa esposizione spot), quindi non cambia il segno del confronto, ma abbassa entrambi.

9. Verdetto

IL PAVIMENTO FUNZIONA — E' IL TETTO CHE NON SI PUO' PAGARE. E CIO' CHE VINCE SUL BORDO NON E' LA PROTEZIONE: E' IL PREMIO DI VARIANZA, CIOE' VRP01REFUTATO come chiesto.

Con una postilla che è il vero risultato trasferibile: la domanda «bloccare la perdita» ha risposta positiva sul maxDD (36/48) e negativa sul prezzo (45/48). Su BTC il pavimento si compra meglio tenendo meno BTC che comprando una put e vendendo una call — e il de-levering, a differenza del collar, non tocca il rendimento nella coda destra dove BTC vive.

10. Cosa lo riaprirebbe

  • Un f di stress misurato su un crash catturato — la stessa condizione che §3 pone allo short-vol. Con quello, l'angolo covered-call diventa discutibile invece che escluso.
  • Un sottostante senza coda destra grassa: il tetto costa perché BTC vive lì. Su un asset a distribuzione più simmetrica il baratto cambia di segno, e il conto va rifatto.
  • Non lo riapre un tenor diverso, un delta diverso o una griglia più fine: la pendenza è monotona verso l'angolo short-vol, e l'angolo è già misurato.