From 93ce12931a38a781245ffe8ad1c8c2155e74f3bf Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Sat, 22 Aug 2026 20:54:29 +0000 Subject: [PATCH] =?UTF-8?q?CLAUDE.md:=20ritiro=20una=20regola=20mia=20?= =?UTF-8?q?=E2=80=94=20dealer=5Fnet=5Fgamma=20non=20e'=20il=20GEX=20invert?= =?UTF-8?q?ito,=20e'=20una=20convenzione=20dichiarata=20nel=20sorgente=20s?= =?UTF-8?q?u=20questa=20VPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 23 ++++++++++++++----- scripts/research/r0822b_surface_rv.py | 33 +++++++++++++++++++++------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index a3d5cb4..9eea10f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1993,7 +1993,7 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis Se qualcuno propone SOL "perche' e' eseguibile su Deribit", la risposta e' che l'eseguibilita' non e' mai stata il problema โ€” l'hold-out lo e', a 24 ancore su 24. - ๐ŸŒŠ **ONDATA MULTI-AGENTE 2026-08-22 (20 filoni, branch `research/wave-0822`) โ€” 0 candidati, 1 - DIFETTO DI PRODUZIONE, 3 soglie pubblicate falsificate, 1 leva che nessun gate sa vedere.** + DIFETTO DI PRODUZIONE, **4** soglie pubblicate falsificate, 1 leva che nessun gate sa vedere.** Diario `docs/diary/2026-08-22-wave-multiagente.md`; ledger per filone `docs/research/RESULTS-0822.md`; briefing `docs/research/BRIEF-0822.md`; 21 script `scripts/research/r0822_*.py` (15.295 righe, compilano tutti, ognuno gira da solo). **Book, pesi, cron, config INVARIATI.** @@ -2098,11 +2098,22 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis non risorge** sotto due conditioner mai provati (volume, shock 3ฯƒ): la selezione in-sample sceglie il ramo di **continuazione** in entrambi. Scartati anche: adaptive-horizon (il "vincitore adattivo" ha lookback **costante**, corr 1,000), dealer-gamma (BTC non separa, ETH separa **al rovescio**; - e โš ๏ธ **`dealer_net_gamma` del dataset ereditato e' il GEX col SEGNO INVERTITO**, corr โˆ’0,95, mentre - `liquidation_*_risk` e' **una sola categoria in 17.229/17.229 righe**), oi-pin (il max-pain **non - batte mai, 0/24, la media a 7 giorni dello spot**), term-structure (**termometro contemporaneo**), - skew direzionale (**il prezzo muove lo skew**, t 3,1-9,4 su 8/8, non il contrario), ortho-screen - **7/7**, alt-options (alt), xs-lite, vrp-quote-vere. + โš ๏ธ **e qui una REGOLA MIA, pubblicata la sera stessa e RITIRATA poche ore dopo:** avevo scritto che + `dealer_net_gamma` del dataset ereditato *"e' il GEX col SEGNO INVERTITO"* (corr โˆ’0,95). **FALSO, e + la fonte gira su questa stessa VPS:** `/opt/docker/cerbero-mcp/src/cerbero_mcp/common/options.py:11-14` + **dichiara la convenzione** โ€” *"i dealer sono SHORT calls (le vendono al retail) e LONG puts"* โ€” e + `dealer_gamma_profile:138-140` la implementa (`call_dealer_gamma -= contrib` / `put_dealer_gamma + += contrib`). Non e' un segno sbagliato: e' un'**assunzione di posizionamento dichiarata**, diversa + da quella del GEX standard, e il default `top_n_strikes=50` spiega anche il coefficiente โˆ’0,7 e + l'offset che avevo attribuito a "non-portabilita'". **Il verdetto SCARTATO regge; cade la regola** โ€” + che le prossime ondate avrebbero ereditato al contrario. **REGOLA VERA: prima di dichiarare che un + campo di un dataset e' sbagliato, aprire il codice che lo produce** โ€” qui erano due comandi, e la + correlazione a โˆ’0,95 con la ricostruzione "standard" era esattamente cio' che una convenzione + diversa **deve** produrre. `liquidation_*_risk` e' invece **una sola categoria in 17.229/17.229 + righe**, e quello e' confermato. + Scartati anche: oi-pin (il max-pain **non batte mai, 0/24, la media a 7 giorni dello spot**), + term-structure (**termometro contemporaneo**), skew direzionale (**il prezzo muove lo skew**, + t 3,1-9,4 su 8/8, non il contrario), ortho-screen **7/7**, alt-options, xs-lite, vrp-quote-vere. โš ๏ธ **La catena ereditata da bite ha 74-75 giorni utili, non 3,7 mesi:** prima del **2026-06-09** raccoglieva **una sola scadenza per giro** (due agenti indipendenti, 74 e 75). ๐Ÿ“Œ **(8) REGOLE NUOVE.** (a) **L'open interest NON misura la negoziabilita'** โ€” su Deribit USDC sono diff --git a/scripts/research/r0822b_surface_rv.py b/scripts/research/r0822b_surface_rv.py index 45379f5..65a8206 100644 --- a/scripts/research/r0822b_surface_rv.py +++ b/scripts/research/r0822b_surface_rv.py @@ -777,17 +777,36 @@ def main() -> None: print(f" quota ESEGUIBILE per ora UTC: max {h['ex'].max():.5%} su {len(h)} ore -> " f"nessuna ora del giorno apre una finestra") + print("\n" + "=" * 100) + print("GRIGLIA DICHIARATA (contata al RIALZO)") + print("=" * 100) + print(" 3 test di arbitraggio (verticale ยท farfalla ยท calendario)") + print(" x 2 asset x 2 tipi (call/put) x 2 filtri DTE (0g e 1g) x 2 convenzioni di prezzo") + print(" (mid = incoerenza ยท bid/ask = eseguibile) = 48 celle") + print(" + calendario in 2 lenti (strike condiviso / log-moneyness interpolato) = 4") + print(" + controfattuale USDC x 2 asset x 2 sottocampioni = 4") + print(" + reversione x 2 asset ยท ancora oraria 24 ore x 2 metriche = 50") + print(" + 6 controlli positivi (3 rilevatori x 2 versi) = 6") + print(" TOTALE dichiarato ~112 valutazioni. NESSUNA e' una selezione: non c'e' una cella") + print(" scelta, c'e' un censimento. Il deflated-Sharpe non e' applicabile (nessuno stream).") + print("\n" + "=" * 100) print("SINTESI") print("=" * 100) nv = int(bf["viol_exec"].sum()); nt = len(bf) - print(f" * arbitraggio statico ESEGUIBILE sullo strike: {nv} su {nt:,} triple = {nv/nt:.6%}") - print(f" * incoerenza al MID: {bf['viol_mid'].mean():.2%} delle triple, " - f"ma mediana {np.abs(bf['iv_resid']).median():.3f} punti di vol") - print(f" * mezzo spread mediano: BTC {bf[bf.asset=='BTC']['halfspread_pt'].median():.3f} pt-vol, " - f"ETH {bf[bf.asset=='ETH']['halfspread_pt'].median():.3f} pt-vol") - print(" * il credito netto della migliore farfalla eseguibile in 1,03M osservazioni e' NEGATIVO") - print(" -> l'incoerenza ESISTE e vale meno del costo di attraversarla: verdetto SCARTATO.") + print(f" 1. La superficie e' ARBITRAGE-FREE sui prezzi eseguibili: monotonia 0/{1_111_585:,},") + print(f" convessita' {nv}/{nt:,} = {nv/nt:.6%} (e quell'una vale $0,00 e sparisce l'ora dopo),") + print(f" calendario 6/107.177 con margine mediano di 13 punti di vol dal bordo.") + print(f" 2. L'incoerenza al MID esiste ed e' grande ({bf['viol_mid'].mean():.1%} delle triple)") + print(f" ma vale {np.abs(bf['iv_resid']).median():.3f} punti di vol contro un mezzo spread di 0,86-1,21,") + print(f" ed e' SOTTO IL TICK del venue nel 95-97% dei casi: non e' esprimibile nella griglia.") + print(f" 3. MECCANISMO: |residuo| cresce in modo monotono col LARGO del mercato") + print(f" (BTC 0,080 pt a spread 2,6% -> 0,255 pt a spread 50%). L'incoerenza al mid E' la") + print(f" larghezza del mercato guardata attraverso il mid, non un errore di prezzo.") + print(f" 4. Il controfattuale USDC (lotto 10x piu' piccolo, spread 2,6%) sembra aprire 2.293") + print(f" farfalle a credito su ETH โ€” ma restringendolo alla parte di superficie GIA' quotata") + print(f" stretta quanto le USDC diventa 0/13.287. Era un artefatto del controfattuale.") + print(f" -> l'incoerenza ESISTE e vale meno del costo di attraversarla: verdetto SCARTATO.") print(f"\n[tempo {time.time()-t0:.1f}s]")