diff --git a/docs/research/RESULTS-0822.md b/docs/research/RESULTS-0822.md index cff1dea..ef80f9b 100644 --- a/docs/research/RESULTS-0822.md +++ b/docs/research/RESULTS-0822.md @@ -713,10 +713,10 @@ stessi hanno nominato senza poterli eseguire**. Stesso contratto di consegna, st | 45 | SPOT-NETTING | separare TP01 e SKH01 su due strumenti: quanto vale, e il margine lo uccide? | **LEAD REGGE, SEPARAZIONE SENZA VALORE** — il margine non e' il vincolo (copertura **50x**, invariante al capitale), ma **T1 sbloccato e' un DECLASSAMENTO** (−0,048 contro il path che gira) e il netting perso **risparmia** commissioni: il lead vale **il funding e basta**, [+1,55%, +1,66%]/anno; a bloccarlo e' **il codice di sizing**, non Deribit | | 46 | TAIL-HEDGE | comprare put deep-OTM come assicurazione statica compra DD a prezzo migliore del de-levering? | _in corso_ | | 47 | ANCHOR-ENSEMBLE | eseguire l'ensemble delle 24 ancore invece di sceglierne una e correggere il numero | _in corso_ | -| 48 | VOLVOL | la volatilita' del DVOL (secondo momento, mai usato) contiene cio' che livello e spread non contengono? | _in corso_ | +| 48 | VOLVOL | la volatilita' del DVOL (secondo momento, mai usato) contiene cio' che livello e spread non contengono? | **SCARTATO** — e' davvero una variabile NUOVA (ortogonalita' PASS, max \|corr\| 0,396) ma **guarda INDIETRO**: picco a lag **−5/−10** e parziale con la vol futura **NEGATIVA**. Quinto lato del filone DVOL chiuso | | 49 | TP01-TWIN | il 75% del libro dipende da UNA definizione di trend: un ensemble di meccanismi protegge meglio? | _in corso_ | | 50 | BOOK-3RD | qual e' il miglior TERZO sleeve realmente eseguibile sul libro live a $635 — e a quale capitale cambia? | _in corso_ | -| 51 | NEWDATA-SCOUT | se la scorta e' esaurita: cosa iniziare a raccogliere OGGI, che fra 12-24 mesi apra una famiglia? | _in corso_ | +| 51 | NEWDATA-SCOUT | se la scorta e' esaurita: cosa iniziare a raccogliere OGGI, che fra 12-24 mesi apra una famiglia? | **RACCOGLIERE 2 FONTI SU 10** — catena USDC (**+18%, non +90%**) e una **campagna a termine** di book depth; il criterio di ricostruibilita' ne uccide 4 da solo e **refuta una raccomandazione del 22/08** | | 52 | SKEPTIC-SPOT | il lead dello spot (+1,55-1,66%/anno) sopravvive a un attacco deliberato? | _in corso_ | | 53 | SKEPTIC-LEVA | il gradino di leva 1,25x sopravvive a un attacco deliberato, col funding dentro? | _in corso_ | | — | **NOTIFIER** (audit di fatto) | 🚨 **PUNTO SINGOLO DI GUASTO nella rete di sicurezza** | il `send()` di Telegram e' **un solo tentativo da 10s, senza retry, con l'esito MAI registrato** — e lo stato `alerted=True` viene scritto **prima** dell'invio: un 🚨 di `venue_watch` perso e' perso **per l'intero episodio**. Tasso di fallimento **misurato 6,9%** (2/29, IC95 [1,9%, 22,0%]) | @@ -2603,3 +2603,124 @@ e' il funding e basta**, e in cambio si prendono due costi nuovi mai contati (co separati, gamba TP01 senza disaster-SL) piu' un cambio al percorso di sizing del live. 📌 **Il prossimo passo non e' un backtest: e' la domanda al commercialista e un acquisto di prova da $7,73.** **Libro, pesi, cron, config INVARIATI.** + +--- + +## 51 — NEWDATA-SCOUT (cosa iniziare a raccogliere) + +`scripts/research/r0823_newdata_scout.py`. Conseguenza diretta di §43: se la scorta e' esaurita, la +domanda utile non e' piu' *"cosa abbiamo e non guardiamo"* ma *"cosa NON abbiamo, che varrebbe la +pena iniziare a raccogliere oggi"* — perche' **una catena opzioni non e' ricostruibile a posteriori** +e un'ora non raccolta e' persa per sempre. + +| fonte | apre | ricostruibile? | costo | tempo utile | verdetto | +|---|---|---|---|---|---| +| **catena opzioni USDC-lineare** | nessuna famiglia nuova: **rende onesti i numeri di uno sleeve VIVO** (VRP01, 12%) | **NO** | **+117 chiam./giro = +18%** | episodi (1 regime IV-rank>0,30) | **RACCOGLIERE** | +| **book depth L2 perpetual** | la curva haircut-vs-taglia (oggi **18 fill**) | **NO** | 2.880/g a 1/min×2 | giorni per la mediana, anni per la coda | **CAMPAGNA A TERMINE** | +| trade tape / flusso aggressore | flusso d'ordine (mai aperto) | **NO** — muro **−24h/−26h** | ~6/ora | **6,0 anni** | NON RACCOGLIERE | +| liquidazioni Deribit | coda/stress | NO (vive nel tape) | — | non calcolabile | NON RACCOGLIERE | +| OI per strike nel tempo | — | irrilevante | zero | in corso | **GIA' FATTO** | +| **OI perpetual** (il collettore raccomandato da §10) | affollamento — famiglia **CHIUSA 4 lati** | 🚨 **SI', >=800 giorni** | 1/ora | testabile **oggi** | **NON RACCOGLIERE — TESTARE PRIMA** | +| telemetria Binance (taker, long/short) | posizionamento retail | **NO** — muro 30g | ~24/g | 6,0 anni | NON RACCOGLIERE | +| funding/basis altri venue · DVOL · macro | famiglie chiuse / gia' posseduto | SI' | — | — | NON RACCOGLIERE | + +📌 **Il criterio 1 (ricostruibilita') ne uccide 4 da solo, ed e' stato applicato PROVANDO +l'endpoint, non deducendolo** — ogni verdetto e' una GET con **controllo positivo**, perche' *uno +zero non e' una risposta finche' non si prova che la stessa chiamata funziona altrove*: +tape Deribit **−24h → 100 trade, −26h → 0** (muro verificato coi timestamp restituiti); Binance +**−20g risponde, −40g rifiuta esplicitamente** (`parameter 'startTime' is invalid`); funding e DVOL +serviti storici su richiesta. +🚨 **E ribalta una raccomandazione del 22/08:** §10 proponeva di accendere un collettore di OI +perpetual *"perche' oggi ripartirebbe da zero"*. **Non riparte da zero:** Bybit risponde a −800 +giorni coi timestamp dentro la finestra (2024-06-14). **L'ipotesi e' testabile oggi a costo zero**, e +solo se sopravvive vale pagare la specificita' di venue. + +🚨 **Correzione a un numero che avevo pubblicato io (+90%).** Con **gli stessi filtri del +collettore vivo** (≤95 giorni, OI≥100) la catena USDC BTC+ETH e' di **113 strumenti**, non ~587 → +**+18%, non +90%**. ✅ **Verificato indipendentemente dal coordinatore sul venue**: inverse +(BTC 270 + ETH 379) = **649**, USDC = **113** → **+17,4%**. L'origine del 587 era il conteggio +**grezzo** senza il filtro OI (1.140 strumenti USDC ≤95g, cioe' +81% — vicino al 90% pubblicato): +**il filtro che il collettore applica davvero taglia il 90% della famiglia USDC**, ed e' la replica +esatta di §8 (*OI e negoziabilita' sono anti-correlati su Deribit USDC*; BTC_USDC ha **5** +strumenti sopra soglia). Il giro passerebbe da **652 chiamate / 163 s** a **769 / 192 s**, che +finisce prima del :30 e non tocca `cron_book` al :07. ⚠️ E' un numero **di oggi**: cresce con la +liquidita' USDC e va ri-misurato prima di accendere. + +**Tempo perche' sia utile, dal MDE** (`≈ 1,96/√anni`): Sharpe 0,8 → **6,0 anni**; 1,0 → 3,8; 1,3 → +2,3. **Il soffitto direzionale del progetto e' ~1,15-1,3 ⇒ qualunque fonte che alimenti un SEGNALE +non e' una decisione di oggi.** 📌 **Le due sopravvissute sfuggono al MDE perche' non producono uno +Sharpe: sono misure di COSTO (depth) e di PREZZO REALE (catena USDC).** + +⚠️ **Onesta' dell'agente su cio' che le due fonti NON fanno:** la catena USDC **non apre una famiglia +chiusa** — vale perche' il `f=0,73` di VRP01 e' misurato sulla famiglia **inverse, che un conto USDC +non puo' marginare**: ripara il numero di uno sleeve vivo, non apre alpha. Il depth: la domanda +binding (*quanto costa eseguire a $5k/$20k*) si risponde in **due settimane**; solo la coda di stress +richiede l'archivio — da cui **"campagna", non "collettore"**. + +⚠️ **Bug catturato in sessione:** `urlopen` **solleva** su HTTP 400, quindi il rifiuto di Binance +veniva ingoiato come guasto di rete e il muro **si ribaltava in silenzio in "RICOSTRUIBILE"** — la +stessa conflazione *errore / assenza-di-dato* gia' codificata in `collect_chain` con `quote_status`. + +**VERDETTO: `RACCOGLIERE DUE FONTI SU DIECI, E NESSUNA DELLE DUE PER FARNE UN SEGNALE`** — catena +USDC (+18%) e una campagna a termine di book depth. **Nessuna azione presa: e' materiale per una +decisione dell'operatore.** + +--- + +## 48 — VOLVOL (il secondo momento del DVOL) + +`scripts/research/r0823_volvol.py` (**20 s**, nessuna rete, nessuna scrittura). **36 celle** +dichiarate prima (3 finestre × 3 soglie × 4 usi), tenute poche di proposito data l'aritmetica dei +168 trial. + +✅ **L'ortogonalita' — che era il gate — la PASSA**, e questa e' meta' dell'attesa a priori +**refutata**: misurata prima di costruire qualsiasi strategia, Pearson **e** rango, 6 celle × 6 +referenze, **max |corr| = 0,396** (soglia 0,80): contro il livello DVOL 0,13-0,21, contro l'IV-rank +di VRP01 0,01-0,24, contro RV30 0,09-0,38, contro |esposizione TP01| 0,03-0,30. **E' una quinta +variabile, non una quarta riscritta.** + +⚠️ **Correzione a una mia riga del briefing, fatta leggendo il codice in produzione:** il +**DVOLSPREAD in forward-monitor NON e' implicita−realizzata** — `r0726_dvolspread_gate.make_book` +calcola **`log(dvol_btc) − log(dvol_eth)`**, un relative-value **cross-asset** (✅ verificato dal +coordinatore al sorgente, riga 67). L'agente ha misurato contro **entrambe**: *correlare contro +quella sbagliata avrebbe dato un "ortogonale" gratuito contro una variabile che nessuno trada.* + +📌 **DOVE MUORE: guarda INDIETRO.** `corr(VoV_t, |r|_{t+k})` su BTC: **−10: +0,164 · −5: +0,169 +· −1: +0,132 · 0: +0,113 · +1: +0,057 · +10: +0,018** — picco a lag **−5/−10**, curva monotona +decrescente. **Non e' il termometro contemporaneo** di TERM-STRUCTURE e SKEW: **insegue con una +settimana di ritardo**. Correlazione **parziale** con la vol realizzata futura a 10g, al netto di +`RV_t` e `DVOL_t`: **−0,069 (BTC) / −0,090 (ETH)**. ✅ Controllo positivo del rilevatore **2/2 nei +due versi** (lead sintetico → +3, lag sintetico → −3). + +**Gate:** cella in-sample-only SIZE w=10 p=0,50, marginal **NEUTRAL**, **DSR 0,448 FAIL** +(0,441/0,381/0,228 a N=36/72/168) → `earns_slot_honest=False`. **La trappola del trend in chiaro:** +la cella scelta ha **corr→TP01 0,995 sull'hold-out**; e per uso, RISKOFF/SIZE ereditano lo Sharpe +del trend (mediana IS 0,40/0,66) mentre **DIR — l'unico uso in cui la variabile decide da sola — ha +mediana IS −0,24 e 5/9 celle con FULL negativo**. +**Arm VRP01** (replica del sleeve **bit-exact 2/2** prima di ogni delta): 5/9 battono il canonico = +moneta, maxDD giu' in **9/9 = de-levering**, e contro gate **casuali** che saltano lo stesso numero +di settimane la mediana e' 0,71/0,72 con **0/9 al 95° pctl** → **quinto fallimento consecutivo di un +gate nuovo su VRP01**. + +📌 **IL NUMERO CHE DECIDE, e non e' un gate.** Barre **attive**: FULL 985 → **MDE 1,51**; +hold-out 303 → **MDE 2,73**. Il candidato migliore batte TP01 nudo di **+0,034 di Sharpe — un +fattore 44 sotto l'MDE**: *su questo dato la domanda non e' rispondibile in positivo nemmeno in +linea di principio*. A chiudere sono le due misure che **hanno** potenza e **non dipendono da nessuna +cella scelta**: la parziale negativa, e il **controllo NON CAUSALE** — la stessa cella con la +vol-of-vol che **sbircia** fa **−0,292 sotto TP01**. *Non e' che la si stima male: la variabile non +contiene l'informazione.* + +⚠️ **Errori dell'agente su se stesso:** (i) la lettura dell'ortogonalita' era **cablata** e diceva +*"il legame piu' forte e' con la vol realizzata"* mentre la tabella diceva SPREAD → ora e' calcolata +dalla tabella; (ii) il null del gate casuale estraeva le settimane **indipendentemente per gamba** +mentre il gate vero e' guidato da due DVOL correlati — differenza risultata **immateriale** (0,71 +contro 0,72) *ma andava misurata, non assunta* (nel 25/07 lo stesso errore valeva 2-3×); +(iii) un off-by-one nel conteggio. + +**Non misurato, dichiarato:** vol-of-vol **intra-giornaliera** (il DVOL su disco e' 1d, e un secondo +momento e' proprio dove la frequenza puo' contare); vol-of-vol **implicita dalla curvatura dello +smile**; un modello **congiunto** RV+livello+VoV invece di un gate binario. *"Un uso non provato non +e' un uso refutato."* + +**VERDETTO: `E' UNA VARIABILE NUOVA E GUARDA INDIETRO`** — SCARTATO, **quinto lato del filone DVOL +chiuso**. **Libro, pesi, cron, config INVARIATI.**