Files
PythagorasGoal/docs/research/RESULTS-0822.md
T

365 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ONDATA 2026-08-22 — esiti per filone (aggiornato man mano)
Regola di lettura: `SCARTATO` con un meccanismo misurato vale quanto un `LEAD` — chiude un filone
e smette di farlo pagare alle ondate successive. `CANDIDATO` richiede marginal ADDS + DSR>=0.95 +
null de-levering superato + eseguibilita' al capitale dichiarato.
| # | filone | verdetto | in una riga |
|---|---|---|---|
| 9 | ADAPTIVE-HORIZON | **SCARTATO** | il "vincitore adattivo" ha lookback incollato al bordo il 100% del tempo = TSMOM costante a 20g (corr 1.000, dSh 0.00 in 8/8 anni e 0/12 ancore); isolando le celle davvero adattive -> NEUTRAL, corr→TP01 0.90 = TP01 travestito || 4 | DEALER-GAMMA | **SCARTATO** | la gamba tradeable e' INCOERENTE (BTC non separa, ETH separa al ROVESCIO); cio' che resta e' quasi tutto DVOL (corr 0.66), gia' refutato il 26/06. DSR 0.440 e la cella migliore sta SOTTO il massimo atteso dal rumore |
| 2 | GROWTH-POLICY | **LEAD** (condizione, non data) | il libro gira al **7% di Kelly** e raccoglie il **15%** della crescita massima in log; il gradino eseguibile 1.00x->1.25-1.50x vale 14.7a -> 12.9-11.6a al muro. Ma un solo giorno -10% all'anno porta k* da ~10x a **2x**: non si decide su un conto vero con la lente close-only |
| 12 | ORTHO-SCREEN | **SCARTATO 7/7** | nessuna famiglia arriva a ADDS+DSR; e il motivo e' **aritmetico**: su 168 trial il massimo atteso dal rumore e' Sharpe **1.572**, SOPRA il soffitto direzionale misurato (~1.3) -> uno screen largo su BTC/ETH direzionale **non puo'** passare un DSR, per costruzione |
| 3 | XS-LITE | **SCARTATO** (come sleeve) + **1 soglia pubblicata falsificata** | concentrare XS01 non crea uno sleeve nuovo (corr 0.81-0.96 col canonico, DSR FAIL, de-levering non superato) — ma il muro *"XS01 serve ~$20k"* e' misurato su una diagnostica di TURNOVER: il ribilancio vero smette di passare sotto **~$109 di sleeve (~$730 di book), 27x piu' in basso** |
| 10 | FLOW-SQUEEZE | **SCARTATO** (2 motivi indipendenti) | meta' dell'ipotesi **non esiste nel dato** (`liquidation_*_risk` = una sola categoria in 17.229/17.229 righe); l'altra meta' e' sotto la propria soglia di potenza **dichiarata prima** (MDE 1,056% vs effetto 0,402%) ed e' comunque **morta alla nascita** (la colonna non e' ricostruibile) |
| 11 | VRP-QUOTE-VERE | **SCARTATO** + **1 difetto di RACCOLTA in produzione** | il campione contiene l'**astensione** della strategia (0/19 settimane passano IV-rank>0.30) e il titolo non sopravvive all'ora d'ingresso; ma soprattutto: **`collect_chain.py` raccoglie la famiglia di contratti che il conto NON puo' marginare** |
| 7 | TERM-STRUCTURE | **SCARTATO** + 1 LEAD stretto (decisione 2027-02-01) | la pendenza e' un **termometro contemporaneo** (picco CCF a lag 1h/0h); il carry non paga il bid-ask (**18,6 giorni di roll-down per pagare UN round-trip**); come gate e' la **5ª occorrenza** della ridondanza col trend |
| 6 | OI-PIN | **SCARTATO** | il max-pain batte uno strike casuale ma **non batte mai (0/24) la media a 7 giorni dello spot**, un livello che non usa NESSUN dato di opzioni: non e' pinning, e' reversione verso il centro recente con l'OI come stimatore rumoroso di quel centro |
| 8 | VOL-SIZE | **LEAD** (gate 2026-12-22) + 1 falsificazione | dare a SKH01 una size per-trade regge a **23/23 ancore**, 8/8 anni, null di permutazione e trasferimento su V1 — ma vale **+0,07 di Sharpe di libro, un terzo della fortuna d'ancora del libro stesso (+0,196)**. Il vol-target di **libro** e' invece falsificato: compra peso SKH gia' respinto e peggiora l'eseguibilita' |
| — | **XSR-REPRO** (integrita') | 🚨 **DIFETTO DI PRODUZIONE** | il numero 1.82 e' SPIEGATO e non era sbagliato (era su una **terza** lente, e su una barra non ancora chiusa) — ma cercandone la causa e' emerso che **`paper_xsr` registra ~41 minuti di mercato al giorno**, non un giorno. Tre gate pre-registrati leggono serie costruite cosi' |
| 5 | SKEW | **SCARTATO** (Q1, Q2) + **LEAD** (Q3, gate 2027-02-22) | il prezzo muove lo skew (t 3,1-9,4 su 8/8 test), **non il contrario** (max |t| in avanti 2,35 contro 2,08 atteso dal rumore). Ma Q3 e' grosso: **il f=0,73 di VRP01 e' per il 42% STRUTTURA A TERMINE e solo per il 25% skew** |
## Note che sopravvivono ai singoli filoni
### 9 — ADAPTIVE-HORIZON (r0822_adaptive_horizon.py, 112 trial dichiarati)
- Sanity: il baseline dell'agente riproduce TP01 canonico a **max|diff| = 0.0** (n=2719).
- Il controllo giusto NON era TP01 ma il **miglior lookback COSTANTE**: senza quel controllo il null
confonde "adattare paga" con "un orizzonte piu' corto paga su questo campione". L'agente se l'e'
costruito da solo dopo aver visto l'argmax incollato al bordo, e ha dichiarato i trial in piu'.
- ⚠️ Segnalazione, NON proposta: 30/90/180 e' rango 18/24 in-sample nella propria famiglia di
orizzonti (10/24 sull'hold-out), ma la superficie di L e' un **crinale di rumore** — il salto di
Sharpe fra L ADIACENTI e' +0.18, cioe' il 47-67% dell'intero vantaggio del vincitore su TP01, ed
estendere la griglia ha spostato l'argmax da L=20 a L=15. "Piu' corto e' meglio" e' un max-of-k su
una superficie frastagliata. **Nessun cambio a TP01.**
- Riaprirebbe il filone: un rilevatore il cui L si muove DAVVERO che batta il miglior L costante
(non TP01) in >=6/8 anni appaiati con corr→TP01 < 0.6 — es. BOCPD/PELT vero, non provato.
### 4 — DEALER-GAMMA (r0822_dealer_gamma.py, 136 statistiche dichiarate)
⚠️ **DIFETTO DI DATO, il risultato piu' riusabile del filone: `dealer_net_gamma` e' il GEX col SEGNO
INVERTITO** — corr **-0.95 BTC / -0.89 ETH** contro la ricostruzione da manuale sulla catena
(962/1116 snapshot, ~280-316 strike), fit `dng ~ -0.7*GEX`. **Chi lo usasse col nome che porta
leggerebbe ogni regime al contrario.** Spiega anche la contraddizione interna del file (corr fra
`dng>0` e `spot>flip` = -0.28 / -0.92).
⚠️ **Il file dichiara piu' di quel che ha:** cadenza 15 min solo dal **2026-05-01**; i 37 giorni
prima sono **un punto al giorno** -> **90 giorni, non 4 mesi**. `liquidation_long_risk` e
`liquidation_short_risk` sono **COSTANTI** ('low' in 17.229 righe su 17.229 non nulle) = zero
informazione. `gamma_flip_level` congelato nel **61%** dei passi su BTC.
- Gate: **null de-levering FALLITO** (baseline x0.6 stesso maxDD con Sharpe migliore); **DSR 0.440**
su 64 trial, e nel modo piu' netto — la cella migliore (+4.98 lordo) sta **sotto** il massimo
atteso dal puro rumore (+5.12). `marginal_vs_tp01` inutilizzabile: su 90 giorni full e hold-out
COINCIDONO (`n_hold_days == n_days == 90`).
- **Null location-matched** (aggiunto dall'agente): `gamma_flip_level` bocciato — 96% di accordo con
`spot > SMA(720h)` su ETH; su BTC la SMA nuda da' uno spread MAGGIORE.
- **Ampiezza effettiva**: 73/59 episodi di regime ma 6-8 coprono il 78-86% del tempo -> **n_eff 53
(BTC) / 24 (ETH) ore** su 2.130. Il regime coincide col MESE (maggio long, giugno short, luglio long).
- ✅ Ricostruibile oggi dalla NOSTRA catena, meglio dell'originale (518 ore dal 01/08, ~209-262
strike/ora, quote_status ok ~100%, segno giusto) — **ma la soglia non e' portabile** (`dng=0`
corrisponde a `GEX=+5.8e6` su BTC): ricalibrarla sui 90 giorni sarebbe la selezione che il
progetto rifiuta. Riapertura non prima di **~30-40 episodi di regime = ~2 anni (meta' 2028)**.
### 2 — GROWTH-POLICY (r0822_growth_policy.py, 241 celle dichiarate)
**Controllo di replica superato**: il motore riproduce `r0807_piano_netto` §2 al numero pubblicato
(EUR250/m -> 19,8a / P 52%; EUR500/m -> 14,7a / P 99%) con path diversi.
📌 **Il risultato strutturale: ogni gate del progetto e' INVARIANTE ALLA SCALA.** Lo Sharpe misura
1,31 a OGNI cella del knob di leva -> `deflated_sharpe` e `marginal_vs_tp01` non falliscono, **non
vedono la variabile**. E' per questo che la leva e' l'unica leva del libro mai esaminata in 2 mesi.
- Serie de-luckata x0,89: drift 17,11%/a, vol 11,37%, Sharpe 1,51, peggior giorno -3,95%.
Netto fee E netto fisco d'accumulo (33% + carry 4a + patrimoniale 0,2%).
- k* empirico **~10-14x** (banda 10x a 1500 path / 14x a 2500: la POSIZIONE non e' risolta),
Kelly gaussiano 13,2x. Libro a k=1 -> g 17,0%/a, maxDD mediano 18,1%, P(DD>30%) 1,4%.
- **Fragilita' che decide il verdetto:** k* e' lineare nell'errore del drift (stimato su 7,4 anni) —
-1 SE -> 10x, -2 SE -> 7x, drift dimezzato -> 7x, drift zero -> 0,5x. E allo **stress di coda**
un giorno -10% **all'anno** porta k* a **2x**, -15%/anno a **1x**.
- ⚠️ **Controllo di plausibilita' FALLITO dall'agente sul proprio output** (e riportato): capitale
mediano **$4,4e12** da $600 a k=14x -> il modello assume ritorno **indipendente dalla size**.
A k>2 i numeri sono aritmetica, non previsioni.
- **Gate pre-registrato (condizione, non data): nessuna proposta di k>1 prima di rifare la curva con
la lente WICK ACCOPPIATA** (`r0725_prop_coupled`) — a leva il breach si valuta sul MINIMO, e la
lente close-only usata qui e' quella misurata **cieca** il 25/07 (raddoppia i breach da daily-loss).
- 📌 **Sottoprodotto da verificare (tocca un'etichetta del libro live):** a `target_vol=20%` la vol
**realizzata** di TP01 e' **12,14%** — il target vale sulla posizione quando c'e', e TP01 e'
long-flat. **L'etichetta sovrastima il rischio preso di ~40%.**
### 12 — ORTHO-SCREEN (r0822_ortho_screen.py, 174 trial: 7 famiglie x 24 + 6 controlli)
📌 **Il risultato piu' riusabile dell'ondata, ed e' metodologico:** il deflated-Sharpe va calcolato
**di screen** (168 trial) e non solo di famiglia (24). Su quel pool il massimo atteso dal puro rumore
e' **Sharpe 1.572**, cioe' **sopra il soffitto direzionale misurato del progetto (~1.3)**.
**Conseguenza: una ricerca a rete larga su un singolo stream direzionale BTC/ETH non puo' passare il
proprio gate — non e' sfortuna, e' aritmetica.** Le ondate future o dichiarano famiglie molto piu'
piccole in anticipo, o cambiano meccanismo (non-direzionale / cross-sectional).
📌 **Per la prima volta nel progetto l'eseguibilita' a $600 non e' il vincolo binding di niente**
(haircut 0.00-0.01 su 7/7): muore tutto molto prima, sull'edge.
- Famiglie: RSKEW (skew realizzata), TACC (accelerazione del trend), VPX (volume-prezzo), XDISP
(dispersione dei 51 alt come timer), XCORR (corr BTC-ETH), XTAIL (dopo shock 3σ), VRAT
(variance-ratio). Miglior DSR di famiglia 0.633, di screen **0.034**. `robust_oos` False 7/7.
- **TACC** e' l'unica ADDS (corr→TP01 0.09) ma il suo uplift hold-out **vive tutto nel 2026** (2025
da solo 0.314) = finestra fortunata. E la domanda della famiglia ha risposta: **e' il LIVELLO,
non l'accelerazione** — la cella scelta si riduce al ritorno a 5 giorni, corr **+0.784** col
momentum di livello.
-**Tre falsificazioni che chiudono spazio:** (1) la mean-reversion **non torna in vita** sotto due
conditioner mai provati (volume, shock 3σ): la selezione in-sample sceglie il ramo di
CONTINUAZIONE in entrambi i casi; (2) la dispersione dei 51 alt come timer di mercato e'
**negativa** (0.899 sulla sola finestra attiva, non e' un artefatto di calendario); (3) RSKEW e'
il ritratto del fitting — **miglior in-sample dello screen (1.281) e peggior hold-out (0.494)**,
col segno OPPOSTO all'a-priori teorico dichiarato.
- ⚠️ **6ª occorrenza del null del de-levering** (VRAT, maxDD 4.4% -> `k*TP01` fa meglio).
- ⚠️ Due candidati hanno l'ancora canonica come **PEGGIORE** delle 8 (TACC, VRAT): la fortuna
d'ancora non ha un verso fisso, e guardare solo il canonico a volte **inventa un danno**.
### 3 — XS-LITE (r0822_xs_lite.py, 26 celle + 120 valutazioni d'ancora)
✅ Repliche **bit-exact** prima di ogni delta: XS01 vs `sleeves._xsec_returns` e XSR01 vs
`basket_from_positions(demean=True)`, entrambe `max|diff| = 0.0`.
📌 **Falsificazione di un numero pubblicato:** il muro *"XS01 serve ~$20k"* non e' un fatto di
Sharpe ma di **turnover** — e a capitale piccolo il min-order salta la **deriva del vol-target**
(|Δw| giornaliero 0.001) che **non porta segnale**, non il ribilancio (|Δw| 0.091-0.157). Capitale
minimo perche' il ribilancio passi: **$109 (k=5) / $86 (k=3) / $64 (k=2)** di sleeve. Stessa lezione
gia' imparata su TP01 nel 2026 ("a $600 il min-order e' gia' la banda ottimale") e **mai applicata a
XS01**. ⚠️ L'agente ha usato **min-order $10 (Hyperliquid)**, non $5 (Deribit) — un audit dedicato
sta verificando i minimi veri del venue.
- Concentrare **non** ripara il rischio #1 di XSR01: XS-LITE regge oltre **50 bps/gamba**, XSR-LITE
muore a **~28 bps a ogni k, pieno incluso**.
- La radice dell'ampiezza **non descrive** XS01: da 10 a 4 gambe si perde il **2%** di Sharpe
mediano-di-fase mentre N_hhi passa 6.9 -> 3.0 (il segnale sta negli **estremi** del ranking; le
gambe 3-5 per lato aggiungono rischio quanto segnale). Il collasso arriva solo a k=1 (41%).
- ⚠️ **Da inseguire — tocca un gate pre-registrato: lo Sharpe 1.82 di XSR01 NON si riproduce oggi.**
Sulla finestra identica a quella di scoperta la lente "paniere" da' **1.75** e la lente "libro" di
`paper_xsr` da' **2.23**; 1.82 non e' nessuna delle due. Spiegazione piu' probabile: `data/raw` e'
gitignored e il cron riscrive i parquet HL ogni notte -> **stesso codice, dati diversi** (identico
allo scoperto del 07/08 su GTAA/TLT). **La decisione del 23/10 poggia su quel numero.**
### 10 — FLOW-SQUEEZE (r0822_flow_squeeze.py, 118 trial dichiarati, griglia RIDOTTA per budget)
📌 **Sottoprodotto con potenza vera, e chiude un filone: il funding non predice ne' direzione ne'
volatilita'** — misurato su **53.430 ore / 3 anni** di funding Hyperliquid (li' la potenza c'e'):
eccesso |<=0,35%| a 24h con **segno instabile fra anni**, |ritorno| futuro piatto e non monotono.
**Il filone funding, gia' chiuso su 3 lati come livello di carry, si puo' dichiarare chiuso anche
come proxy di AFFOLLAMENTO. Quarto lato.**
- Il "segnale" migliore (Sharpe 3,25 su 90 giorni) e' **il massimo di 18 celle**: DSR **0,103**
(0,004 su 118 trial), `implausible_sharpe=True`, e su 114 giorni **il massimo atteso per caso e'
Sharpe 5,40** -> il candidato sta **sotto il proprio null**. Il 71% del P&L e' in giugno, il 60%
in **3 giorni su 114**.
- Il null "statica travestita" e' superato (sempre-short = 0,67), ma quello di **timing casuale
location-matched** e' al 99,7° pctl **che pero' e' il massimo di 18** -> P(per caso) = 0,06:
**non superato dopo il conto dei trial**. Esempio pulito di come si legge un percentile alto.
- ⚠️ **Ricostruibilita' MISURATA, non assunta:** l'OI della catena (opzioni) contro la colonna dello
snapshot (perpetual) da' **Pearson +0,03 BTC / +0,21 ETH** — non e' la stessa grandezza.
- 💡 **Azione possibile, costo quasi nullo (NON eseguita, tocca il cron di produzione):** accendere
un collettore orario dell'**OI dei perpetual Deribit** (una GET/ora, API pubblica). Non ripara
questo filone, ma da quel giorno la storia comincia; oggi ripartirebbe da zero. Il criterio di
falsificazione e' gia' scritto dall'agente: >=12 mesi, eccesso oltre la MDE (~0,3%) e presente in
>=3 trimestri su 4.
- ⚠️ **Distinzione metodologica utile** (nata contraddicendo il suggerimento del coordinatore): qui
il vincolo binding NON e' la concentrazione degli episodi (86-87 episodi corti, i primi 8 coprono
solo il 20-25% delle ore) ma la **lunghezza del calendario** (90 giorni). *Ampiezza scarsa* e
*calendario corto* sono due diagnosi diverse e si curano in modi diversi: piu' episodi vs piu' tempo.
### 11 — VRP-QUOTE-VERE (r0822_vrp_real_quotes.py, 60 trial + 9 ancore d'ingresso)
🚨 **IL RISULTATO DI PRODUZIONE — `collect_chain.py` interroga `{"currency": "BTC"|"ETH"}`, che su
Deribit restituisce le sole opzioni INVERSE (regolate in BTC/ETH). Il conto e' in USDC** (esegue
`BTC_USDC-PERPETUAL`). Esiste una famiglia **USDC-lineare** con lotto minimo **10x piu' piccolo**:
| famiglia | min lotto | ~$ per lotto |
|---|---|---|
| BTC inverse | 0.1 | ~$7.700 |
| **BTC_USDC** | **0.01** | ~$780 |
| ETH inverse | 1.0 | ~$2.500 |
| **ETH_USDC** | **0.1** | ~$250 |
Quindi il muro pubblicato *"BTC opzioni min 0.1 = $6.210/lotto -> FUORI a $3.000"* (congelato in
`tests/test_vrp_profit_take.py`) e' **misurato sulla famiglia che il conto non puo' marginare**.
**3ª occorrenza dello schema `fee_watch` (21/08): un controllo/collettore puntato su uno strumento
diverso da quello che si trada.**
⚠️ **MA la verifica indipendente del coordinatore cambia la conclusione, e in meglio:** contando
l'open interest famiglia per famiglia (`get_book_summary_by_currency`, misura mia, non dell'agente)
| famiglia | strumenti | con OI>=100 |
|---|---|---|
| BTC inverse | 1038 | **415** |
| ETH inverse | 932 | **548** |
| **BTC_USDC** | 686 | **5** |
| **ETH_USDC** | 660 | **119** |
-> **BTC_USDC e' praticamente morto** (5 strumenti liquidi su 686). **Il muro sul BTC RESTA, ma per
la ragione giusta e meglio misurata: non la taglia del lotto, la LIQUIDITA'.** ETH_USDC (119
strumenti, ~$250/lotto) e' l'unica gamba che varrebbe la pena raccogliere.
📌 Sottoprodotto fuori perimetro: esiste un universo opzioni USDC piu' liquido di BTC_USDC —
SOL_USDC 341, XRP_USDC 250, HYPE_USDC 172, AVAX_USDC 146 strumenti con OI>=100.
- **Il campione misura la strategia mentre STA FERMA**: 0/19 settimane passano il gate IV-rank>0.30,
DVOL alla mediana del 7°/11° percentile storico, sottostante +25%/+44%.
-**Replica indipendente del f del 30/07 su campione piu' lungo: f = 0,714 pooled** (IC95
[0,690, 0,779], **0/19 osservazioni >= 1,0**). Attraversare lo spread costa **~10% del credito**.
- ⚠️ **Correzione a un numero pubblicato:** il forfait fee del sleeve sovrastima il listino vero di
**1,44x (BTC) / 1,80x (ETH)**, non di "~2x". Il segno (conservativo) regge, la taglia no.
- ⚠️ **Rischio sul MINIMO, non sulle chiusure:** peggior mark infra-settimana mediana 6,4% del
rischio, **minimo 91,0%**; fra le settimane chiuse **in utile**, minimo **56,9%**.
- Gate: `implausible_sharpe` **FLAGGED** su entrambi (0 perdite su 10 -> regola del tre: tasso vero
fino al 30%, su un payoff che perde 7,4x il credito); `deflated_sharpe` **non calcolabile** (T=10)
e l'agente **si e' rifiutato di fabbricare una griglia giornaliera al 94% di zeri** per superare
il T>=30; banda d'ancora: canonico all'89° pctl, **mediana onesta 1,45**, banda che include il
negativo. Il titolo annualizzato (32,58) e' stato **deliberatamente non riportato come risultato**.
- ⚠️ L'agente ha **refutato in corsa una propria conclusione**: spostare l'ora d'ingresso cambia
QUALI STRIKE corrispondono al delta obiettivo -> non e' lo stesso trade un'ora dopo, e' **un'altra
struttura**; la media BTC **cambia segno** fra le ancore (1,35% -> +11,22%).
### 7 — TERM-STRUCTURE (r0822_term_structure.py, 312 trial dichiarati)
🚨 **MURO DEL DATO, e vale per ogni filone che usa la catena ereditata: prima del 2026-06-09
`bite_archive` raccoglieva UNA SOLA SCADENZA per giro** (mediana 1, max 1) -> **la curva non
esiste**. La finestra utilizzabile non e' "3,7 mesi": e' **74 giorni**, SE(Sharpe) ~ 2,2.
**Ricostruzione certificata contro due riferimenti indipendenti:** vs il logger `vol_term_*`
corr **0,992-0,997** (scarto 0,00-0,30 pt-vol); vs DVOL corr 0,94 con bias 2,2/2,8 pt-vol = il
segno atteso (DVOL integra lo smile).
- **Il test piu' informativo e' quello di RISOLUZIONE:** l'unica correlazione col futuro che sembrava
qualcosa (h=5g: +0,29/+0,32, 94°/98° pctl vs null a blocchi) **cambia SEGNO togliendo l'ultima
settimana** (0,22/0,17). Sette giorni su 70. Nella regressione controllata per il ritorno
passato il t di Newey-West sta **sotto 1,0 a ogni orizzonte**.
- **Il confronto che uccide il candidato: il buy&hold sulla stessa finestra.** Mediana appaiata su
24 ancore vs B&H = **+0,14 (14/24) su BTC** e **0,65 (1/24) su ETH**. La banda d'ancora
`gate_pass=True` in isolamento e' **inutile: il B&H passa lo stesso gate**.
- Confound proprio del filone, misurato: corr(pendenza, RV **passata**) 0,50/0,57 contro RV
**futura** 0,39/0,38 -> la pendenza e' il premio di vol con la gamba realizzata sostituita da
una implicita = la variabile di `dvol_directional` (gia' HEDGE, earns_slot=False su 5 anni).
- **`deflated_sharpe` NON girato, e la motivazione e' il risultato:** su 74 osservazioni
l'incertezza di CAMPIONE domina di un ordine di grandezza quella da SELEZIONE — deflazionare 312
trial darebbe un numero preciso e privo di senso.
- 📌 **LEAD stretto e pre-registrato** (l'unico numero non banale: corr(pendenza, RV futura) 0,39):
la term structure come previsore di **VOL, non di ritorni**. Decisione **2027-02-01**, si riapre
solo se (a) corr <= 0,30 su entrambi gli asset **E** (b) batte il **DVOL a tenore singolo** in R²
incrementale **E** (c) supera il null del de-levering. **Se (b) fallisce, il filone si chiude.**
- ⚠️ **Tre bug propri catturati in sessione**, tutti del tipo che passa i test pigri: il null del
de-levering cercava il **primo** k salendo invece del **piu' grande**; la RV futura aveva **uno
shift di troppo**; l'ATM vettorializzato e' stato verificato contro il prototipo (23.544/23.545
righe identiche).
### 6 — OI-PIN (r0822_oi_pin.py, 516 trial dichiarati, 73 scadenze/asset)
**Potenza dichiarata PRIMA di guardare** (e questa e' la ragione per cui il verdetto e' credibile):
MDE a hte 12 = **0,46%/trade**; effetto max-pain osservato **+0,273% = SOTTO il proprio MDE**.
📌 **Il null che decide: il placebo senza opzioni.** La cella migliore fa Sharpe 5,59 e batte gli
strike casuali (6/72 contro ~2 attesi), ma **0/24 contro la media a 7 giorni dello spot**, con cui
condivide il **68-77% del segno**. Non e' pinning verso uno strike: e' reversione verso il centro
recente, e l'OI e' solo uno stimatore rumoroso di quel centro.
- DSR **0,290** (288 trial): lo **Sharpe-null atteso e' 6,79 > 5,59 osservato** — su 75 giorni il
massimo del rumore batte il risultato. `implausible_sharpe` scatta. I **5 giorni migliori valgono
il 61% del log-equity**.
- ⚠️ `marginal_vs_tp01` **non puo' dare ADDS per costruzione** su questa finestra: `multicut` vuole
>=2 tagli annuali da >=120g e `has_insample_edge` e' True *per default* perche' non esiste
pre-2025. Un NEUTRAL qui non e' un giudizio.
- Haircut a $600: **+0,000** (si esegue sul perp) — 2ª conferma che l'eseguibilita' non e' piu' il
vincolo binding di questa ondata.
- ⚠️ **REGOLA NUOVA (difetto proprio, trovato e corretto in sessione): un placebo si controlla per
BILANCIAMENTO DEL SEGNO prima di usarlo.** Il placebo `jit` concordava in segno con la propria
regola solo nel **14%** dei casi (5% per `jit_gex`): non era un null, era **la strategia
invertita**, e usarlo fabbricava 3 celle "significative" e un contrasto spettacolare (8,6 di
Sharpe). Un null pulito sta a ~0,50; sotto ~0,35 il suo delta va letto come **~2x il segnale**.
### 8 — VOL-SIZE (r0822_vol_size.py, 28 trial + 23 ancore)
✅ Sanity **bit-exact**: ricomposizione trade-by-trade `max|diff| = 0.0` contro `run_asset` e contro
`sleeves._skyhook_returns()`.
🚨 **DIFETTO DI METODO GENERALE, trovato dall'agente nella propria prima stesura e MISURATO invece
che cancellato: su uno sleeve a equity a GRADINO, un overlay giornaliero e' NON CAUSALE.** Tutto il
P&L di un trade SKH01 e' contabilizzato il giorno di **CHIUSURA**, fino a **3,83 giorni dopo
l'ingresso**; moltiplicare la serie giornaliera per `L_t` (che usa solo dati <= t1) **passa
qualunque controllo di causalita' scritto sulla serie giornaliera** — il look-ahead sta nella
CONTABILITA', non nella formula. Costo misurato: **+0,04 di Sharpe hold-out fantasma**.
**REGOLA: un overlay si applica alla data d'INGRESSO, non a quella in cui il P&L viene contabilizzato.**
🚨 **REGOLA 2 — il null del de-levering e' DEGENERE quando la variante e' una ri-scalatura**
(`sh(k*base) === sh(base)`): il test che serve non e' sul DD ma **ISO-PESO sullo Sharpe**, altrimenti
si sta solo misurando di quanto e' cambiato il peso di uno sleeve. Qui era decisivo: quasi ogni
variante alzava il peso effettivo di SKH fino a 0,375, e **"alzare SKH01" e' gia' stato misurato e
respinto il 26/07**.
📌 **Il meccanismo NON e' quello ipotizzato:** scomponendo la vol trailing di uno sleeve all'88% di
zeri nei due canali, il guadagno FULL viene dalla **FREQUENZA** (il solo filtro di attivita' fa
+0,051 su +0,061) e **non dalla magnitudine** (+0,003). Non e' controllo del rischio: e' un
**filtro di frequenza**, e va chiamato cosi'.
- Baseline del libro, stima onesta (mediana banda): **1,626 FULL / 1,037 HOLD / DD 10,4%** — la
fortuna d'ancora del libro vale **+0,196 FULL / +0,448 HOLD**.
- Cella congelata del LEAD (`VTL tv20 w90`): size fissata **all'ingresso** =
`clip(0,20 / rv90(t1), 0, 3)`. ISO dShFULL **+0,070 (23/23 ancore)**, dShHOLD +0,101 (19/23),
**8/8 anni positivi**, **null di permutazione superato in ENTRAMBE le terne di ancore provate,
p <~ 0,03** (mediana del null 0,03/0,05: riassegnare a caso la stessa distribuzione di size
**danneggia**). ⚠️ **Autocorrezione dell'agente, da rispettare:** quel null gira su **3 ancore
delle 23** per costo, e la TAGLIA dell'effetto varia di **3x** fra due terne diverse della
stessa banda (+0,033 vs +0,111 sulla stessa cella) -> **i p-value non si citano a tre decimali**:
il numero da mettere a verbale e' il **segno**. Il resto del report e' su 23 ancore piene.
- ⚠️ `DSR = 1,000` dichiarato **VACUO, non PASS**: lo passa anche il baseline — su una famiglia di
perturbazioni della stessa strategia il deflated-Sharpe non ha potenza. Onesta' rara.
- ⚠️ Punto piu' fragile, dichiarato: l'asse della finestra e' un **picco, non un plateau**
(w30 nettamente negativo, w180 ~0).
- **Gate pre-registrato — e non e' un forward** (con SE(Sharpe)~1,4 sei mesi non possono misurare
0,07): e' un **secondo trasferimento**, la famiglia IV su SKH01_V1, dove il meccanismo dichiarato
prevede un effetto **minore** (lo stop e' gia' in ATR). **Se invece l'effetto e' uguale, la
spiegazione e' sbagliata anche se il numero regge.** Entro **2026-12-22**, prima di qualunque
modifica a peso/config di SKH01. Deploy solo se ISO dShFULL > 0 in >=20/23 ancore E
`weights_tilt_null` passa. **Book, pesi, cron, config INVARIATI.**
### XSR-REPRO (r0822_xsr_repro.py) — filone di INTEGRITA', non di alpha
**Il numero pubblicato e' spiegato e NON era sbagliato.** 1.82 viene da una **terza** lente
(`r0725_statarb_demean_skeptic.ret_from_pos`, divisore **fisso 50**), non da quella che ha girato i
gate (`basket_from_positions`, divisore variabile). Sullo stato del dato del 25/07 ricostruito:
**11 numeri pubblicati su 12 riprodotti** (Sharpe netta 1.8164, lorda 2.6956, DD 2.585%, lag
1.82/1.19/0.81/0.50, Sharpe 2024 1.0297 / 2025 1.9752 / 2026 3.1078).
📌 **Ma il numero di TITOLO e i numeri di GATE non sono mai stati la stessa serie:** la lente dei
gate da' **1.79** — ed e' esattamente il "Sharpe 1.79" che il docstring dello scettico gia' citava.
DSR ri-calcolato oggi sulla lente giusta: **0.983 PASS** (pubblicato 0.985) -> **il gate DSR regge**.
**L'ipotesi "il cron riscrive la storia" e' FALSIFICATA** da due prove indipendenti: (a) il
registro del cron su 54 simboli, 25/07 vs 22/08, mostra crescita di **esattamente 28 barre per
tutti** con `start_reale` invariato; (b) lo Sharpe degli **anni chiusi** si riproduce **al quarto
decimale** attraverso quattro settimane di riscritture. **Cambia una sola barra: l'ultima.**
🚨 **IL DIFETTO CHE CONTA — `paper_xsr` registra ~41 minuti di mercato al giorno.**
`fetch_hyperliquid` gira alle 00:30 con `END = oggi` e scrive la barra del **giorno in corso**;
`advance()` processa le barre con `ts > last_ts` e **porta `last_ts` su quella parziale** -> le 23
ore e mezza restanti di **ogni** giorno non entrano in nessun rendimento registrato.
**Misurato** (28 barre appaiate contro il replay): **1/28 identiche · corr 0,045 · vol registrata
0,46% contro 2,74% ricalcolata** (la strategia e' progettata a 2,3%). Rapporto di varianza 0,0286
-> ~41 min/giorno; stima indipendente dal volume: ~69 min.
**Verifica del coordinatore, indipendente:** l'ultima barra di `hl_btc_1d` ha volume **1.274**
contro **66.926** e **102.198** dei due giorni precedenti.
⚠️ **`monitor_health` lo dichiara OK e non puo' vederlo:** la serie e' fresca e senza buchi.
**Una serie fresca, completa e SBAGLIATA passa ogni controllo di freschezza.**
⚠️ Stessa **forma** di codice in `paper_statarb` (gate 27/09), che per giunta ha un docstring
"barre 1d chiuse" mentre consuma `altlib.get(...,"1d") -> resample_tf`, che **non** scarta il giorno
in corso. Segnalato come forma, non misurato -> **audit dedicato in corso su tutti e 6 i monitor**.
⚠️ **Haircut, la seconda gamba del gate 23/10, e' piu' fragile della prima:** ticket per gamba
**mediano $3,33 / medio $5,98**, **63% degli ordini sotto $5**; il pubblicato **$14,41 non ha alcuno
script committato che lo riproduca** ed e' **~2,4x ottimista**. A min-order $10 la guardia
formalmente passa ma si esegue **un ordine su cinque** — e il criterio pre-registrato non lo guarda.
📌 **NUMERO ONESTO DA CITARE:** lente dei gate, sole barre chiuse -> **1.79** (finestra di scoperta)
/ **1.63** (a oggi). **Va sempre citata la coppia (lente, ultima barra chiusa)**, mai il numero nudo.
📌 **GATE 23/10 COMPROMESSO: PARZIALMENTE** — ammissione NO (storia chiusa stabile, DSR regge),
**forward SI** (metrica primaria su una serie scorrelata dalla realta'), haircut SI (parametro senza
script e ~2,4x ottimista). **La finestra forward non e' recuperabile a posteriori**; riparare
`advance()` la **azzera**. Scelta fra gate letto su strumento rotto e gate rimandato con contatore
nuovo: **va decisa PRIMA del 23/10, non quel giorno.**
### 5 — SKEW (r0822_skew.py, 37 trial dichiarati)
- **Q1 (skew come segnale direzionale): SCARTATO, e non per mancanza di potenza — la potenza c'e' e
falsifica.** Il **prezzo precede lo skew** con t da **3,13 a 9,39 su 8/8 test** e su entrambi gli
asset; in avanti il max |t| su 16 test e' **2,35** contro **2,08** atteso dal rumore, e non replica
sul secondo asset. L'unica cella con lead apparente crolla togliendo **4 giorni di rally su 24**.
DSR **0,163 FAIL**; IC95 block-bootstrap sullo Sharpe: **[2,90, +5,86]** (ampiezza 8,76).
- **Q2 (skew come gate di de-risk): SCARTATO (non misurabile)** — nella finestra TP01 e' attivo
**5 giorni su 75** con maxDD **0,14%**: non c'e' sinistro. Unica cosa leggibile: **5ª firma di
ridondanza col trend** (il gate spegne 16 giorni in cui TP01 era gia' flat, **16/16**).
- 📌 **Q3 — LEAD, ed e' il risultato della sessione. Il f=0,73 di VRP01 scomposto** (attribuzione
esatta in log, i fattori si sommano):
| causa | fattore | quota del difetto |
|---|---|---|
| **struttura a termine** | x0,869 | **42,3%** |
| spread denaro-lettera | x0,904 | 30,5% |
| **skew** | x0,920 | **25,0%** |
| fit (controllo) | x0,992 | 2,3% |
**La riga che conta: il sleeve prezza un'opzione a 7 GIORNI col DVOL a 30 GIORNI**, che nel **90%**
delle ore sta ~3 punti di vol **sopra** l'ATM a 7 giorni -> sovrapprezza **ENTRAMBE** le gambe.
Il "+0,8pp sulla gamba corta" pubblicato il 30/07 — che faceva sembrare **corretta** la gamba
venduta — e' la **cancellazione di due errori da ~3pp** (2,97 di termine, +2,79 di skew).
⚠️ **E il progetto aveva gia' codificato la regola il 03/07** ("riprezzare term-structure-consistent
prima di credere a un numero da struttura BS-flat") **e non l'ha applicata alla misura del 30/07**.
📌 **Verso, e non e' quello che sembra:** `f_term` passa da **0,83** (IV-rank basso) a **0,93**
(alto) e supera **1,0 in backwardation**, mentre `f_skew` resta piatto (0,91-0,93) -> **la parte
maggiore del difetto si annulla proprio dove il gate IV-rank fa tradare il sleeve**, quindi
f=0,73 e' plausibilmente **CONSERVATIVO li'**. Non misurato: **0/22** ingressi passano il gate, e
l'unico episodio ad alta vol del campione e' un **rally**, non un crash. In un crash i due pezzi
vanno in **direzioni contrarie** e il netto e' ignoto. **`VRP_CFG["f"]` NON cambiato.**
Gate pre-registrato: rimisurare a **>=6 ingressi settimanali per asset con IV-rank>0,30**
(il collettore li accumula da solo), revisione comunque **2027-02-22**.
- ✅ Confound di modello **ESCLUSO e misurato**: `f_markfit` = **0,992** (la mark IV di Deribit
riprezza i propri mid entro l'1%) -> RR/BF sono un fatto di **prezzo**, non l'output del fit.
-**Controllo positivo cablato nello script:** con l'ancora **assunta** a :30 invece del `ts_max`
osservato compare un **falso lead** a +15m (0,102 contro 0,031) — *"e' l'errore che avrei
pubblicato senza quel controllo"*.
- ✅ Smile vettorizzato (512s -> 2,0s) verificato **bit-exact** contro il ciclo lento su 21.244 celle.
-**Convergenza indipendente** con l'agente TERM-STRUCTURE: **75 giorni utili** (l'altro trovava 74).