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

3524 lines
259 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 RIDIMENSIONATO** — gate 22/12 **gia' fallito oggi** | 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** |
| — | **HL-EXEC** (audit di fatto) | **3 falsificazioni misurate** | il pavimento vero e' **$10 (non $5)** e il taker **4,50 bps (non 5,0)** — ma il *"XS01 serve ~$20k"* e' **refutato del tutto** (nessuna soglia da min-order), il *"XSR01 ~$5.000"* e' **conservativo di 1,7x** (vero ~$3.000), e lo **slippage "rischio #1" di XSR01 e' refutato** con margine **21x** |
| — | **SLIP-AUDIT** (audit di fatto) | **SCARTATO** = nessun costo nascosto a questa taglia | i backtest a 10 bps RT restano **conservativi di ~1,5 bps/lato**; nessuna evidenza di impatto sopravvive al null (p=0,274; estremi avversi **1/18 contro 4,7 attesi**). **Ma la misura ha una data di scadenza** |
| — | **SCETTICO su GROWTH-POLICY** | **REGGE** (condizione bloccante DECADUTA) | la lente wick accoppiata **non cambia il gradino**: e' un ricarico moltiplicativo **costante ~3,5%** sul maxDD, non un'amplificazione (Δ/k **cala**). Ma su una regola a **UN giorno** close-only e' **esattamente cieca** (rapporto INF) -> la lezione 25/07 e' vera e **non si trasferisce** |
| 13 | BASIS-CALENDAR | **SCARTATO** + **1 dataset nuovo** | il basis dei futures datati **E' il funding del perp quotato diversamente** (7,33% contro 6,48%/anno): non e' un quarto lato del filone funding, e' lo stesso lato. Premio incassabile **+0,85%/anno con IC95 che contiene lo zero** |
| — | **MONITOR-AUDIT** (produzione) | 🚨 **4 monitor su 6 rotti**, ma **la finestra NON e' persa** | `paper_statarb` registra **4 minuti al giorno** e il suo gate del **27/09 si ribalta su 2 criteri su 3** (Sharpe registrato **+1,96** contro **2,02** ricostruito). **La riparazione e' "riparare + RIGENERARE", non "riparare e azzerare": nessuna data di gate si sposta** |
| 1 | PROP-ALLOC | **LEAD** (gate: XS01 fuori dalla sua finestra) + **1 ipotesi falsificata** | riallocare *per la barriera* invece che *per lo Sharpe* vale **+0,016 di J (il 4%)**: e' cio' che il conto del gambler's ruin prevedeva. Cio' che vale e' **mettere XS01 su un conto funded (+0,400)** — ma **tutto il vantaggio poggia sul drift di XS01 misurato sulla sua finestra di scoperta** |
## 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** |
-> conteggio corretto come FATTO, **ma l'inferenza che ne ho tratto io ("BTC_USDC e' praticamente
morto") e' SBAGLIATA**: vedi filone 14 — su queste famiglie l'OI e la negoziabilita' sono
**anti-correlati**, e BTC_USDC ha il **93%** dei put quotati a due lati. **Il muro sul BTC resta
per il PREZZO del lotto ($772 su un conto da $635), non per la liquidita'.**
ETH_USDC resta la gamba giusta su cui puntare, ma per **spread e prezzo del lotto** (filone 14),
non per il conteggio di OI.
**Sottoprodotto RITIRATO:** avevo scritto che *"esiste un universo opzioni USDC piu' liquido di
BTC_USDC (SOL 341, XRP 250, HYPE 172, AVAX 146 con OI>=100)"*. **Falso nel senso che serve:** quelle
famiglie hanno piu' posizioni aperte e **meno quote** — SOL_USDC ha il **9%** dei put quotati a due
lati contro il **93%** di BTC_USDC, e il suo miglior bid sta a **un tick**.
- **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()`.
**RITIRATO DALLO SCETTICO (vedi in fondo): il difetto qui sotto NON ESISTE su questo codice.**
Lasciato a verbale perche' la regola era stata pubblicata e va vista insieme alla sua smentita.
~~🚨 **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.**~~ **<- RITIRATA, vedi sotto**
🚨 **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).
### HL-EXEC (r0822_hl_exec.py, 132 simulazioni, 0 celle di segnale = 0 selezione)
✅ Identita' con la produzione **prima** di ogni delta: `sim_libro` == `paper_xsr._step` a
**max|diff| 5,4e-20**; XS01 == `_xsec_returns()` a **max|diff| 0,0**.
**Verifica MAINNET** (il progetto e' nato da un feed testnet): 51/51 asset, deviazione mediana
2,21% su feed vecchio 17h contro un movimento tipico del 2,81%; cross-check su terzo venue
BTC Deribit $77.997 vs HL $77.339 = 0,84%.
**Parametri assunti -> misurati:** min order **$5 -> $10** (docs + **3.827 livelli a un ordine:
minimo $10,63, p01 $12,02, 0,0% sotto $10**); taker **5,0 -> 4,50 bps** (due fonti indipendenti
coincidono); slippage **non modellato -> 1/2 spread 0,7 bps (19 major) / 1,0 bps (coda), max 4,5**;
tier VIP: a $600-20k **sempre tier base**.
📌 **XS01: la soglia dei $20k non esiste.** Origine del numero pubblicato: *"rumore di
arrotondamento"*, stima a occhio del diario 19/06. Misurato: haircut ~0 gia' a **$200-600 allocati**;
a $600 lo Sharpe passa **1,33 -> 1,30**. **E il meccanismo spiega perche':** gli ordini sono **due
popolazioni** — il ribilanciamento del segnale (ogni 10g) e' il **13% degli ordini ma il 75% del
nozionale**, ticket mediano $13,65 -> passa sempre; la deriva del vol-target giornaliera e' l'**87%
degli ordini ma il 25% del nozionale**, ticket $0,64 -> il pavimento la taglia, **ed e' gratis**.
*Contare gli ORDINI da' 16% e sembra un disastro; contare il NOZIONALE da' 75% e spiega perche' lo
Sharpe non si muove.* (Convergenza indipendente con XS-LITE, che era arrivato allo stesso meccanismo
con numeri diversi.)
**Fortuna di fase girata anche qui** (l'haircut e' un Δ): 10 fasi, mediana delle differenze
appaiate **+0,007**, banda [0,060, +0,061], **0/10 fasi con danno > 0,10**.
📌 **XSR01: soglia vera ~$3.000** (non $5.000 — sbagliata nella direzione **sicura**). Banda sui
pavimenti $8/$10/$12: ROTTO <=$1.000, INDECIDIBILE $1.500-2.000, **ok >=$3.000**.
📌 **Slippage refutato come rischio #1** al livello di liquidita' odierno: lo Sharpe scende sotto
1,0 a ~20 bps/gamba = **~16 bps di slippage = 21x quello misurato**. ⚠️ L'agente dichiara il limite:
3 snapshot = **172 secondi di oggi**, una fotografia, non tre osservazioni. **E' il MARGINE (21x) che
regge la conclusione, non il livello.**
🚨 **Due conseguenze che l'operatore deve vedere:**
1. **Il "$20k" di XS01 e il "$20k" della DECISIONE DI VENUE (26/07) sono due cose diverse che
CLAUDE.md ha conflato.** Quello di XS01 **cade**; **quello di venue REGGE intatto** — e' una
decisione dell'operatore su un altro asse (la rovina da fallimento exchange), non sull'eseguibilita'.
XS01 resta fuori dal live **per la decisione di venue, non per taglia**.
2. **La gamba di eseguibilita' del gate 2026-10-23 e' tarata su un vincolo che a $5.000 non morde**
(haircut li' 7%...+2%): *una condizione pre-registrata che non puo' fallire non e' una
condizione*. L'agente **non ha anticipato il gate**: la soglia Sharpe>=1,0 resta al 23/10.
⚠️ **Terza spiegazione dell'1,82, complementare alle altre due:** `r0725_statarb_basket_gate`
addebita *"2 gambe per coppia"* = 50 alt + **50 gambe BTC fantasma**, ma il demeaning **annulla
algebricamente** la gamba BTC (`sum(w)=0`) — che e' la ragione stessa per cui XSR01 esiste.
*L'intuizione del demeaning era stata applicata all'AMPIEZZA e non ai COSTI.*
📌 **Quadro conciliato delle tre lenti** (i due agenti concordano sul fatto, non sull'attribuzione
del singolo decimale): titolo `demean_skeptic` **1,82** · gate `basket_gate` **1,75-1,79** (fee
raddoppiate su una gamba inesistente) · monitor `paper_xsr` **2,21**. **La lente che ha girato i
gate e' quella PESSIMISTICA** -> il **DSR 0,983 PASS e' stato calcolato su una serie conservativa**.
### SLIP-AUDIT (r0822_slip_audit.py, 18 fill reali, ~14 varianti dichiarate)
**Fee sul NASTRO: 5,00 bps/lato prima del 2026-08-01, 3,50 dopo (16/16 esatti).** Il taglio
Deribit e' visibile nei fill reali -> conferma **indipendente** di `fee_watch` (che legge il tier
dichiarato, non le esecuzioni) e della regola pre-registrata del 26/07 (<=5 bps -> non si tocca
nulla). **Il listino si e' mosso nel verso buono.**
- Slippage d'esecuzione (riferimento 5m): mediana **4,65 bps**, IC95 [34,6; +20,6]; statistica
normalizzata **+1,54 bps** [1,30; +4,47]. Conversione con la curva pubblicata: **dSharpe 0,026 /
dCAGR 0,35 pp**.
- ⚠️ **Autocorrezione della propria potenza:** il null **empirico** e' **1,43x piu' largo**
dell'uniforme assunto -> MDE vera **7,2 bps**, non 5,0. **Con n=18 nessuna via statistica risolve
1,5 bps** — dichiarato invece di spacciare l'IC per una risposta.
📌 **Esperimento naturale, il caso peggiore del campione:** il fill del **sabato 18/07** (ETH $74) e'
stato il **21,9% del volume della sua barra 5m**, e quella barra ha avuto un range di **1,08 bps**,
col nostro print a meta' (q=0,48). *Un ordine che prende un quinto del nastro e lascia il prezzo
entro 1 bps* e' la prova diretta che a questa taglia il libro **non cammina il book**.
🚨 **La misura ha una DATA DI SCADENZA, e va scritta accanto al numero:** la partecipazione scala
lineare -> quel 22% diventa **172% di una barra 5m a $5.000** e **687% a $20.000**. **Non si
estrapola: va rifatta a ogni salto di taglia.** E' il muro di eseguibilita' gia' noto ma sull'asse
dell'**attrito** invece che del min-order. ⚠️ E il caso peggiore cade di **sabato**, dove TP01 fa il
**38%** del proprio gross.
⚠️ **Due difetti del dato, trovati PRIMA di misurare (e ciascuno avrebbe prodotto un numero
plausibile e falso):**
(a) `ts_utc` in `book_executions.jsonl` **non e' l'ora del fill** ma l'etichetta dell'ultima barra
del feed (**18/18 dicono `00:00:00`**; il fill #1 e' etichettato 08/07 ed e' stato eseguito il
**14/07** = impronta del feed-freeze gia' noto). L'ora vera esiste **solo** in `logs/cron_book.log`:
senza recuperarla, ogni confronto "al prezzo dell'ora del fill" misurerebbe **la mezzanotte**.
(b) Il feed certificato e' il perpetual **INVERSE**, il libro trada il **LINEARE USDC** — **4ª
occorrenza** dello schema `fee_watch`: misurare lo slippage sul feed certificato avrebbe misurato
**la base**, non lo slippage (base misurata: BTC 0,03 bps, ETH 0,27).
⚠️ Con n=18 **la media in bps e' inservibile** — un solo giorno (19/08, ETH +14% in 6h) la ribalta:
si cita la **mediana**. E `REF-A` (50 bps) **non e' slippage**: e' la differenza di FASE fra l'ora
del cron e la chiusura giornaliera, gia' misurata bene il 26/07 su 24 ancore appaiate.
### SCETTICO su GROWTH-POLICY (r0822_leverage_skeptic.py, ~175 celle, griglia ridotta a k<=5x e dichiarato)
**Replica superata TRE volte** prima di ogni numero nuovo: marginali del gap 25/07 (p50 0,16 /
p90 1,03 / p99 2,71 contro 0,17 / 1,03 / 2,70), meccanismo del decile (~3x, pubblicato ~3x),
e €500/mese -> **14,7a / P<=20a 99%** al numero pubblicato.
**Controllo positivo superato:** una lente *indipendente* (gap rimescolato) sovrastima il maxDD di
+0,13pp su +0,45 e i breach daily-loss di **1,5-2,4x** — stesso verso e taglia del finding 25/07
("2,0-2,9x"). **La macchineria ha potenza, quindi il suo "nessuna differenza" vale.**
✅ Risoluzione MC dichiarata: **0,01%/a** nella regione eseguibile, 0,05pp sul Δ appaiato di maxDD ->
le differenze riportate (0,45-0,76pp) sono **9-15x la risoluzione**.
📌 **RISPOSTA ALLA DOMANDA: NO, l'effetto e' SOTTO-proporzionale.** Il rapporto fra le due maxDD e'
**piatto a 1,025-1,037** su tutta la griglia e Δ/k **cala** (0,478% -> 0,217%). **Meccanismo: il
maxDD e' una statistica MULTI-GIORNO, il wick e' un fatto di UN giorno.** Tempo al bersaglio
**identico** fra le due lenti; guadagno appaiato 1,00x->1,50x = **2,88 anni** in entrambe.
Nessuna liquidazione a nessun k<=5x sotto nessuna lente (servirebbe **12,3x** sul peggior giorno vissuto).
🚨 **IL RISULTATO TRASFERIBILE — la lezione del 25/07 e' vera e NON si trasferisce.** Su una regola a
**UN giorno** l'accoppiamento cambia tutto: a soglia daily-loss 5% e k=1,00-1,25 close-only conta
**0,00 breach/anno** dove il vero ne conta **0,40 e 1,21** (`acc./close = INF`, cecita' esatta); a
soglia 3% e k=1, **0,40 contro 2,28 = 5,7x**. Su una statistica **multi-giorno** lo stesso difetto
vale **3,5%**. ⚠️ **Non assolve close-only in generale: sul canale PROP/FUNDED, dove il vincolo
binding E' una regola di daily-loss per-conto, la lente accoppiata resta OBBLIGATORIA.**
⚠️ **CORREZIONE a una spiegazione pubblicata (il fatto regge, la spiegazione no):** il **26,8%** di
giorni con `m == R` **non** sono "il giorno brutto che chiude sul minimo" — stanno nei decili
**CENTRALI** (56-88%), i giorni in cui il libro e' **flat**. Nel decile peggiore chiude sul minimo
il **4%**. E un giorno di crash **chiude quasi sul proprio minimo** (gap medio nel 5% peggiore
0,62% contro 1,75% nel 5% migliore) -> **la lente accoppiata non peggiora lo stress di coda.**
📌 **Il gradino 1,00->1,50 resta NON AUTORIZZATO** — cade **una** delle tre riserve, non le tre.
Restano: drift stimato su 7,4 anni, e coda assente dal dataset (un giorno 10%/anno porta k* a 2x).
Unica colonna a favore della prudenza: **P(sfondare una soglia FISSA) e' amplificata piu' del maxDD**
(1,26x a k=1) perche' vicino alla soglia la densita' e' fitta — **e' quella la colonna con cui si
costruisce una frontiera iso-rischio, non il maxDD mediano**.
📌 **ATTACCO 2 — il 12,14% di TP01 e' VERO, ma il meccanismo dichiarato e' META', e la strada
implicita e' REFUTATA.** Scomposizione esatta, verificata sullo sleeve di **produzione**:
`20,00% x 0,682 (dentro la gamba) x 0,890 (diversificazione BTC/ETH, corr 0,59) = 12,14%`.
E il x0,682 sono **due meta' quasi uguali**: flat nel **44,3%** delle barre (x0,746) **e** convinzione
**parziale** quando non e' flat (`tsmom_blend` = media di 3 segni: 1/3 o 2/3) (x0,789).
**"TP01 e' long-flat" spiega circa META'** — e la differenza non e' accademica: essendo
*convinzione*, **alzare `target_vol` aumenta la size proprio nei giorni in cui il segnale e' piu'
debole**. Il terzo fattore (x0,89) **non e' un difetto d'etichetta: e' diversificazione**, ed e'
cio' che si vuole.
⚠️ **E TP01 e' un caso particolare, non la regola: XS01 dichiara lo stesso 20% e ne realizza 20,59%.**
🚨 **`target_vol` e `k` NON sono la stessa leva** (e non per il leverage cap, che non morde: 0-1% di
barre al cap fino a tv=60%): **`target_vol` scala il 75% del libro e lascia fermo il 25%** -> a
tv=30% il libro non e' piu' 75/25 ma **82/18**, a 60% **90/10**. E' simultaneamente una leva **e un
tilt di pesi**, e il tilt **FALLISCE `weights_tilt_null`** (gate_pass=False, delta_insample 0,0815
a tv=30% / 0,2187 a tv=60%). A pari scala 1,50 il libro via `target_vol` fa Sharpe **1,72** contro
**1,82** via k. -> **la strada pulita per un puro cambio di SCALA e' il cap di config, non il target_vol.**
**Cosa cambia dei numeri pubblicati: NIENTE di misurato** — ogni Sharpe/maxDD/muro/traiettoria e'
calcolato sulla **serie realizzata**; `target_vol` non compare in nessuna formula di rischio a valle.
**Ipotesi dell'agente refutata dal suo stesso numero:** i contributi di rischio sono **73/27**
contro pesi 75/25. **Cio' che resta:** sbaglia chi legge l'**etichetta**, non chi legge i **pesi**
un lettore che prendesse "20%" per buono attribuirebbe a TP01 l'**89%** del rischio invece del
**73%**, cioe' sbaglierebbe di 16 punti proprio la domanda *"quale gamba mi fa male"*.
📌 Il test di guardia `test_leva_massima_da_config_resta_sotto_o_uguale_a_1x` **non protegge "la leva
e' pericolosa"**: protegge la conclusione del 26/07 secondo cui la **liquidation fee 1% di Deribit e'
irrilevante**, che vale interamente perche' a <=1x servirebbe un movimento avverso ~100%. Chi alza il
cap deve **rifare `r0726_fee_sensitivity`**, non aggirare l'assert.
### 13 — BASIS-CALENDAR (r0822_basis_calendar.py, 108 celle dichiarate)
**HA COSTRUITO UN DATASET CHE IL PROGETTO NON AVEVA, e contiene la coda che mancava a CC01.**
Deribit **purga** le liste di strumenti scaduti (`get_instruments?expired=true` ritorna **1** solo
strumento) -> la via ovvia e' chiusa. Ma i nomi dei trimestrali sono deterministici (ultimo venerdi'
di MAR/GIU/SET/DIC 08:00 UTC) e **`get_tradingview_chart_data` serve la storia completa di un
contratto SCADUTO se il nome lo si costruisce a mano**: **30/30 trimestrali 2019Q1-2026Q2 rispondono
ok**. Risultato: **BTC 34 contratti / 240.150 barre orarie (2018-09 -> oggi), ETH 34 / 233.334**,
piu' **64.110 ore** di funding e indice per asset. **Include il deleveraging 2022** — esattamente la
coda che a CC01 mancava per costruzione.
Certificato: barre flat 0,7-1,0% per dte<180g; convergenza a scadenza |ln(F/indice)| mediana 33-47
bps; **cross-check indipendente col forward implicito nella catena opzioni: mediana 0,6 bps**.
Roll gestito **in spazio contratto** (nessuna serie incollata -> nessun salto sul giunto).
📌 **Il risultato: il premio a termine e' REALE ma e' il PREZZO DELLA COPERTURA, non un edge.**
Basis BTC mediana **+6,33%/anno**, contango **84,9% del tempo**, slope positiva 97,4%. Ma implicito
**+7,33%/anno** contro funding realizzato sulle finestre appaiate **+6,48%** -> premio incassabile
**+0,85%/anno, IC95 [1,00, +2,92] che CONTIENE LO ZERO** (ETH +2,55%). A 60-100 giorni (il bucket
meno rumoroso) **+0,30% BTC / +1,70% ETH** contro **~1,4%/anno di costo d'esecuzione**.
**Quindi i futures datati NON sono un quarto lato della domanda funding: sono lo stesso lato quotato
diversamente**, e il filone funding resta chiuso su tre lati senza che ne esista un quarto.
📌 **E questo filone NON e' CC01, misurato:** `implausible_sharpe` **False** — barre in perdita
**49,9%**, maxDD 18,2% -> **la coda e' PRESENTE**. *Li' il rischio era fuori dal campione; qui e'
dentro e l'edge semplicemente non c'e'.* Distinzione che il gate del 26/07 e' stato scritto per fare.
- Cella scelta **in-sample-only**: Sharpe +0,13 / hold 2,44. Distribuzione dei 108 Sharpe: mediana
**5,19**. Con 7,4 anni e vol 4,9% la **SE del rendimento annuo e' 1,79pp: sotto ~3,6pp/anno nulla
e' distinguibile da zero.** Null de-levering **REFUTED** (TP01 a k=0,05 fa DD 0,75% con Sharpe 1,31).
- **Test decisivo del filone:** ritardo d'esecuzione 1h/2h/24h -> Sharpe 0,13/0,13/0,10 -> **non e'
microstruttura da prezzo stantio; non c'e' edge da falsificare.**
- ⚠️ **3ª volta in questa ondata che l'eseguibilita' NON e' il vincolo:** lotti minimi $10 BTC
inverse / **$7,73 BTC USDC** / $1 ETH / $2,42 ETH USDC; servono 4,1x per gamba (~$148 di margine
iniziale a $600).
- ⚠️ **Limite dichiarato e NON appianato:** le due lenti sul premio (hold-to-expiry vs backtest
rollato) **discordano nel SEGNO** restando entro ~1,5 SE l'una dall'altra e dallo zero. *Non si
puo' stabilire il segno di una grandezza da ~1%/anno con 7 anni di dati a vol 5%* — ed e' proprio
questo che rende il filone non deployabile.
- **Riaprirebbe il filone:** il premio a 60-100 giorni **stabilmente sopra ~4%/anno** (2 SE sopra
zero E sopra il costo), cioe' un regime in cui basis e funding **si scollano** (marzo 2020, giugno
2022 — ma per giorni, non per trimestri).
⚠️ **Tre errori propri catturati prima di pubblicare:** (a) il `volume` di
`get_tradingview_chart_data` e' in **valuta base, non USD** -> la prima stesura sbagliava la
liquidita' di ~5 ordini di grandezza; (b) il primo test d'ancora azzerava i *rendimenti* fuori
dall'ora scelta = **un'altra strategia, non un'ancora**; (c) **un gate che stampa `None` va
verificato prima di dichiararlo "non girato"** — stampava le chiavi sbagliate.
✅ Disciplina di rete rispettata: <=2 req/s e **sospensione automatica nella finestra :25-:29** di
`cron_chain` (verificato: si e' sospeso da solo per 264s).
### SCETTICO su VOL-SIZE (r0822_volsize_skeptic.py, 43 valutazioni x 23 ancore)
✅ Replica **bit-exact** prima di ogni attacco: gamba 50/50 vs `sleeves._skyhook_returns()`
**max|diff| = 0,0**; e il titolo riprodotto **esattamente** (+0,070 ISO dShFULL 23/23, +0,101 HOLD).
🚨 **RITIRA UNA REGOLA PUBBLICATA POCHE ORE PRIMA — il difetto di contabilita' NON ESISTE.**
`backtest_signals` fa `equity[i_ent:i_ex+1] = capital`: il P&L e' contabilizzato al giorno
d'**INGRESSO** in **291/293 (99,3%)** dei trade multi-giorno, all'uscita in **4**. Troncando i dati
alla barra d'ingresso e ricalcolando le size da zero: **50/50 identiche, max|diff| = 0,0**. E la
"riparazione" e' un **no-op bit-exact** (max|diff| 6,7e-16, Sharpe identico a 4 decimali).
**Il "+0,04 fantasma" era interamente `[L sulla gamba COMBINATA] [L PER ASSET]`** — due varianti
entrambe causali — **e la variante scartata come "non causale" era la MIGLIORE sull'hold-out
(+0,039)**. *Il costo di una regola derivata da un difetto inesistente e' gia' stato pagato.*
📌 **REGOLA CORRETTA (piu' debole e vera):** *"applicare un overlay alla data d'ingresso"* resta un
buon consiglio **generale**, ma su questo motore le due date **coincidono** — e va verificato con un
troncamento bit-exact **prima** di scartare un ramo, non dedotto dalla forma dell'equity.
🚨 **IL GATE PRE-REGISTRATO AL 22/12/2026 E' GIA' FALLITO OGGI, e nel modo piu' netto.** L'agente
aveva scritto: *"se l'effetto e' UGUALE su V1, la spiegazione e' sbagliata anche se il numero
regge"*. Misurato: |effetto| mediano di famiglia **V1 0,067 contro V2-DD 0,032** — l'inverse-vol
funziona **il DOPPIO dove lo stop e' gia' in ATR**, cioe' esattamente al contrario della previsione,
in **8 celle su 8** con **23/23 ancore positive**. E il test **ha potenza** (su V2-DD la famiglia
arriva a +0,067, quanto il LEAD).
📌 **La spiegazione avversaria e' CONFERMATA e la sua forma minima e' un binario.** `BIN L>=med`
(size **0/1** alla mediana espandente, nessuna magnitudine, 194/406 trade scartati) vale
**+0,080 FULL (20/23) = 115% del LEAD**. Controllo di segno superato: il binario **INVERSO** fa
**0,159 (0/23)**. Canali: **FREQUENZA +0,051 (23/23)** contro **MAGNITUDINE +0,003 (17/23)**.
I trade tenuti hanno net medio **2,03% contro 0,36%** degli scartati.
**Un attacco dello scettico e' FALLITO, e lo dichiara:** l'asse della finestra **non e' un picco**
— l'argmax in-sample-only cade su **w=90 = la cella pubblicata**, corr(IS, HOLD) fra le 9 finestre
**+0,63**, plateau da 45 a 270. Sotto w=45 la finestra contiene **1-3 barre attive** (colonna
misurata) e il segno si rovescia: non e' fragilita', e' campione vuoto.
**-> quindi anche la mia nota "picco, non plateau" nel filone 8 va letta come SUPERATA.**
Stima onesta se `w` e' scelto (mediana di famiglia): **+0,025 FULL**.
📌 **CONSEGUENZA:** il LEAD non ha piu' una condizione aperta da attendere — la sua gamba
esplicativa e' chiusa oggi. Se qualcuno vorra' portarlo avanti, **il candidato giusto non e' la
formula ma il binario**: meno gradi di liberta', **dimezza gli ordini** (migliora l'eseguibilita' a
$635), 115% sul FULL — ma paga in fragilita' d'ancora (20/23 contro 23/23, banda che include 0,061,
hold-out +0,072 contro +0,101). **Resta un terzo della fortuna d'ancora del libro stesso (+0,196):
niente qui giustifica di toccare pesi, cron o config.**
### MONITOR-AUDIT (r0822_monitor_audit.py) — audit di PRODUZIONE, 6 monitor, 4,7 s
**Metodo che rende il risultato non contestabile:** l'audit **riesegue `advance()` di produzione
tale e quale**, sostituendo solo `_append` con un raccoglitore in memoria -> nessuna
reimplementazione, quindi **nessun drift fra audit e monitor**. Sola lettura verificata (gli mtime
di `data/paper_*` sono rimasti quelli del cron delle 00:35).
| monitor | barra parziale | barre coincidenti | corr | **min/giorno misurati** | gate | ricostruibile |
|---|---|---|---|---|---|---|
| `paper_statarb` | **SI'** | **0/46** | +0,297 | **4** | **STATARB 27/09** | **SI', bit-exact** |
| `paper_dvolspread` | **SI'** | 0/28 | +0,262 | **2** | DVOLSPREAD 24/10 | SI', bit-exact |
| `paper_xsr` | **SI'** | 1/28 | 0,045 | **41** | XSR01 23/10 | SI', bit-exact |
| `paper_portfolio` | **SI'** | 7/56 | +0,245 | 19 | — (dashboard) | si', non al bit |
| `paper_prevday` | si' (1 barra su 24) | **1259/1319** | **+0,997** | 1.438 | — | si', bit-exact |
| `paper_combo` | **NO** | 7/37 | +0,991 | 1.402 | — | si', non al bit |
📌 **La patologia e' la stessa, la TAGLIA varia di un fattore 20** — e dipende da quanto pesa la
barra piu' recente nel segnale, esattamente come la lezione del 26/07 su SKH01 contro TP01.
🚨 **Il gate STATARB del 27/09 si ribalta su DUE criteri su tre:** Sharpe registrato **+1,96** (sopra
la soglia 0,5) contro **2,02** ricostruito; maxDD **2,2% contro 15,3%** (guardia <10%). *Fra 36
giorni si sarebbe deciso su una serie che misura 4 minuti di mercato al giorno.*
⚠️ XSR01 e DVOLSPREAD danno lo **stesso verdetto** oggi, ma su numeri implausibili (Sharpe 15,8 su
28 barre = oltre 4 SE). **`implausible_sharpe` esiste dal 26/07 e non e' mai stato puntato sulle
serie forward.**
**LA BUONA NOTIZIA, ed e' misurata: la finestra forward NON va persa.** Il replay *e'* la serie
corretta sulla stessa finestra, con config congelata e codice di produzione. Le due condizioni sono
**provate due volte in modo indipendente**: (a) `paper_prevday` ha **1427/1488 barre identiche al
bit** dopo 62 notti di riscrittura (il feed **non tocca** le barre chiuse); (b) le 6 barre di
`paper_statarb` recuperate dopo un guasto coincidono **al bit**.
-> **La decisione non e' "riparare e azzerare" ma "riparare `advance()` + RIGENERARE", e nessuna
delle tre date di gate si sposta.** Anche nell'ipotesi pessimista (`--reset`) l'unico gate che
slitterebbe e' STATARB, di **+18 giorni**.
📌 **Dettaglio che vale una regola: le uniche barre corrette di `paper_statarb` esistono perche' il
feed si e' ROTTO.** `rebuild_history` e' abortito per 7 giri consecutivi (09-15/07, EPERM sul
backup, gia' riparato); al ripristino il monitor ha recuperato 7 barre in un colpo, **6 delle quali
gia' chiuse** -> coincidono col replay al bit. *Il guasto ha prodotto da solo il controllo che
serviva a diagnosticare l'altro guasto.*
📌 **`paper_combo` e' sano PER CASO:** aspetta la chiusura di una **borsa**, non per progetto.
Nessuna riga di codice chiede la barra chiusa — **se la sua griglia cambiasse diventerebbe rotto in
silenzio.**
**Guardia raccomandata (NON implementata), e ha il pregio di essere banale:**
`ts_ultima_barra + cadenza <= mtime del file di serie`, grazia 5 min. **O(1)**, nessuna strategia da
rieseguire, usa solo cio' che il monitor gia' scrive; segnala **5/6** e **tace sul sano**; controllo
positivo sintetico **6/6 nei due versi**. Il vol-ratio va **dopo, non al posto**: copre un guasto
diverso (drift monitor-strategia) e **non vede `paper_prevday`** (rapporto 0,999).
⚠️ Limiti dichiarati: i "minuti/giorno" sono una lettura del **rapporto di varianza** (assume random
walk sull'intervallo troncato), non un cronometro — il cronometro diretto e' 32-35 min; e per
`paper_portfolio`/`paper_combo` la ricostruzione **non sara' al bit** perche' la gamba GTAA legge
`ADJUSTED_LAST` di IB, ri-aggiustato all'indietro.
### 1 — PROP-ALLOC (r0822_prop_alloc.py, ~3.300 valutazioni MC di cui **360 di selezione**)
**Previsione REGISTRATA PRIMA e confermata:** dal conto del gambler's ruin, alla leva minima che
porta a +T dentro l'orizzonte resta `theta ~ 2*Sharpe^2/T` -> **la vol sparisce e l'argmax sui PESI
deve coincidere con l'argmax di Sharpe**; il contenuto vero sta nella **LEVA**, che lo Sharpe non
determina. Misurato: **e' cosi'**.
| | pesi TP/SKH/XS | leva | **J** | P(pass) | P(vivo 12m) | E[pay/anno] |
|---|---|---|---|---|---|---|
| argmax **J** | 25/25/50 | 0,75 | **0,738** | 82,2% | 89,8% | $8.556 |
| argmax **Sharpe** | 38/25/38 | 0,75 | 0,721 | 77,3% | 93,3% | $7.796 |
| **libro LIVE 75/25** | 75/25/0 | 0,50 | **0,335** | 38,6% | 86,8% | $4.109 |
Differenze **appaiate**: argmaxJ argmaxSharpe **+0,0164 ± 0,0066**; argmaxJ LIVE **+0,3996 ±
0,0114**. **-> Riallocare per la barriera vale il 4% di cio' che vale diversificare.**
**Replica di controllo superata:** la politica MISTO del 25/07, stessa macchina, de-luck 0,60 ->
P(>=50/g) **4,1%** / P(zero) **53,7%** contro il pubblicato 5,6-6,5% / 52%.
📌 **Null dei tilt casuali — e il risultato e' che il PUNTO non conta:** argmax al 98,5° pctl contro
firma best-of-45 di 97,8° = **indistinguibili**, e **il massimo di 200 pesi casuali (0,739) EGUAGLIA
l'argmax (0,738)**. *Conta stare nella regione diversificata, non il vettore.*
📌 **La leva alta non compra probabilita', compra fretta:** J massimo a **0,75x**, E[payout] massimo
a **1,00x**; P(pass) senza limite di tempo e' **monotona decrescente** (98,9% a 0,50x -> 65,9% a
1,50x). E **la barriera piu' larga sposta l'ottimo verso l'alto: il vincolo e' la regola di DD, non
il libro.**
📌 **Il 75/25 del libro live NON e' la ripartizione giusta per un conto a barriera**, e non e'
artefatto di finestra: sul campione **2019+ che contiene il 2022** l'ottimo della coppia crypto e'
**38/62 @0,50x** (J 0,521 contro 0,443) — stesso verso del 2024+.
🚨 **LA BANDA, non il numero.** P(>=50/g) da €600 in 36 mesi con la scala di conti:
**42% al drift pieno · 7,7% allo stress moderato (SKH ×0,50, XS ×0,50) · 0,7% allo stress severo**
(SKH ×0,33, XS ×0,00) — e allo stress severo e' **peggio del libro live**. **Il numero da citare e'
la banda.** Tetto strutturale: cap $200k (HYRO) + $400k (FTMO) = **max 6 conti**, oltre servono altre
firm, ognuna col proprio rischio di controparte.
⚠️ **Onesta' dell'agente sulla distorsione che NON ha potuto rimuovere:** la banda d'ancora **non e'
girata** sotto questa lente (fuori budget), quindi l'ottimo gira sull'ancora **canonica** e si
appoggia a **SKH01, che il progetto misura come lo sleeve con la fortuna d'ancora piu' grande da
restituire** -> *la distorsione e' a suo favore e lo dichiara*.
⚠️ E la sotto-pesatura di **TP01, lo sleeve difensivo**, e' misurata su un campione **senza
sinistro** (2024-2026 non contiene un crash): **su una barriera assorbente quella scommessa si paga
una volta sola.**
⚠️ Assunzione dichiarata e **non verificata con le firm**: che una firm crypto listi i 19 alt
Hyperliquid con short abilitato. Se non li lista, XS01 sparisce e con lui il risultato.
⚠️ Errore proprio corretto in sessione: `paired_delta` **ignorava lo stress** e stampava un delta
non-stressato accanto a righe stressate -> *un confronto appaiato deve ereditare TUTTI i parametri
della riga in cui compare*; senza quella guardia avrebbe concluso che il risultato era robusto
quando non lo e'. Ora c'e' un `assert` che lega il delta alle due colonne stampate.
---
# ONDATA 2 — 2026-08-22 sera (7 filoni)
Mirata su cio' che la prima ondata ha lasciato scoperto, **inclusi i falsificatori che gli agenti
stessi hanno nominato senza poterli eseguire**. Stesso contratto di consegna, stessi gate.
| # | filone | domanda che decide | verdetto |
|---|---|---|---|
| 21 | XS01-OOS | il vantaggio del PROP-ALLOC poggia sul drift di XS01 misurato sulla sua finestra di scoperta: regge fuori? | **LEAD** — regge, ed e' PIU' GRANDE fuori |
| 28 | DEPEG | il falsificatore che l'autore di 21 ha nominato contro se stesso: il depeg USDT contamina il ranking? | **SOPRAVVIVE** — il venue sposta 0,01 di Sharpe |
| 29 | PROP-RECAL | J rifatto con XS01 dalla storia lunga: il canale funded si apre? | **LEAD ridimensionato ~5x** — 42% → **7,8%** |
| 30 | LISTINO | `GATE PROP-01` gamba (a): la firm lista >=10 delle 13 gambe con short? | **PASS 13/13** — verificato sul venue, non sul sito |
| 31 | GATE-RECON | cosa direbbero i 3 gate pre-registrati se le serie forward fossero riparate | **1 gate su 3 ribaltato** — e la premessa e' CONFERMATA |
| 32 | SKH-ANCHOR-PROP | `GATE PROP-01` gamba (b), datata 31/10: girata oggi | **PASS 23/23** — e il numero scende ancora, a **4,4%** |
| 33 | WORST-DAY | il peggior giorno del libro, MISURATO: il gradino di leva e' autorizzabile? | **LEAD** — l'aritmetica passa, **il knob non esiste** |
| 34 | CC01-2022 | il carry riaperto sui dati che gli mancavano per costruzione | **RESTA SCARTATO** — per la ragione giusta, ma non quella pubblicata |
| 35 | FUNDING | il costo mai prezzato di TENERE una posizione aperta | **LEAD****2,16%/anno di drift**, muri **+17,5%** |
| 36 | PIANO-VERO | la tabella congiunta fisco+funding, che non esisteva | 🚨 **€250/m: P(20a) 92% → 14-26%** |
| 37 | GATE-C | l'ultima gamba del gate funded + il biglietto come opzione | **PASS 2/2** — gate senza date; **P(≥50/g) 4,4% → 2,6%** |
| 38 | SCALE-SPEC | specificare il knob di leva che non esiste | **LEAD** — specificata, **1 nodo irrisolto** sul disaster-SL |
| 39 | FUNDING-AVOID | evitare il funding esprimendo il libro sui datati | **SCARTATO** sui datati · **LEAD** sullo **spot** |
| 40 | SL-ANCHOR | il nodo che bloccava il gradino di leva | **SCIOLTO** — rotolante, ma il timore e' refutato |
| 41 | TP01-SIZE | una size che risponde alla CONVINZIONE batte il vol-target uniforme, a pari vol realizzata? | **SCARTATO** — il meglio di 60 celle vale **+0,30pp** di CAGR iso-vol, e l'ottimo sta ai **due estremi opposti** nelle due meta' del campione (**Spearman ShIS/ShHOLD 0,527**: scegliere in-sample e' peggio di una moneta) |
| 42 | TP01-LS | la gamba short del trend a 1d paga il proprio costo, o e' il 2022? | **SCARTATO** — toglie **1,91%/anno di drift in 0/24 ancore**, fallisce l'iso-vol, +8,80pp di maxDD in 24/24, e **senza il 2022 il divario RADDOPPIA** |
| 43 | DATA-UNUSED | quali dati il progetto possiede e nessuna strategia legge — e uno di essi sostiene un'ipotesi? | **SCARTATO****la scorta di dati e' esaurita**: un solo dato mai letto ha storia vera (flussi exchange CoinMetrics 2018-2026) e misurato sta **SOTTO il massimo atteso dal puro rumore** |
| 44 | DEPOSIT-TIMING | un calendario di versamento CONDIZIONALE batte il piatto, a pari soldi? | **SCARTATO 0/12 in ogni lente** — il buy-the-dip compra davvero il **51% piu' in basso** e arriva al capitale-rendita nel **6,3%** dei casi contro l'**85,4%** del piatto |
| 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? | **REFUTATO** — la premessa cade **prima del prezzo**: il maxDD **SALE in 162/162 celle**, a ogni lente di f (f=1,00 regalato compreso). Meccanismo: **beta del libro al sottostante +0,076** |
| 47 | ANCHOR-ENSEMBLE | eseguire l'ensemble delle 24 ancore invece di sceglierne una e correggere il numero | **ESEGUIBILE MA INUTILE SU TP01** — il drift **non puo'** cambiare (algebra: `lordo_ens == media(lordi)`, 1,4e-17); **il segnale sta su SKH01** (+0,312 di Sharpe mediano, maxDD 23,3%→16,6%), ma dentro il libro **non si distingue da zero**. E la premessa del 02/07 era sbagliata |
| 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? | **REFUTED** — protegge **PEGGIO** nei 4 anni piu' recenti a **0/24 ancore** (2022: **3,2x peggio**) e costa **0,127** di Sharpe hold-out al libro. E i meccanismi **non erano ridondanti**: corr di posizione 0,61 |
| 50 | BOOK-3RD | qual e' il miglior TERZO sleeve realmente eseguibile sul libro live a $635 — e a quale capitale cambia? | **NESSUNO AMMISSIBILE OGGI** — sette candidati, **sette muri diversi, e nessuno dei sette e' una soglia di capitale**. 🚨 Il piu' forte misurato (**PREVDAY**) sta in monitor da giugno **senza gate e senza deflated-Sharpe** |
| 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? | 🚨 **REGGE A $600, SI ANNULLA A $272k** — 5 attacchi su 6 falliscono; quello che morde non e' nei numeri, e' **nella taglia a cui vengono spesi**: il lead sparisce **esattamente al muro che pretende di spostare** |
| 53 | SKEPTIC-LEVA | il gradino di leva 1,25x sopravvive a un attacco deliberato, col funding dentro? | **REGGE 5/6, INCRINA 1/6** — il **1,25x sopravvive**, il **1,50x NO**; k massimo difendibile **1,40**. L'incrinatura e' il ramo `eq_fallback`, dove **la scala non apre il buco: lo MOLTIPLICA** |
| 54 | PREVDAY-GATE | il piu' forte candidato misurato sta in monitor da giugno senza gate: quanto vale al gate onesto? | **GATE PREVDAY-01 SCRITTO — 8/10 condizioni oggi**, e le due che mancano sono la stessa cosa: 🚨 **la cella che GIRA non e' quella che la selezione onesta sceglie** — e la selezione compra il libro **LONG-FLAT**, cioe' butta via la gamba per cui PREVDAY fu promosso |
| 55 | COSTO-CAPITALE | i muri sono calcolati a costo d'esecuzione COSTANTE, ma il costo cresce col capitale: dove sta il muro vero? | **NON MORDE** — il muro si sposta di **+0,6%** (dentro la risoluzione MC), la saturazione sta **30x sopra** ($9,5-10M), e 📌 **alla taglia di oggi il costo mancante ha segno NEGATIVO** |
| 56 | XS-AMPIEZZA | su un universo povero (11 gambe), si recupera ampiezza EFFETTIVA senza aggiungere gambe? | **NO — e la caduta NON era ampiezza (solo il 14%)**: e' **selettivita'** (recuperabile ma sotto l'MDE) **piu' un IC che su quelle 11 gambe vale ZERO**. 🚨 E `k=5` **non e' invariante di scala** |
| — | **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%]) |
| 22 | MAKER | l'esecuzione passiva e' una fonte di ritorno, al netto del costo di non essere eseguiti? | **SCARTATO** — il segno dipende da `<` contro `<=` |
| 23 | BOCPD | un rilevatore di cambio di regime vero batte il miglior lookback COSTANTE? | **SCARTATO** — filone chiuso definitivamente |
| 24 | CRITICO | cosa NON e' stato misurato, e quale singola misura mancante vale di piu' | **3 correzioni all'ondata**, 1 regola mia ritirata |
| 25 | BIN-FREQ | il binario di frequenza su SKH01 e' un candidato o un sottoprodotto? | **LEAD** — direzione reale, taglia = selezione |
| 26 | TP01-SINISTRO | quanto pesa TP01 se l'obiettivo include un crash che nel campione non c'e'? | **allarme SCARTATO** — il rischio e' XS01, non TP01 |
| 27 | SURFACE-RV | la superficie e' internamente incoerente, e l'incoerenza vale piu' del costo di attraversarla? | **SCARTATO** — l'incoerenza al mid **e'** la larghezza del mercato |
---
## 23 — BOCPD (orizzonte adattivo, il falsificatore eseguito)
`scripts/research/r0822b_bocpd.py` (123 s). **169 trial dichiarati**, conteggio al rialzo, inclusi i
13 di taratura fatti guardando **solo il numero di change-point**, mai uno Sharpe.
**Il falsificatore che il 22/08 restava aperto e' stato eseguito con i rilevatori che nominava**:
BOCPD (Adams & MacKay, run-length posterior online, Normale-InverseGamma, hazard costante) e
**optimal partitioning causale** (l'obiettivo che PELT accelera, ricorsione in avanti, mai un
`fit_predict` retrospettivo), piu' `L` scelto per walk-forward sul PnL realizzato.
📌 **E questa volta il test HA AVUTO POTENZA — e' il fatto che rende il "no" esaustivo.**
Il vincitore del 22/08 aveva lookback **costante** (stava al bordo il 100% del tempo, corr 1,000):
si era chiusa una famiglia di *proxy*, non il meccanismo. Qui **68/96 celle sono davvero adattive**
(BOCPD 24/24: `L_t` mediano 25-107 g, IQR 28-134 g, **0-4% al tetto**, 7-44 reset/anno).
| | Sh FULL | Sh HOLD | maxDD | CAGR | corr→TP01 |
|---|---|---|---|---|---|
| (A) adattivo, cella in-sample | 1,618 | 0,627 | 14,48% | 22,05% | 0,757 |
| **(B) miglior COSTANTE** (L=15g triple 12h) | **1,639** | **0,657** | 12,68% | 22,31% | 0,737 |
| (C) walk-forward su PnL | 1,385 | 0,382 | 16,33% | 17,20% | 0,860 |
| TP01 30/90/180 | 1,314 | 0,489 | 14,31% | 16,44% | 1,000 |
📌 **La decomposizione E' il risultato:** adattivo TP01 = **+0,305**; miglior costante TP01 =
**+0,326**; adattivo miglior costante = **0,021** → **l'adattivita' spiega il 7% del vantaggio
su TP01. Il 100% e' "un orizzonte piu' corto", non "adattarlo".**
**Gate:** `earns_slot_honest=False`; `marginal_vs_tp01` **NEUTRAL** con **corr→TP01 0,861**;
appaiato per anno vs il null giusto (B) **3/8 anni** (mediana 0,15); **banda d'ancora 12 ancore,
mediana delle differenze appaiate 0,136, positiva in 0/12**, e la canonica sta al **92° pctl** =
fortuna d'ancora a suo favore. `causality_ok` ok, e **troncamento manuale esplicito** su 4
combinazioni: `max|L(prefisso) L(pieno)| = 0` → la trappola del change-point retrospettivo e'
esclusa **per misura, non per fiducia**. Null del de-levering **non applicabile e dichiarato**
(il candidato NON riduce il maxDD: 14,5% contro 12,7%).
**Il criterio del falsificatore applicato a tutte le 68 celle adattive: 0/68**, e nessuna delle due
condizioni va vicina — corr→TP01 **minimo 0,754** (soglia 0,60), **nessuna** batte il miglior
costante sul FULL (la migliore e' 0,013), massimo **4/8** anni battuti (richiesti 6).
⚠️ **Cosa l'agente NON propone, e perche':** il miglior costante batte TP01 di +0,326 — ma il salto
di Sharpe fra **L adiacenti** e' **+0,190, cioe' il 58% dell'intero vantaggio**: e' un max-of-24 su
un crinale di rumore, non una curva. **Nessun cambio a TP01, al libro, ai pesi.**
🚨 **Sottoprodotto che vale fuori dal filone: un deflated-Sharpe calcolato dentro una famiglia
OMOGENEA e' CIECO.** Qui dice **0,998-1,000 PASS**; ricalcolato con l'sr0 **di screen** misurato dal
filone ORTHO (1,572 su 168 trial) dice **0,555 / 0,580 / 0,237 FAIL** — TP01 compreso. Il motivo e'
strutturale: `deflated_sharpe` stima il massimo-dal-rumore dalla **varianza** degli Sharpe della
griglia, e una griglia di varianti molto correlate ha varianza piccola → sr0 basso → DSR alto **per
costruzione**. Gonfiare N col padding alza N e non la varianza: **non basta contare i trial di
screen, serve la VARIANZA di screen.**
📌 **Secondo sottoprodotto, un controllo da mettere in ogni famiglia con un parametro clippato: la
PROVA DI IDENTITA' batte la diagnostica.** Invece di dire "questa cella sta al bordo", l'agente
mostra che la sua serie e quella del lookback costante coincidono a **max|Δ| = 0,000e+00 su
n=2719** — non *somiglia a*, **lo e'**.
**VERDETTO: SCARTATO. IL FILONE ORIZZONTE-ADATTIVO E' CHIUSO DEFINITIVAMENTE.**
---
## 22 — MAKER (esecuzione passiva come fonte di ritorno)
`scripts/research/r0822b_maker.py` (19 s, sola lettura). **42 celle dichiarate**, nessuna riduzione.
📌 **Osservazione strutturale che riapriva la domanda:** il netting su strumento unico — il motivo per
cui T1 resto' non implementata il 26/07 — **non si applica qui**. Quello uccide i *bracket per-sleeve*
(un limit al livello di SKH chiuderebbe quota TP01); l'ordine **netto** di ribilanciamento e' uno
solo, quindi passivizzarlo non ha conflitti fra sleeve. La domanda era davvero aperta.
**(1) Il differenziale, limite superiore** (tutto maker, zero non-fill): dSharpe **+0,0333**,
dCAGR +0,466 pp → **$2,96/anno a $635**, $23,28 a $5.000, $1.203 al muro di $258k.
✅ Replica indipendente della curva del 26/07: **+0,0167 Sh/bps e +0,233 pp/bps** contro i pubblicati
0,017 / 0,23.
📌 **(2) Il costo del non-fill, ed e' qui che muore: il parametro che decide non e' l'orizzonte, e'
cosa si chiama "riempito".**
| N (min) | TOCCO `low <= P` (limite superiore) | ATTRAVERSAMENTO `low < P` (minimo difendibile) |
|---|---|---|
| 5 | fill 93,2% · resta **+0,31** bps (15,5%) | fill 86,2% · resta **0,47** bps (**23,6%**) |
| 60 | 98,6% · +0,34 (17,1%) | 95,9% · **0,45** (22,4%) |
| 120 | 98,9% · +0,67 (33,7%) | 96,9% · 0,38 (19,0%) |
**Fra le due colonne cambia una sola disuguaglianza stretta**: se la barra che apre esattamente al
nostro prezzo, e da li' se ne va, conta come fill. **Non conta** — a quel prezzo non e' stato
scambiato niente dopo l'arrivo dell'ordine, e un passivo sta *dietro* a tutta la coda. Griglia fine:
il salto e' **tutto al primo passo** (3,16 → 3,95 bps a penetrazione sub-tick) e **non esiste un q
positivo di pareggio**. Lente model-free: il fill *richiesto* per pareggiare e' **88-98%**, quello
ottenuto e' sotto in **25 celle su 25**.
**Gate:** appaiato **per ORDINE** (ogni ordine compare una volta in entrambe le politiche, riempito o
no — allineare sui riempiti avrebbe tenuto solo i casi in cui non e' successo niente); **IC95
bootstrap contiene lo zero in 10 celle su 10** al tocco e a q=0, interamente negativo da q≥1;
**placebo a ore casuali girato** → reale ≈ placebo e **incoerente fra i due asset** (BTC 6,8 vs 3,1
bps; ETH 4,1 vs 4,7) ⇒ la selezione avversa **non** e' "il libro trada nei momenti brutti", e'
**strutturale all'esecuzione passiva** e non si aggira scegliendo momenti migliori. Null del
de-levering **non pertinente e dichiarato** (nessun claim di DD; il maxDD **cambia segno** fra le
lenti = non e' un effetto).
📌 **La firma della troncatura, vista dall'altra parte.** Il passivo **vince sul 92-98% degli ordini e
perde sulla media**: mediana dell'avversa **2,0 bps** (favorevole), media **+4,3**, peggiore **+948**,
e i **5 ordini peggiori su 1535 fanno il 42% del danno**. E' la forma speculare del profit-take di
VRP01 (30/07). **Una politica che vince quasi sempre e perde sulla media si giudica sulla media.**
⚠️ **Rischio operativo quantificato:** a N=60 restano aperti al giro successivo il **4,6-7,8% degli
ordini = 9-15 volte l'anno** in cui l'esecutore deve cancellare-e-rimpiazzare su un conto vero. Oggi
`rebalance_signed` manda market e finisce: **nessun ordine sopravvive al giro** → si comprerebbe un
modo nuovo di rompersi (il libro ha gia' pagato quel prezzo con `fresh_5m`) per un beneficio il cui
IC95 contiene lo zero.
⚠️ **Numero del brief non riprodotto:** l'agente ricostruisce **191 ordini/anno di libro** a $635
contro i "35-44/anno per asset" del brief; il nastro vero da' 18 ordini in 45 giorni = **146/anno**.
La conclusione non dipende da questo (il punto 1 usa il turnover modellato, che replica la curva
pubblicata al terzo decimale), **ma il numero del brief va ri-verificato.**
**VERDETTO: SCARTATO.** +0,033 Sharpe nel caso impossibile, contro ±0,20 di banda d'ancora del libro.
**Smentitore dichiarato:** una misura di **profondita' del book** sui perpetual USDC (che l'OHLC non
contiene e che il progetto non raccoglie — `cb_chain` e' opzioni). Se a taglie di $5-80 la coda al
miglior livello si consumasse senza che il prezzo debba attraversare, il segno si ribalta. **E'
misurabile in avanti**: registrare `book_depth` al momento di ogni ordine e poi il volume scambiato
al livello.
---
## 24 — CRITICO (critico di completezza dell'ondata)
`scripts/research/r0822b_critic.md` (48 KB, markdown — non uno script). Ha letto brief, registro,
diario e i sorgenti degli agenti.
📌 **La tesi, e regge:** *il metodo dei singoli filoni non e' il problema dell'ondata, la CUCITURA lo
e'.* I difetti gravi stanno nei punti dove **nessun agente era responsabile**.
🚨 **(a) `dealer_net_gamma` NON e' "il GEX col segno invertito" — la regola l'ho pubblicata io in
CLAUDE.md ed e' FALSA.** ✅ **Verificata da me aprendo la fonte**, che 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
invertito per errore: e' un'**assunzione di posizionamento dichiarata**, diversa da quella del GEX
standard. Il default `top_n_strikes=50` spiega anche il coefficiente 0,7 e l'offset che il filone
DEALER-GAMMA attribuiva a "non-portabilita'". **Il verdetto SCARTATO regge; cade la regola**, che le
prossime ondate avrebbero ereditato al contrario.
🚨 **(b) Il deflated-Sharpe e' stato misurato ai suoi DUE estremi degeneri lo stesso giorno, da due
agenti che non si citano — e tre gate pre-registrati ci poggiano sopra** (XSR01 23/10, DVOLSPREAD
24/10, 22/12). `altlib.deflated_sharpe` calcola `sr0 = sd(Sharpe dei trial) × mult(N)`: dipende dalla
**varianza** della griglia, non solo da N. Da un lato VOL-SIZE dichiara il proprio DSR **VACUO**
(1,000 anche per il baseline); dall'altro ORTHO-SCREEN pubblica *"sr0 = 1,572 ⇒ uno screen largo su
BTC/ETH non puo' passare il proprio gate per aritmetica"* — ma quell'1,572 implica sd≈0,58, e **le
stesse 168 celle dichiarate come 7 famiglie da 24 danno 1,15, sotto il soffitto ~1,3**: il verdetto
"impossibile per aritmetica" **si ribalta senza toccare un dato**, e la cura che suggerisce
(dichiarare famiglie piu' piccole) e' esattamente la manovra che il progetto ha proibito il 30/07.
**Convergenza indipendente:** il filone BOCPD, che non ha parlato col critico, ha misurato lo
stesso difetto dall'altro capo (DSR 0,998 PASS dentro la famiglia omogenea → **0,555 FAIL** con
l'sr0 di screen). **Due agenti, due strade, stessa conclusione: il gate non ha una regione utile in
mezzo.**
🚨 **(c) Il filone ALT-OPTIONS non e' nel registro** — ✅ verificato: **zero occorrenze**, ne' riga ne'
sezione, benche' due altri filoni lo citino e il mio brief per SURFACE-RV mandasse a leggerlo. Il
diario lo liquida come *"alt-options (alt)"*, ma la sua conclusione riguarda **ETH_USDC, che non e'
un alt**: `f_venue` 0,980 e **max-loss $16,62/lotto**. Se regge, e' la **quarta** soglia pubblicata
falsificata (il diario ne annuncia tre) e sposta VRP01 da *"servirebbe il 61% di un conto da $3.000"*
a *"entra in un conto da ~$140"*. ⚠️ **Cio' che NON cambia: la regola "niente short-vol da modello in
deploy" non era una regola di eseguibilita'** — VRP01 resta fuori dal libro per il `f` modellato e
per il gate IV-rank, non per la taglia del lotto.
📌 **(d) La misura di maggior valore mai fatta, secondo il critico: il peggior giorno che il libro
puo' avere, MISURATO invece che assunto.** Il gradino di leva 1,00→1,50x vale **14,7a → 11,6a** al
capitale-rendita (~€300/mese di versamenti equivalenti, a costo zero) ed e' bloccato da **un unico
parametro scelto a mano** ("un giorno 10%/anno porta k* a 2x"). Controllo di cinque minuti: sui 10
peggiori giorni di BTC/ETH in 7,4 anni — **incluso il 41,5%/45,7% del 12 marzo 2020** — il libro ha
fatto **+0,97 · +0,72 · 0,00 · 1,98 · 2,24 · +0,23%**, e il suo peggior giorno assoluto (**3,38%**)
**non e' un giorno di crash**. Il 10% e' plausibilmente una **coda da buy&hold importata in un libro
difensivo**.
📌 **(e) La risposta onesta al mandato, che gli era stato chiesto di dare se vera: nessuna misura di
ricerca batte "versare".** 3,1 anni di ricerca valgono meno dei 5 anni che vale €250/mese in piu'.
E la verifica che costa meno di tutte **non e' ricerca**: leggere il listino di due prop firm.
L'intero risultato di testa dell'ondata (+0,400 di J) poggia sull'assunto — scritto in un **commento
a riga 100** — che una firm crypto listi i 19 alt Hyperliquid con short abilitato. **E' la ripetizione
esatta dell'errore GTAA01/PRIIPs**, per cui il progetto ha gia' scritto la regola: *la negoziabilita'
sul conto REALE va verificata quando lo sleeve entra in RICERCA.*
**Altre contraddizioni fra agenti segnalate:** lo Sharpe di XSR01 compare con **quattro** lenti (non
tre); il muro di XS01 con **tre** numeri; la leva riceve guida **opposta** da GROWTH-POLICY e
PROP-ALLOC; il peso di SKH01 e' **respinto da un agente e raddoppiato da un altro**. Piu' 6 modalita'
non esplorate e 6 punti di autocritica — incluso che i **20 MB del dataset futures 2018-2026 (l'unico
con la coda 2022) vivono solo in uno scratchpad di sessione**.
---
## 21 — XS01-OOS (XS01 fuori dalla sua finestra di scoperta) — **il risultato di testa della serata**
`scripts/research/r0822b_xs01_oos.py` (78-126 s, cache nello scratchpad, seconda corsa **offline**,
numeri identici su due corse). **140 trial dichiarati** (contati al rialzo: le 6 varianti di config
sono contate come trial anche se sono la *rivalidazione di una selezione passata*), piu' 1.200
estrazioni di null che **non** sono trial.
**L'idea:** il gate del PROP-ALLOC diceva *"non aprire un funded prima che XS01 abbia una finestra
fuori dal 2024-2026"* = un'attesa di anni. **Quella finestra esiste gia'** — gli stessi 19 ticker su
**Binance spot USDT 1d, 2021-01 → 2023-12**, che contiene **LUNA e FTX**. Meccanismo **congelato**
(blend [30,90], H=10, k=5, gate p30, vol-target 20%), nessuna griglia cercata.
⚠️ **L'obiezione ovvia — "Binance non e' la verita'" — e' stata misurata, non aggirata:** quella
regola del progetto riguarda l'**ancoraggio di prezzo**, non un ranking cross-sezionale, e lo scarto
USDT e' un **fattore comune** che sparisce nello z-score. Verificato: corr dei ritorni giornalieri per
asset **≥0,9992** (min NEAR), |differenza| mediana **5,1 bps**, e soprattutto lo **stesso sleeve**
calcolato sui due venue da' **corr 0,9991, dSharpe 0,025**. Replica dello sleeve ufficiale
`max|diff| = 0,0`. Dato certificato: **0 gap, flat 0,00-0,71%, volumi zero 0,00%**, nessun run
iniziale a volume 0 (il rivelatore del backfill sintetico, lezione AXS).
📌 **IL RISULTATO, e va nel verso opposto a quello temuto:**
| | Sharpe (**mediana di fase**) | banda 10 fasi | fasi >0 | maxDD | CAGR |
|---|---|---|---|---|---|
| **fuori campione 2021-2023 (U13)** | **+1,12** | [+0,74, +1,54] | **10/10** | **22,0%** | +26,1% |
| finestra di scoperta 2024+ (U13) | +0,37 | — | — | 20,5% | +8,9% |
| **fuori campione (U19-EXP)** | **+1,17** | [+0,91, +1,78] | **10/10** | 20,9% | +30,0% |
| XS01 **ufficiale** (HL, 2024+) | +1,15 | [+0,46, +1,59] | — | **10,8%** | +29,0% |
**Differenza appaiata per fase (fuori campione scoperta): +0,668, positiva in 10/10 fasi.**
**Il fuori campione e' la finestra MIGLIORE, non peggiore.** Per anno: 2021 **+2,14** · 2022 +0,22 ·
2023 +0,84 · 2024 0,48 · 2025 +0,68 · 2026 +2,26.
**Sul LIBRO, solo fuori campione** (TP01+SKH01 75/25 + XS01, n=1076, dati che PROP-ALLOC non aveva mai
visto): w=0 → Sh **+1,17** / DD 9,4% · w=0,25 → **+1,65 / 6,0%** · w=0,33 → +1,67 / 6,6% ·
**w=0,50 (l'argmax di PROP-ALLOC) → +1,56 / 8,9%**. corr(XS01, libro) **0,019**.
**Gate:** `causality` leak-free (randomizzando i prezzi dopo la decisione `max|diff| = 0`);
`marginal_vs_tp01` **ADDS** su entrambi gli universi (corr +0,031 / 0,01, `is_hedge` **False**);
banda di fase `gate_pass=True` **4/4**, e la fortuna d'ancora e' **piccola** (+0,05) contro il **+0,18**
dello sleeve ufficiale; null di permutazione **a fee zero** p=0,013 (cross-sez.) e 0,017 (pesi
casuali); sopravvive a **30 bps/lato** (+1,01). **`deflated_sharpe` FAIL 0,342** — e l'agente dichiara
che il DSR penalizza una **mediana-di-fase** come se fosse un **max-di-k**, *"ma un gate fallito resta
fallito"*. Null del de-levering **non pertinente e dichiarato**. Haircut a $600: **non e' il vincolo**
(ticket mediano $76, **0,0%** sotto il min-order).
🚨 **Null "universo dove NON dovrebbe funzionare"** (11 settoriali SPDR, 1998+, meccanismo congelato):
**0,45, 0/10 fasi positive** → **terza conferma indipendente che il cross-sectional e'
crypto-specifico** (dopo XSR01-equity 26/07 e STATARB-EQ 25/07).
🚨 **Il risultato che il progetto non si aspettava: i DUE AFFINAMENTI del 2026-06-19 NON si
replicano.** Fuori campione il **blend [30,90] e' PEGGIO del solo L=30** (+1,12 vs +1,28) e il **gate
di dispersione p30 vale ZERO** (+1,12 con e senza) — mentre *dentro* la finestra di scoperta il gate
vale eccome (+0,37 contro 0,03). **Cio' che sopravvive e' il meccanismo cross-sectional NUDO.**
⚠️ Non e' un argomento per cambiarli — cambiarli guardando *questo* risultato sarebbe la stessa
selezione spostata di finestra — **e' un argomento per non attribuire loro il valore che la memoria
del progetto gli attribuisce.**
⚠️ **Concentrazione misurata prima di crederci** (lezione SOL, stesso giorno): togliendo il **2021** il
fuori campione scende **+1,17 → +0,57**; **leave-one-asset-out**: togliendo **LTC** la mediana di fase
crolla **+1,12 → +0,20** (tutte e 13 restano >0) → **ampiezza effettiva bassa**, stessa diagnosi di
STATARB-MULTI.
**VERDETTO: LEAD.** Non promuove niente; **riscrive il gate del PROP-ALLOC.**
📌 **`IL GATE DEL PROP-ALLOC SI PUO' CHIUDERE OGGI: PARZIALMENTE` — e non si chiude, si SOSTITUISCE.**
L'attesa di anni **non serve**. Ma tre cose che il gate non chiedeva sono ora misurate:
- **il rendimento sopravvive, il RISCHIO no**: maxDD standalone **10,8% → 20,9-22,0%** — e su un conto
funded il vincolo binding e' la **regola di DD**, quindi la correzione va nel verso sbagliato;
- **il peso 0,50 dell'argmax-J non sopravvive**: fuori campione a w=0,50 il maxDD di libro risale a
**8,9%** contro **6,0%** a w=0,25, cioe' restituisce quasi tutta la protezione che e' l'unica ragione
per metterlo su un conto a barriera → l'ottimo fuori campione e' **w ≈ 0,25-0,33**;
- **32% dell'universo non e' testabile** (ARB/OP/SUI/APT/SEI/TIA non quotati nel 2021-23) e su di esso
vive gran parte del numero di scoperta (**19 gambe 1,31 vs 13 gambe 0,54**, stessa finestra e stesso
venue) → *cio' che e' stato validato e' una versione piu' DEBOLE di quella che sta nel libro.*
⚠️ **Il punto fragile che l'agente dichiara e non ha testato:** la validazione di venue gira **solo sul
2024+**, cioe' proprio il periodo **senza depeg USDT**, mentre il fuori campione contiene il **depeg di
maggio 2022**. Se i close Binance/USDT 2021-23 divergessero da un venue **USD** in modo *non comune fra
gli asset*, il ranking cambierebbe e il risultato con esso.
---
## 26 — TP01-SINISTRO (il peso di TP01 contro un crash che nel campione non c'e')
`scripts/research/r0822b_tp01_sinistro.py` (~200 s). **1.784 valutazioni Monte Carlo** contate dal
codice, ognuna 2.500 percorsi eval + 2.500 funded, **lente accoppiata**, de-luck x0,89.
**Replica di controllo:** i numeri E-ter di PROP-ALLOC (argmax **38/62 @0,50x J 0,521**, live 75/25
J 0,443) riprodotti **al millesimo**.
**L'allarme da verificare** era il caveat che PROP-ALLOC aveva dichiarato contro se stesso: *"la
sotto-pesatura di TP01 e' misurata su un campione SENZA SINISTRO: su una barriera assorbente quella
scommessa si paga una volta sola"*. L'agente ha **registrato nel docstring, prima di misurare**, che
si aspettava di **confermarlo**.
| lente | argmax w TP01 | J argmax | J a 0,75 (live) |
|---|---|---|---|
| **2019+ (contiene il 2022)** | **0,375** | 0,521 | 0,443 |
| 2024+ (la finestra di PROP-ALLOC) | **0,375** | 0,423 | 0,317 |
| SOLO-SINISTRO | **0,000** | 0,771 | 0,000 |
**L'allarme e' falsificato nel VERSO, non nella cautela: TP01 ~0,375 e' l'argmax sia sulla finestra
che contiene il 2022 sia su quella che non lo contiene, e nel sinistro il libro con MENO TP01 fa
MEGLIO** — perche' TP01 va flat mentre **SKH01 si gira short e guadagna**. Conto dell'assicurazione:
premio **-4,01%/anno** fuori dal sinistro, indennizzo **-12,5%** cumulato sui 120 giorni di sinistro
(LIVE -2,8% contro OPT +9,7%). Test dei segni: OPT batte LIVE **12/12** sulle peggiori finestre 30g
(p=0,0005) e **8/8 sul solo sotto-campione pre-2024 indipendente** (p=0,0078).
**Null del de-levering — 7a occorrenza, in veste nuova** ("protezione dal crash" invece di "meno
drawdown") **e decisivo**: a leva comune TP01 protegge davvero (sopravvivenza al crash 32,4% -> 76,4%
da TP01 0 a 0,625), ma la stessa protezione si compra abbassando la leva, e **a ISO-SOPRAVVIVENZA
meno TP01 paga di piu'** (payout $4.490 a TP01 0,125 -> **$2.119** a TP01 1,00, monotono).
**Tre risultati collaterali che valgono piu' dell'allarme rimosso:**
1. **"2024-2026 non contiene un crash" e' FALSA nella forma**: il 2024+ ha buy&hold a **-60% di
drawdown** e -39,6% in 20 giorni. Manca la **taglia** (~2,3x sulla coda 1-10 giorni). La domanda
giusta non e' *"e se arriva un crash"* ma **"e se ne arriva uno due volte piu' grande"**.
2. **Alle leve funded il 2022 NON era una minaccia** (min equity -1,4/-2,4% contro barriera -6%):
cio' che uccide un conto a barriera e' la **regola a un giorno su una giornata qualunque**, non il
crash del sottostante. E il vincolo che morde **cambia col peso**: sotto TP01 0,50 e' il
daily-loss, sopra e' il max-loss cumulato.
3. **Il rischio vero dell'ottimo non e' TP01, e' XS01**: uno shock di **un giorno a ~-10%** dimezza
la sopravvivenza quando il crash arriva, e **XS01 non ha nessun sinistro nel campione**.
**Ipotesi dell'agente nata e refutata in sessione:** aveva scritto che TP01 fa da zavorra contro
quell'ignoto (-12,3% a XS01 25% contro -8,0% a XS01 50%); il controllo a **XS01 fisso e leva
comune** lo smonta - lo shock di rottura e' **-10,1/-10,2/-10,2%** muovendo TP01 da 12% a 38%
(**invariante**) e la sopravvivenza severa **cala**. *Protegge meno XS01, non piu' TP01: il primo
confronto attribuiva a TP01 il merito di un altro peso.*
**Libro live NON toccato** (75/25 resta). Nota per la memoria: il 75/25 e' **fuori** dalla regione di
compromesso del funded (0,375-0,50) - coerente col fatto gia' scritto il 25/07, *canale funded e
libro proprietario vogliono libri diversi*.
**Caveat principale, dichiarato:** `anchor_luck_band` **non ri-misurata** sotto questa lente; gira
sull'ancora canonica e si appoggia a **SKH01, lo sleeve con la fortuna d'ancora piu' grande da
restituire** -> **la distorsione e' A FAVORE della conclusione**. **Smentitore dichiarato:** un crash
in cui **SKH01 non si gira short in tempo** (gap notturno oltre lo stop, venue fermo). Il campione ne
ha **quattro** episodi e in tutti e quattro SKH01 ha girato: **l'ampiezza effettiva della coda e' 4, e
nessun bootstrap la aumenta.**
---
## 27 — SURFACE-RV (la superficie come relative value fra i suoi punti)
`scripts/research/r0822b_surface_rv.py` (~85-130 s). **~112 valutazioni**, e **nessuna e' una
selezione**: e' un **censimento su 1,24 M quote a due lati**, non una ricerca di celle.
L'ipotesi era di **microstruttura, non di previsione**: non chiede alla vol implicita di prevedere
niente, chiede se la superficie sia internamente incoerente e si ricomponga. E' l'unico angolo della
superficie che l'ondata non aveva coperto (livello, skew, struttura a termine e quote reali erano gia'
chiusi).
| test **model-free** (nessun interpolatore) | esito |
|---|---|
| **V — monotonia P(K)** | **0 / 1.111.585** |
| **B — convessita' P(K)** | mid 6,213% · **eseguibile 1 / 1.031.256 = 0,0001%**, vale **$0,00**, sparita l'ora dopo |
| **C — varianza totale nel tenore** | strike condiviso 6/107.177 (0,006%) · con interpolazione 10/112.827 → **l'interpolatore contribuisce +0,003 pp** |
**Ampiezza:** |residuo| mediano **0,125 pt-vol (BTC) / 0,200 (ETH)** contro **mezzo** spread
0,861 / 1,208 → rapporto su spread pieno **0,053 / 0,063**; **sotto il tick nel 96,5% / 95,3% dei
casi** — l'incoerenza **non e' esprimibile nella griglia di prezzo del venue**. Economia al lotto
minimo: fee 3 gambe $7,54 (BTC) / $2,11 (ETH), miglior credito netto su **782 k farfalle**
equispaziate **$0,95 / $0,33**, **positivi 0**. Calendario: violazione mediana **$0,09** contro
**$0,59** di costo, e la superficie sta **13,2 pt-vol** dal bordo di non-arbitraggio → vincolo
strutturalmente slack.
📌 **IL MECCANISMO, che vale piu' del verdetto: |residuo| cresce MONOTONAMENTE col largo del
mercato** — BTC **0,080 pt** a spread 2,6% → **0,255 pt** a spread 50%. **L'incoerenza al mid *e'* la
larghezza del mercato guardata attraverso il mid**, non un errore di prezzo.
⚠️ **E questo uccide l'unica riga non-zero, che era un artefatto del CONTROFATTUALE dell'agente
stesso:** prendendo tutta la superficie, lo spread USDC del 2,6% aprirebbe **2.293 farfalle a credito
su ETH** (miglior caso $123); **restringendo alla parte di superficie gia' quotata stretta quanto le
USDC → 0/13.287 (ETH) e 0/145.431 (BTC)**, miglior caso $0,58 / $0,82. *Prendeva il mid di un
mercato larghissimo e fingeva di poterlo quotare al 2,6%.*
**Reversione MISURATA, non assunta:** β **0,062/0,056 per ora**, corr(t,t+1) **+0,94**, mezza-vita
**11-12 h** → il residuo e' **la forma dello smile**, non un errore che si ricompone.
**Gate:** **controlli positivi 3/3 in entrambi i versi** (violazione costruita → rilevata; catena sana
→ zero) — *un rilevatore che trova ~0 e non e' validato e' indistinguibile da uno rotto*; causalita'
**strutturale** (ogni test e' contemporaneo dentro un solo snapshot); ancora oraria girata (incoerenza
mid 5,99-6,36% su 24 ore, eseguibile max 0,00222% → **nessuna ora apre una finestra**).
`marginal_vs_tp01`/`deflated_sharpe`/de-levering/`implausible_sharpe` **non girati, e il perche' e' il
risultato**: non esiste una serie di ritorni da valutare (1 opportunita' su 1,03 M, del valore di
$0,00). `f_markfit` **1,0010** — converge col **0,992** del filone SKEW, implementazione separata →
il difetto non e' il prezzatore.
**VERDETTO: SCARTATO. Il lato relative-value della superficie e' chiuso.**
**Smentitore piu' forte, dichiarato:** quote **reali** della famiglia USDC (tutta l'estrapolazione e'
un controfattuale sui mid inverse) — osservazione decisiva: puntare il collettore anche su
`{"currency": "USDC"}` e rifare TEST B sul suo bid/ask.
🚨 **SOTTOPRODOTTO — buco di colonna nell'archivio ereditato, mai registrato:** `bite_archive` ha
`index_price` e `underlying_price` **100% None (1.232.212/1.232.212)**. Il sottostante esiste **solo
dal 2026-07-30** (raccolta propria, 18,2% delle righe); `book_depth_top3` solo nel 67,2%. **Chiunque
calcoli moneyness o riprezzi sull'archivio pre-30/07 sta usando una colonna che non c'e'.**
**Ed e' chiudibile:** il forward si ricostruisce con la **parita' put-call** dalla catena stessa —
verificato contro l'osservato su **6.578 coppie: |errore| mediano 0,023%, p95 0,147%, corr
1,000000** → rende la superficie utilizzabile su tutti i 75 giorni invece che 23.
**Terza convergenza indipendente sul muro del dato** (75 giorni di superficie); e lo **smile**
che i filoni SKEW/TERM non usavano — esiste invece su **113 giorni dal 2026-05-01**.
---
## 28 — DEPEG (il falsificatore di XS01-OOS, eseguito)
`scripts/research/r0822b_depeg.py` (811 righe, **18 s**, offline dalla cache, **due corse
byte-identiche**). **112 configurazioni**, e **nessuna e' una selezione**: e' un confronto **appaiato**
dello stesso meccanismo congelato su due fonti di prezzo.
**Perche':** l'autore di §21 aveva dichiarato contro se stesso che la sua validazione di venue gira
**solo sul 2024+**, cioe' proprio il periodo **senza depeg USDT**, mentre il fuori campione contiene
il **maggio 2022**. La soglia — `corr fra i due sleeve >= 0,99` — era **dichiarata da lui, non
dall'esecutore del test**.
**Il dato, e il primo limite:** su 13 asset **10 hanno un prezzo USD** che copre la finestra (9
Coinbase + **XRP da Bitstamp**, perche' Coinbase l'aveva sospeso). **BNB non esiste in USD prima del
2025-10** — e' il token nativo del venue sotto esame. AVAX parte 2021-09-30 → il test **non copre il
2021**, ma copre **esattamente cio' che l'obiezione nomina: maggio 2022 e FTX**.
📌 **Divergenza SCOMPOSTA nelle due componenti che sono domande diverse** (824 giorni, 8.240
osservazioni appaiate): **(a) comune** med 3,2 bps / max 76,7 — quella che lo z-score annulla;
**(b) idiosincratica** med **2,1 bps** / p95 11,2 / max 116,5 — quella che cambia il ranking.
Nel depeg (07→20 maggio 2022) il comune arriva a **39 bps** ma l'idiosincratico sale solo a med
**3,6** / max **33,8 bps** contro 2,0 / 10,9 fuori.
**TEST 1** (meccanismo congelato, 10 asset, 10 fasi, 2021-09→2023-12): **corr mediana 0,9992, minima
0,9921 → PASS**; **dSharpe appaiato 0,000** [0,056, +0,036]; divario di equity cumulato su 2,25
anni **+0,07%**. **Il canale del danno, guardato direttamente:** 734 ribilanciamenti, **10 con gambe
diverse (1,36%)**, tutti a sovrapposizione 4/5, **ZERO dentro la finestra del depeg**; Spearman dello
score mediana **1,0000**.
**TEST 2** (finestra intera di §21): il numero di testa **+1,12 → +1,11**, delta appaiato 0,003.
**VERDETTO: `IL RISULTATO XS01-OOS: SOPRAVVIVE`** — il venue sposta il titolo di §21 di **0,01 di
Sharpe** e **non cambia una sola gamba dentro il depeg**.
**Controllo positivo girato** (obbligatorio, o "corr 0,99" potrebbe essere uno sfasamento): USD
ritardato di 1 giorno → corr mediana **0,011**.
**Tre cose trovate che vanno registrate:**
1. 📌 **L'unica corr sotto soglia e' ATTRIBUITA, e non e' il prezzo.** Col **gate di dispersione
spento** su entrambi i venue la minima passa **0,9674 → 0,9977**. Il gate `disp >= percentile` e'
**binario**, quindi pochi bps cadono ai due lati → **4 intervalli da 10 giorni** in cui uno sleeve
e' pieno e l'altro **flat**, piu' una coda di ~30 giorni in cui la `rv30` del vol-target resta
diversa. **Una scansione di ranking non lo vede.** ✅ Converge con §21 (*"il gate p30 fuori campione
vale ZERO"*): **non porta edge e amplifica il rumore** — ⚠️ non e' una proposta di cambiarlo,
cambiarlo guardando questo numero sarebbe selezione.
2. 🚨 **Il caso peggiore dell'intero campione NON e' il depeg: e' il 2025-10-10** (cascata di
liquidazioni sulle coppie /USDT) — **INJ 1.981 bps**, ADA 315, LTC 201, AAVE 136 mentre BTC/ETH
stanno a 21-22. **Il meccanismo temuto dall'obiezione e' REALE**; semplicemente non e' accaduto nel
2021-2023 ed e' caduto nella finestra di **scoperta**, non nel fuori campione. Nel depeg le
peggiori divergenze sono **AVAX subito dopo la quotazione = book sottile, non stablecoin**.
3. ⚠️ **BNB resta non controllabile** e toglierlo costa **0,75** di mediana di fase (+1,12 → +0,37)
— ✅ **replica esatta del leave-one-out di §21 con implementazione separata**. Contesto onesto:
nella LOO di §21 **LTC (+0,20), BTC (+0,33) e XRP (+0,33) pesano di piu'**, e quelle tre **sono
coperte** dal controllo USD.
**Smentitore residuo dichiarato:** la divergenza del 2025-10-10 e' di **chiusura**; un evento
**intra-giornaliero** della stessa natura sposterebbe il ranking **senza lasciare traccia sulle
chiusure**, e i close giornalieri non lo vedrebbero.
⚠️ *Nota di attribuzione: il file risultava `M` in git perche' **io** (coordinatore) l'avevo incluso
in un commit mentre l'agente ci stava ancora lavorando — non un altro agente. Un `git add -A` durante
un'ondata cattura il lavoro in corso.*
---
## 25 — BIN-FREQ (il binario di frequenza su SKH01, giudicato come candidato)
`scripts/research/r0822b_bin_freq.py` (~400 s, **23 ancore piene**, due esecuzioni indipendenti con
output **numericamente identici**). **144 celle** dichiarate nel docstring **prima di guardare**, piu'
i **71 trial gia' spesi sullo stesso oggetto** (28 VOL-SIZE + 43 scettico) → **conto onesto = 215**:
*riaprire un parametro riapre la sua famiglia.*
**Repliche bit-exact** (`max|dif| = 0`) contro `sleeves._skyhook_returns()` **e** contro
`r0702_anchor_skh01.run_asset`; **titolo dello scettico riprodotto esattamente** chiamando la sua
funzione (`BIN L>=med` +0,080 in 20/23, inverso 0,159 in 0/23).
| | ShFULL | ShHOLD | maxDD | CAGR |
|---|---|---|---|---|
| BASE (libro live 75/25) | 1,626 | 1,037 | 10,4% | 18,6% |
| BIN, peso effettivo lasciato cadere | 1,690 | 1,031 | 10,3% | 17,8% |
| **BIN, controllo ISO-PESO** | **1,589** | 0,956 | 10,0% | 16,8% |
📌 **La statistica che decide non e' l'argmax, e' la MEDIANA DI FAMIGLIA.** Argmax
(`q0,50 w60 h0,10 s+`) ISO **+0,112 in 23/23**; **stima onesta di famiglia +0,007**, con **39/72
celle positive = 54% ≈ monetina**. **L'argmax vale 16× la mediana → punta, non plateau.**
**Controllo di segno: 0/72 celle positive** sulla meta' inversa → la *direzione* e' solidissima.
**Gate:** `marginal_vs_tp01` **ADDS**; selezione **in-sample-only** sceglie la stessa cella mentre
scegliendo **sull'hold-out** ne esce un'altra (0,017) → **il gate ha potenza**;
**`weights_tilt_null` FAIL** (pctl 36-38) **e per giunta inerte** (il binario *abbassa* il peso
effettivo 0,250→0,19, e nella forma di deploy naturale il vettore proposto e' identico a quello
corrente); causalita' verificata con **troncamento diretto** su 52 decisioni, 0 divergenti;
**trasferisce a SKH01_V1** (geometria d'uscita diversa): +0,087 in 20-21/23.
**Il deflated-Sharpe NON e' vacuo — refuta l'ipotesi a-priori che l'agente aveva registrato:**
**0,976** (N=144) / **0,977** (N=215, conto onesto) / 0,948 (N=500), baseline 0,828/0,834. E il
**motivo e' riusabile**: il DSR e' vacuo quando i trial si somigliano (var→0 ⇒ sr0→0 ⇒ DSR≈1 *per
chiunque*); una famiglia **binaria** contiene celle che scartano insiemi di trade molto diversi,
quindi **riacquista potenza**. *Non e' il binario a essere piu' solido: e' la famiglia a essere piu'
larga.* ✅ Terza misura convergente della stessa giornata sul difetto del DSR (con BOCPD e CRITICO).
⚠️ **Il null "con potenza" ha una mediana che NON e' zero, ed e' un fatto di misura:** scartare a caso
il 40% dei trade **danneggia**, perche' lo Sharpe annualizzato va con √(scommesse/anno) — misurato:
gamba 1,107 → **0,883** permutata contro **0,861** previsti da √0,60. Il null resta valido e **piu'
severo** (reale +0,112 vs massimo del null 0,031, p<0,01), **ma risponde a "batte una selezione
casuale?", non a "batte il non filtrare?"**.
🚨 **Due premesse del MIO briefing misurate e REFUTATE:**
(i) *"il binario dimezza gli ordini → migliora l'eseguibilita' e riduce le fee"* — gli ordini
**nettati** calano del **17%**, non del 50%; i sotto-min-order **non si muovono** perche' sono di
TP01; e l'**haircut a $635 e' 0,001 in entrambe le braccia**: non c'era niente da guadagnare.
(ii) *"converti il risparmio di fee in Sharpe con la curva del 26/07"* — **a fee ZERO l'effetto resta
l'87-110%** → non e' risparmio di costo, e' **informazione sul rendimento lordo**, e convertirlo
sarebbe stata un'attribuzione sbagliata.
**VERDETTO: LEAD** (non candidato, non scartato). La **direzione** e' reale e sopravvive a tutto; la
**taglia di una singola cella e' selezione**.
📌 **E la domanda che avevo posto — "+0,080 contro ±0,196 di banda d'ancora, merita?" — era il
confronto SBAGLIATO** (la banda del *livello* si cancella in un disegno appaiato), **ma la risposta
corretta e' PEGGIORE per il candidato**. Criterio dichiarato, 4 gambe: (1) mediana di famiglia ≥ meta'
della cella e >65% celle positive → **FAIL (6%, 54%)**; (2) `weights_tilt_null`**FAIL/vacuo**;
(3) marginale + null con potenza → PASS; (4) taglia ≥ €0,10/giorno per pagare un modo di fallire in
piu' → **FAIL: €0,0113/giorno** ($4,79/anno a $635).
Due prove ausiliarie che chiudono il caso: **due implementazioni difendibili della stessa regola**
(d'accordo sul 97,6% dei trade) danno **+0,066 contro +0,080** — *il 21% dell'effetto sta nel come si
riempie il warm-up*; e **versare €500/mese vale ~1456× l'effetto misurato**.
**Libro, pesi, cron, config INVARIATI.**
📌 **Riapertura pre-registrata: non una data, una SOGLIA DI CAPITALE** — cio' che fallisce e' il
rapporto fra un costo operativo **fisso** e un beneficio **proporzionale**, e nessun dato in piu' lo
cambia (con SE(Sharpe)≈1,4 su 6 mesi nessun forward misura 0,07). €0,10/giorno richiede **~$5.600**
alla stima della cella e **~$53.000** a quella onesta di famiglia → si rivaluta alla revisione dei
**$20k** gia' in calendario, **e solo se la cella e' giustificata da un MECCANISMO** invece che
dall'argmax di una griglia.
---
## 29 — PROP-RECAL (J rifatto con XS01 dalla storia lunga) — **la decisione**
`scripts/research/r0822b_prop_recal.py` (891 righe, 309 s, nessuna rete). **5.212 valutazioni MC**
contate al rialzo; risoluzione dichiarata **±0,010 sui livelli di J, ±0,007 sulle differenze
appaiate**. ✅ **Riproduzione ESATTA cifra per cifra** dei numeri di PROP-ALLOC (J 0,738/0,721/0,335;
P(pass) 82,2/77,3/38,6%; scala 39,28 €/g e 41,7%) piu' **tre controlli bit-exact a 0,0**.
📌 **IL RISULTATO: J non regge alla taglia pubblicata, e il colpevole NON e' la finestra.**
Decomposizione a **un grado di liberta' per volta**, stesso pannello:
| passo | J | Δ |
|---|---|---|
| XS01 = HL 19 gambe, finestra di scoperta (**il pubblicato**) | 0,739 | — |
| → Binance 19 gambe, **date allineate** (VENUE) | 0,732 | **0,006** |
| → Binance **13 gambe** (UNIVERSO) | 0,426 | **0,307** |
| → pannello lungo (FASE) | 0,459 | +0,034 |
| → **fuori campione 2021-2023** (FINESTRA) | 0,520 | **+0,061** |
🚨 **Il 42% del numero pubblicato sta nelle 6 gambe che fuori campione non esistono** (ARB OP SUI APT
SEI TIA) — **e quelle 6 furono messe nell'universo nel 2026-06 guardando la liquidita' HL del 2024+,
cioe' dentro la finestra di scoperta.** La finestra fuori campione, da sola, **migliora**.
✅ Allargare l'universo man mano che le gambe nascono (10→19 espandente) da' **J identico a U13**:
i 0,307 **non si recuperano**.
⚠️ **Errore di metodo catturato prima di pubblicare:** la prima stesura dava al passo venue **0,254**
e avrebbe pubblicato *"Binance costa un quarto di J"*. Era **FASE, non venue**`xsec_engine`
ribilancia sulla parita' dell'indice di pannello, e due pannelli che iniziano a date diverse
ribilanciano in **giorni di calendario diversi**. Allineati i pannelli, il venue vale **0,006** =
✅ **replica indipendente della validazione di XS01-OOS, sulla funzione obiettivo invece che sullo
Sharpe.**
**J onesto** (mediana delle 10 fasi, peso 38/38/25):
| finestra | mediana J | banda p10-p90 | LIVE 75/25 | **delta appaiato** |
|---|---|---|---|---|
| **W-LONG 2021+** | **0,453** | [0,431 0,488] | 0,281 | **+0,175 (10/10 fasi)** |
| W-OOS 2021-23 | 0,504 | [0,455 0,608] | 0,364 | +0,146 (10/10) |
| W-DISC 2024+ | 0,442 | [0,404 0,464] | 0,331 | +0,112 (9/10) |
XS01 standalone fuori campione: Sharpe 1,04, drift 22,7%, **maxDD 19,2%** contro 11,2% dello sleeve
ufficiale → **il rendimento regge, la coda no, e la barriera guarda la coda.**
📌 **Il peso 0,50 non sopravvive; la REGIONE robusta si': w_XS ∈ [25%, 38%] e' entro il 3%
dell'ottimo su TUTTE E TRE le finestre**, discovery inclusa. A 50% J scende a 0,438/0,477/0,408 e il
maxDD di libro risale a 12,6%/11,6%/9,1% (contro 9,6%/9,6%/7,3% a 25%) = **replica
indipendente del punto (ii) di XS01-OOS**.
🚨 **IL NUMERO OPERATIVO, con banda di fase: P(≥50 €/g) da €600 in 36 mesi = 7,8% [7,29,1%], con
P(zero) 25,5%** — contro il **41,7%** pubblicato stamattina. **6,6%** se la firm non lista gli alt;
**4,3%** per il libro live. ⚠️ J e P(≥50/g) hanno **argmax diversi**: si cita il centro della regione
robusta, non l'argmax di finestra.
**Stress ora ancorati al MISURATO** (delta appaiato argmaxLIVE): drift pieno +0,193 · SKH ×0,50
+0,124 · SKH ×0,33 +0,113 · **`XS ×0,00` +0,041** · SKH ×0,33 + XS ×0,00 **0,024** (peggio del libro
live). Lo scenario severo **cambia stato**: non e' piu' *"non sappiamo se il drift esiste"* ma un
contro-fattuale a rendimento nullo, e dice che **XS01 come pura decorrelazione vale +0,04** — tutto il
resto e' il suo drift, che ora e' misurato per **13 gambe su 19**.
**Gate:** lente **accoppiata obbligatoria** ovunque (close-only girata solo come controllo: **regala
+0,020 di J**); **banda di fase di XS01 girata — prima volta sotto la lente prop** (fortuna della fase
canonica solo +0,019, delta positivo **10/10**); null del de-levering **strutturale** (ogni
configurazione valutata a 8 leve). ⚠️ **Banda d'ancora di SKH01 (23 offset) NON girata**, surrogata
col taglio del drift — **e' la distorsione dichiarata due volte e mai rimossa**, ed e' diventata la
gamba (b) del gate.
**VERDETTO: LEAD — ridimensionato di un fattore ~5 sul numero operativo, non falsificato.** L'edge
sopravvive alla storia lunga (+0,175 di J, **10/10 fasi**, col 2022 dentro); crollano il **peso 50%**
e il contributo delle **6 gambe non testabili**, non la finestra.
📌 **`GATE PROP-01` — sostituisce l'attesa di anni, che e' CHIUSA:**
**(a) LISTINO — verifica, €0, BLOCCANTE prima di ogni spesa:** ≥10 delle 13 gambe negoziabili **con
short**; sotto 10 il meccanismo congelato **non ribilancia affatto**. FAIL → si decide sulla riga
senza XS01. *E' la stessa classe dell'errore GTAA01/PRIIPs.*
**(b) BANDA D'ANCORA DI SKH01 SOTTO LA LENTE PROP — misura, data 2026-10-31:** mediana delle
differenze appaiate sui 23 offset, **PASS se > +0,05** (l'agente dichiara **prima** di aspettarsi un
PASS; il surrogato dice +0,11/+0,12).
**(c) CAPITALE:** un'eval HYRO $100k costa **$579 su un conto di $635** — la prima eval consuma il
**91%** del conto.
**`IL CANALE FUNDED: SI APRE A CONDIZIONE DI leggere il listino della firm` — e di citarlo come
P(≥50 €/g) 7,8% [7,29,1%] con P(zero) 25,5%, non 42%.**
---
## 30 — LISTINO (`GATE PROP-01` gamba (a)) — **la verifica da €0, fatta**
Non un agente: eseguita dal coordinatore, perche' e' una **verifica esterna**, non un backtest — ed e'
la gamba **bloccante prima di ogni spesa**. La regola del progetto la impone da luglio: *la
negoziabilita' sul conto REALE va verificata quando lo sleeve entra in RICERCA* (lezione GTAA01/PRIIPs).
📌 **Metodo: NON leggere il sito della firm, interrogare il VENUE su cui la firm esegue.** HyroTrader
esegue su **Bybit** via API (o su Cleo, con dati Binance). Interrogato
`api.bybit.com/v5/market/instruments-info?category=linear` (pubblico, tokenless, **833 strumenti**),
lo stesso percorso che il progetto usa per certificare i feed.
| esito | risultato |
|---|---|
| **U13 (le 13 gambe testabili fuori campione)** | **13/13 `Trading`, `LinearPerpetual`** |
| le 6 gambe che fuori campione non esistono | **6/6 `Trading`** |
| min notional | **$5 su tutte e 13** |
| leva max | 50x-150x |
**`GATE PROP-01 (a): PASS 13/13` (soglia era ≥10).** E sono **perpetual lineari**: lo short e'
strutturale, non un permesso — non esiste un divieto di vendita allo scoperto su un perp.
⚠️ **Cio' che questo NON prova:** che HyroTrader non abbia una **propria** lista ristretta distinta da
quella di Bybit. La sua pagina dichiara *"700+ USDT perpetual pairs"* su un venue che ne ha 833 →
coerente con nessuna restrizione significativa, ma e' la **sua** dichiarazione. Il residuo si chiude
con una domanda al supporto, non con un dataset.
**VALIDAZIONE del modello del progetto (non correzione):** la pagina della firm dichiara
**daily drawdown 4% · max loss 6%**, e `scripts/research/r0725_hyro.py:48-49` usa gia'
`EV_TARGET, EV_DD, EV_DL = 0.10, 0.06, 0.04` e `FU_ML, FU_DL = 0.06, 0.04` → **le regole modellate dal
25/07 sono quelle vere.**
🚨 **UNA CORREZIONE ECONOMICA, invece, c'e': la quota d'ingresso non e' un COSTO AFFONDATO.** La firm
la dichiara **"Refundable Challenge Deposit, returned in full alongside your first funded payout"**
(pagina della firm + fonti secondarie concordi). Il progetto l'ha sempre modellata come **spesa
persa** — e la gamba (c) di `GATE PROP-01` dice *"un'eval $100k costa $579 su un conto di $635 = il
91%"*. **Resta vero che immobilizza il 91% del conto**, ma **non e' vero che lo brucia**: si perde
solo nel ramo in cui non si arriva mai a un payout (**P(zero) 25,5%**), e torna in quello in cui si
arriva. **E' una struttura a opzione, non una fee** → l'EV del biglietto va rifatto.
⚠️ **Qualita' delle fonti dichiarata:** il listino degli strumenti e' **primario e misurato** (API del
venue); le regole di DD sono **primarie ma dichiarative** (pagina della firm); la rimborsabilita' e il
prezzo esatto del taglio $100k sono **primari-dichiarativi + secondari concordi**, non misurati.
📌 **Conseguenza sul gate:** la gamba (a) e' **CHIUSA con un PASS**. Restano la **(b)** — banda
d'ancora di SKH01 sotto la lente prop, che un agente sta girando ora invece di aspettare il 31/10 — e
la **(c)**, che va **ricalcolata** con la quota come deposito rimborsabile invece che come spesa.
---
## 31 — GATE-RECON (cosa direbbero i gate con le serie riparate) — **sola lettura, verificata**
`scripts/research/r0822c_gate_recon.py` (719 righe, ~25 s). **Zero celle di selezione**: e' un audit,
tutte le soglie **lette dai file pre-registrati**, nessun parametro scelto dall'agente.
**Sola lettura provata**: md5 + mtime di **ogni** file `data/paper_*` invariati dopo la corsa.
| gate | serie | n | Sharpe | maxDD | vol ann. |
|---|---|---|---|---|---|
| **STATARB** | **attuale** | 54 | **+1,96** | **2,24%** | 7,88% |
| **STATARB** | **riparata** | 53 | **2,02** | **15,19%** | **31,42%** |
| XSR01 | attuale | 28 | 6,55 | 0,28% | 0,46% |
| XSR01 | riparata | 27 | 0,99 | 0,82% | 2,78% |
| DVOLSPREAD | attuale | 28 | 15,82 | 0,93% | 0,79% |
| DVOLSPREAD | riparata | 27 | 5,21 | 7,11% | 19,36% |
Minuti di mercato registrati al giorno: **3,9 / 41,2 / 2,5** = ✅ replica indipendente dei 4/41/2
pubblicati stamattina.
**`STATARB 27/09 — riparata: RITIRO · attuale: CANDIDATO AL DEPLOY`**
**`XSR01 23/10 — riparata: RITIRO · attuale: RITIRO`**
**`DVOLSPREAD 24/10 — riparata: KILL · attuale: KILL`**
*(Non sono i verdetti dei gate: sono i criteri letti **oggi**, su finestre incomplete — 54/90, 28/90,
28/91 barre. Anticipare un gate pre-registrato e' selezione sull'hold-out, e l'agente lo dichiara.)*
**LA PREMESSA SU CUI POGGIA TUTTO E' ORA CONFERMATA PER VIA DIRETTA, non piu' di traverso:**
`data/_feed_backup/*.prebuild.bak` conserva il **vintage pre-riscrittura** di stanotte →
**0 barre chiuse cambiate su 1.761.259** (BTC/ETH 1h+5m). L'unica riga cambiata per file e' **l'ultima
del vintage, che era aperta** (BTC 21/08: close 73732,5→73690, volume 342→492 = **il difetto stesso,
in chiaro**). Su 62 cicli `paper_prevday` fa 1427/1488 identiche, con tasso di divergenza **piatto
nell'eta'** (2,2-5,1%, nessuna crescita) e concentrato all'ora del cron.
⚠️ **Limite dichiarato:** `hl_*_1d` e `dvol_*` **non hanno vintage su disco** → per XSR01 e
DVOLSPREAD l'evidenza resta **indiretta**.
**Prove d'identita' obbligatorie prima di ogni confronto:** **I1** pannello letto ora == quello del
cron di stanotte (`max|d| = 0`, 3/3, contro lo `state.json` scritto alle 00:35); **I2** barre gia'
chiuse identiche al bit (statarb 6/54, xsr 1/28, **dvolspread 0/28 → per quel monitor la prova I2 NON
ESISTE, dichiarato**); **I3** troncare l'INPUT == affettare l'output (`max|d| = 0`, 3/3).
🚨 **(1) IL VETO D'INTEGRITA' DI DVOLSPREAD NON SCATTA: 28 attive / 28 = 100% in ENTRAMBE le lenti.**
Una serie che misura **2 minuti di mercato al giorno** passa al **100%** un veto progettato apposta per
non far decidere su dati mancanti. **Non e' un problema di taratura:** il veto conta *se il DVOL
c'era*, non *quanto dura la barra su cui c'era***assi ortogonali**. La stessa soglia 0,80 applicata
alla quota di barre **chiuse** leggerebbe **0%** e vieterebbe. **Variante nuova di una regola vecchia:
una barra presente non e' una giornata presente.**
🚨 **(2) Il caso peggiore NON e' quello coi numeri piu' assurdi.** XSR01 (|Sh| ×6,6) e DVOLSPREAD
(×3,0) dicono **lo stesso verdetto** in entrambe le lenti; **STATARB ha |Sharpe| quasi identico
(1,96 contro 2,02) e cambia SEGNO** — ed e' il monitor del gate **piu' vicino**. Un controllo che
cercasse *"numeri troppo belli"* **lo lascerebbe passare**. 📌 **La firma da cercare non e' il
|Sharpe| ma la vol forward molto sotto quella del backtest** (7,88% contro 31,42%).
📌 **(3) L'asimmetria del 25/07 su STATARB:** la diagnostica pre-registrata (statica sempre-short)
**non e' affetta** — si ricalcola dal **pannello**, non dalla serie registrata (varia di 0,01 fra le
due finestre contro 3,97 della strategia). **Al gate si confronterebbe un benchmark GIUSTO con un
numero di strategia SBAGLIATO**, e il margine sembrerebbe **+5,83 invece di +1,87**. Il segno del
margine sopravvive: il difetto ribalta il gate, non questa diagnostica.
📌 **QUANTO COSTA ASPETTARE — l'unico argomento quantitativo su *quando* riparare.** Con
**rigenerazione**: **zero barre perse a qualunque data**; si paga solo il rischio che la riparazione
non arrivi. **Senza**: riparare **oggi** lascia **36/90** barre vere a STATARB (62/90 a XSR01, 63/91 a
DVOLSPREAD); **alla vigilia, 1**. E la riparazione parziale **non contamina la finestra, la accorcia**
— una barra troncata porta ~1/370 della varianza *e* del rendimento di una vera, quindi non pesa:
riparando oggi, il 27/09 si leggerebbe una finestra **piu' corta ma VERA** (SE(Sharpe) ~3,2 invece di
~2,0). **Riparare alla vigilia no.**
⚠️ `implausible_sharpe` **girato per la prima volta sulle serie forward**: chiede n≥30, quindi **2
serie su 3 non sono giudicabili**, e su statarb dice "ok" **in entrambe le lenti** — **il gate non
vede un segno ribaltato**.
---
## 32 — SKH-ANCHOR-PROP (`GATE PROP-01` gamba (b), chiusa oggi invece che il 31/10)
`scripts/research/r0822c_skh_anchor_prop.py` (391 s, nessuna rete). **5.127 celle**, contate al
rialzo, con **griglia congiunta PIENA 23 offset × 10 fasi = 230 configurazioni** × 8 leve — **non** un
campionamento e **non** una somma di marginali (lezione `r0726_loo_deluck`: *la somma delle fortune
marginali non e' la mediana congiunta*).
📌 **La data non aspettava un dato: aspettava che qualcuno misurasse il costo.** Il gate descriveva il
lavoro come *"rifare `pc._hourly_legs` ai 23 offset"*, che costa **0,6 s per offset**. I "~9 min per
asset×offset" sono il costo di `r0726_skh_sigcache`**una computazione che questa misura non usa**.
*Secondo gate d'attesa eliminato oggi dopo quello di XS01-OOS, e per la stessa ragione: la stima del
costo non era stata fatta.*
**`GATE PROP-01 GAMBA (b): PASS`** — delta appaiato mediano sui 23 offset **+0,1162**, banda p10-p90
**[+0,087, +0,152]**, **23/23 offset positivi**, **230/230 celle congiunte positive** (soglia
pre-registrata +0,05). Regione: 38/38/25 +0,116 · **38/25/38 +0,120** · 25/38/38 +0,109.
**Riproduzione 7/7 esatta** dei numeri di PROP-RECAL all'ancora canonica; **bit-exact 3/3 a 0,0**
(gambe orarie contro `pc._hourly_legs()` su 65.219 ore; costruttore di libro contro `PR.rg` a due
pesi), piu' la guardia "confini HTF ⊂ LTF" a ogni offset e l'assert che **l'indice giornaliero e'
invariante all'offset** — senza il quale il bootstrap non sarebbe appaiato.
🚨 **MA il numero operativo scende di nuovo:** l'offset canonico 0 e' al **91° pctl dei 23** e regala
**+0,059 sul delta** e **+0,112 sul livello J**. J del candidato: canonico 0,453 → **mediana d'ancora
~0,347**; maxDD mediano **10,8%** contro 9,6% pubblicato.
**P(≥50 €/g) da €600 in 36 mesi = mediana 4,4% [banda d'ancora 2,5%8,2%], P(zero) 35,3%** — contro
7,8% / 25,5% di stamattina. ✅ All'ancora canonica la macchina **ridice 7,7%**: il crollo e' **fortuna
d'ancora, non disaccordo fra implementazioni**.
📌 **IL RISULTATO INTERPRETATIVO, piu' importante del PASS: la distorsione dichiarata due volte —
*"l'ottimo si appoggia a SKH01, lo sleeve con la fortuna d'ancora piu' grande da restituire"* — e'
MISURATA E REFUTATA nella sua forma forte.** A **`38/25/38` SKH01 sta al medesimo peso del LIVE
(25%)**, la sua ancora si cancella quasi esattamente nella differenza appaiata, e li' il delta e' **il
piu' alto dei tre (+0,120)** con la banda **piu' stretta** (ampiezza 0,032 contro 0,065 e 0,057 delle
due che portano SKH a 38%). **L'ampiezza della banda scala col differenziale di peso su SKH01** — come
l'agente aveva previsto **prima** di misurare. **Cio' che paga e' XS01, non un sovrappeso dello sleeve
fragile.**
⚠️ **Due cose che il PASS non deve nascondere.**
1. **Il gate e' su una DIFFERENZA, il numero operativo e' un LIVELLO:** nella prima l'ancora si
cancella in parte, nel secondo **per niente** → passano insieme e si muovono in modo diverso
(delta 33%, P(≥50/g) 44%). *Un gate superato non e' un numero confermato.*
2. **Il surrogato del 22/08 e' finito vicino al vero per la CANCELLAZIONE DI DUE ASIMMETRIE:**
ricalcolato a peso fisso il taglio del drift da' **+0,076/+0,045** (sottostima il vero +0,116), ma
PROP-RECAL lo calcolava **ri-cercando l'argmax sui 10 pesi migliori** mentre il LIVE resta
inchiodato a 75/25 — sotto stress il candidato puo' scappare da SKH01 e il LIVE no → si gonfia a
+0,124/+0,113. **Il numero era giusto, il metodo no.**
⚠️ **Sensibilita' dichiarata:** il de-luck ×0,89 **su questa dimensione e' un doppio conteggio** (fu
misurato proprio come mediana-ancore/canonica del drift). A ×1,00 il delta sale a **+0,148**, 23/23 →
**tenerlo e' conservativo**.
**Smentitore residuo, fuori dal perimetro della gamba (b):** l'ancora **giornaliera di TP01** (24 ore),
che questa misura **non tocca** e che resta canonica 00:00 UTC = **la piu' fortunata delle 24** per
l'hold-out di TP01. E' la **terza** dimensione, e l'agente la dichiara.
---
## 33 — WORST-DAY (il peggior giorno del libro, misurato invece che assunto)
`scripts/research/r0822c_worst_day.py` (1.112 righe, **12 s**). **847 valutazioni**, soglia EVT
**dichiarata a priori** (95° pctl) e criterio congelato prima delle sezioni decisive → *non c'e' un
massimo scelto su cui barare, quindi non c'e' un DSR da calcolare*.
Il filone che il critico dell'ondata aveva indicato come **la misura di maggior valore mai fatta**:
il gradino di leva vale **14,7a → 12,9a a 1,25x** e **→ 11,6a a 1,50x** al capitale-rendita (⚠️ **correzione 23/08**: la prima stesura scriveva *"1,25-1,50x vale 14,7 → 11,6a, ~€300/mese"* **fondendo due gradini** — il ~€300/mese e' del **1,50x**; a **1,25x** l'equivalente e' **+€164/mese**, ricalcolato sulla tabella netta) (~€282/mese a 1,50x di
versamenti equivalenti, a costo zero) ed era bloccato da **un solo parametro scelto a mano**:
*"un giorno a 10% ogni anno"*.
📌 **Il peggior giorno ha DUE risposte e differiscono di ~2×:** **3,94% in chiusura** (2020-03-13) e
**7,33% al minimo intra-giorno** (mediana del rapporto sui giorni in perdita **1,89×**).
⚠️ **E il critico va CORRETTO nel meccanismo, non solo confermato.** Sui 10 giorni peggiori del
sottostante il libro fa **2,34%** contro **182,1%** del mercato (guadagna in 4/10; il 12 marzo 2020,
43,6%, fa **+3,80%**) — **ma sui 160 giorni di crash perde in media 0,505%**, e l'esposizione di
TP01 scende monotona col crollo (0,096 nella fascia 5/2% → **0,042 sotto il 20%**).
**Il libro non e' immune ai crash: e' immune ai crash GROSSI, perche' li' il trend si e' gia' girato.**
E il suo peggior giorno **non e' un crash: e' uno short squeeze** — SKH01 short con stop 2% che gappa a
**15,77%** di sleeve mentre TP01 e' flat (secondo peggiore 6,67% → **la coda di SKH01 e' un giorno
solo**).
**La coda stimata** (GPD, IC95 bootstrap a blocchi): chiusura **2,90% a 1/1.000 giorni**, **4,55% a
1/10.000** [6,34 / 3,08%]. ⚠️ **Hill dice 7,34%** (ξ 0,34 contro 0,09): **i due stimatori non
concordano → si cita la banda**, non il numero. **Il conto ARITMETICO** (cap + vol-target, che
converte un crash nel suo z-score rendendo il bound invariante alla vol, + gap-through di SKH01):
peggior giorno **possibile** a k=1,00x = **14,32% in chiusura**.
📌 **Quindi il 10% sta al 70% del massimo strutturale: la TAGLIA e' plausibile, la FREQUENZA no**
(1 ogni 67-6.075 anni contro "ogni anno"). **La riserva e' ridimensionata di 2-4 ordini di grandezza,
non falsificata.**
📌 **E la forma della coda non e' la leva:** muove k* di 1-2 unita', **il drift di 6,7**. Anche
prendendo lo stress a mano **alla lettera**: k* 2,95x → mezzo-Kelly **1,48x** → *lo stress bocciava il
gradino DOPPIO, non quello singolo*. **C1-C5 passano tutti** (margine strutturale 2,8×, liquidazione
4×, guadagno a drift 2SE +2,01%/anno).
🚨 **IL RISULTATO CHE NESSUNO CERCAVA, ed e' quello che decide: il cap di `config/live.json` e' un
CLAMP, NON un moltiplicatore.** Morde su **3 osservazioni-asset su 5.650 (0,053%)**: alzarlo da 0,50 a
0,625 lascia il libro a k=1,00x in **5.647 giorni-asset su 5.650**. ✅ **Verificato dal coordinatore:**
le chiavi di `live.json` sono `max_notional_per_asset_usd/_frac`, `min_order_usd`, `disaster_sl_pct`,
`max_data_age_days`, `skh_feed_max_age_min`**non esiste una chiave di scala**; servirebbe toccare
`WEIGHT`/`W_TP01`/`W_SKH` in `src/live/book.py`, cioe' **codice** su un percorso con soldi veri.
**La regola del progetto — *"ogni cambio di SCALA passa dal cap di config, non da `target_vol`"* — non
e' implementabile come scritta.** *Due mesi di discussione su un knob inesistente.*
🚨 **SOTTOPRODOTTO CHE TOCCA OGNI NUMERO DEL PROGETTO: il funding dei perpetual non e' modellato in
NESSUN backtest.** ✅ **Verificato dal coordinatore:** zero occorrenze di `funding` in
`src/backtest/harness.py`, `src/strategies/trend_portfolio.py`, `src/portfolio/{sleeves,portfolio}.py`
**e in tutto `src/live/`**. Proxy Hyperliquid 14,8%/anno × esposizione long media di TP01 0,103·E =
**~1,53%/anno che il libro paga davvero** = **il 9% del drift de-luckato**, cioe' **lo stesso ordine
della correzione d'ancora ×0,89** che il progetto ha misurato con cura.
📌 **Sottoprodotto forense: la lente del critico si IDENTIFICA dai valori che ha pubblicato** (+0,97 e
+0,72 compaiono **solo** nella riga canonica) → aveva usato `book_series('canonical')`, e **su quella
lente il peggior giorno E' un giorno di ribasso** (3,47%, 2025-10-10). *Aveva ragione, con la lente
sbagliata.*
**VERDETTO: LEAD** (misura di politica, non strategia).
**`IL GRADINO DI LEVA A 1,25x: AUTORIZZABILE A CONDIZIONE DI` costruire prima una chiave di scala
esplicita in config, e di rifare `r0726_fee_sensitivity`** — la cui conclusione *"liquidation fee
irrilevante"* **vale solo a nozionale lordo ≤1x**, ed era gia' legata a un test di guardia sul cap.
⚠️ **Nota dell'agente, dovuta:** se si credono **entrambe** le riserve insieme (drift 2SE **e** 10%
annuo) il drift atteso e' **0,61%/anno** → *a quel punto non e' il gradino a essere sbagliato, e' il
libro, e chi usa quella combinazione sta chiedendo di spegnere anche il conto di oggi.*
---
## 34 — CC01-2022 (il cash-and-carry riaperto sul dato che gli mancava)
`scripts/research/r0822d_cc01_2022.py` (~8 s, zero rete). **47 celle** contate al rialzo.
**Perche' si poteva riaprire:** il verdetto del 26/06 poggiava su una ragione **falsificabile e
strutturale** — *"lo storico funding parte dal 2023-05 → manca il 2022, i rischi di coda sono fuori dal
dataset"*. Stamattina BASIS-CALENDAR ha ricostruito **30/30 futures trimestrali scaduti dal 2018-09,
col deleveraging 2022 dentro**. E' l'unica base su cui questo progetto riapre un filone: **dati nuovi.**
**PRIMA della ricerca, la persistenza** (il critico aveva segnalato che i 20 MB vivevano **solo in
uno scratchpad di sessione**): copiati in **`data/raw/fut_deribit/`** — 72 file, 20,3 MB, 601.704 righe
(BTC 240.150 barre orarie / ETH 233.334, 34 contratti per asset, 2018-09→2026-08) + 64.110 ore di
funding e indice per asset dal 2019-04. **Sottocartella con prefisso, mai il namespace nudo**
(lezione SOL: il guardrail *"solo dati certi"* vive nell'**assenza** di un file).
**Guardrail verificato dal coordinatore, non assunto:** `load_data('BTC-30SEP22')` e
`load_data('SOL')`**`FileNotFoundError`**; `load_data('BTC','1h')` → 70.311 barre; namespace nudo
pulito. **Il cron NON li rinfresca** (istantanea al 22/08, contratto in corso troncato) e restano
**fuori dal backup** perche' ricostruibili con ~2.700 chiamate pubbliche.
📌 **Q1 — nel 2022 il carry si INVERTE, e resta invertito per mesi.** Funding annuo **BTC 2,26% /
ETH 6,08%** (contro +16,5/+17,3% nel 2021); giorni a funding negativo **53,2%/58,9%**; basis mediano
del front **12,64% → 1,26%** (BTC) e **12,95% → 0,61%** (ETH). Peggior episodio: **ETH 6,70% di
funding cumulato in 170 giorni**; BTC 3,98% in 71 giorni nel **marzo-maggio 2020** = **un secondo
buco che CC01 non aveva.**
**Q2 — la scala, netta fee:**
| lente | Sharpe | maxDD |
|---|---|---|
| CC01 come pubblicato (funding HL, 2023-05+) | **+12,93** | 0,78% |
| stesso modello, funding **Deribit**, stessa finestra | +7,88 | 0,87% |
| stesso modello, Deribit, **finestra piena (col 2022)** | **+3,72** | 6,43% |
| + base MTM, premio liscio 24h (la lente di HL) | +1,33 | 6,99% |
| + base MTM, **premio grezzo** | +0,22 | **25,54%** |
| **carry ESEGUIBILE a 2 gambe, direzione CC01** | **0,42** | 21,80% |
📌 **E il salto piu' grande NON e' il 2022: e' il VENUE** (+5,04 passando da HL a Deribit, stessa
finestra e stesso modello).
⚠️ **Correzione che l'agente ha fatto a se stesso sulla propria tabella:** aveva scritto *"il buco piu'
grande non era il 2022"* — falso, e' il pezzo singolo maggiore (+4,16). **Il punto vero e' piu' forte:
da solo non basta** (7,88→3,72 fa **ancora** scattare `implausible_sharpe`), e i due pezzi mai
dichiarati il 26/06 valgono insieme altrettanto.
**Gate:** 🚨 **`implausible_sharpe` 5/5** sulle varianti `r=funding` — **compresa quella col 2022
dentro**; **pulito** su tutte le varianti con la base o la seconda gamba. 📌 *Il gate NATO da CC01
continua a segnalare CC01, e smette esattamente quando il rischio entra nel campione — e li' l'edge
non c'e'.* `marginal_vs_tp01`: **DILUTES** (sign +1) / **HEDGE** (sign 1). `deflated_sharpe` **0,363
FAIL** su 47 trial (massimo atteso dal solo rumore **+0,24 > +0,11** del candidato). Null del
de-levering **REFUTED** sulla versione a 2 gambe. **Controllo positivo di causalita'**: togliendo lo
`.shift(1)` il numero **sale** (6,85→7,39) → il test ha potenza. Ancora: fortuna **+0,005 = nessuna**.
**Q3-Q4 — i muri non strutturali, riprezzati.** Lotto minimo BTC $10 / ETH $1 → **l'eseguibilita' non
e' il vincolo** (**5ª volta in questa ondata**); margine iniziale $13. ⚠️ **Ma tutti i futures datati
Deribit sono INVERSE: non esiste una linea USDC datata** — **stesso muro delle opzioni**, e il
collaterale in BTC e' esso stesso esposizione direzionale. **Non risolto**, serve una verifica sul
conto reale.
🚨 **CORREZIONE 2026-08-23 (§39): QUESTO MURO E' FALSO.** Esistono **16 futures datati con settlement
USDC** su BTC/ETH (il piu' vecchio `BTC_USDC-25SEP26`, creato **2026-05-07**), taker **identico al
perpetual** (0,00035) e min-order 0,0001 BTC / 0,001 ETH. ✅ Verificato dal coordinatore con una GET
pubblica. **La svista e' di NAMESPACE, non di fatto:** `get_instruments?currency=BTC` **non li
ritorna** — i lineari stanno sotto **`currency=USDC`** (48 datati in totale). *Il coordinatore ha
commesso la stessa svista al primo controllo e ha ottenuto 0.* **Il muro vero e' un altro: quella
linea ha 3,5 mesi di vita e ZERO roll trimestrali mai eseguiti.** **MAE per trade: 11,68% sulla storia piena → leva max 7,8x/gamba**, contro 3,64% →
20,9x nella sola finestra di CC01 = **2,7× di leva di troppo**; sul carry puro con base MTM, MAE 90g
16,57% → **5,6-6,4x** contro le **~80x** che un maxDD dello 0,8% farebbe credere sostenibili.
⚠️ **Correzione a BASIS-CALENDAR:** il costo di roll e' **0,44%/anno**, non ~1,4% — quello contava il
roll **su entrambe le gambe**, ma **il perpetuo non si rolla**. Correggerlo **non crea un edge**.
🚨 **IL SOTTOPRODOTTO CHE VALE PIU' DEL VERDETTO: la liscezza era una proprieta' della COLONNA, non del
rischio.** sd del Δ-premio giornaliero: **4,2 bps** (`premium` di Hyperliquid) contro **106,2 bps**
(Deribit grezzo) = **25-31×**. Quindi la frase del 26/06 — *"il mark-to-market della base sgonfia lo
Sharpe solo 13→11, il basis-from-data NON e' il rischio vero"* — era **un artefatto della fonte**:
su Deribit lo stesso esperimento fa **10,87 → 1,65 (liscio) / 0,37 (grezzo)** sulla **stessa finestra**.
📌 **Secondo sottoprodotto:** convenzione **inverse ≠ lineare** vale 0,54 di Sharpe e 2,6pp di CAGR
(BTC), concentrati nel 2020-21 — su una coppia inverse con nozionali pareggiati in USD **resta un delta
residuo ≈ basis, che vale piu' dell'intero premio**.
⚠️ **Ipotesi dell'agente smentita in sessione:** il gate causale di CC01 **dodgia** il 2022 (0,9%
contro 6,0%, l'85% della perdita) perche' il funding negativo e' **persistente**.
**VERDETTO: `CC01 COL 2022 DENTRO: RESTA SCARTATO — e per la ragione giusta, ma quella pubblicata era
necessaria e non sufficiente.`**
---
## 35 — FUNDING (il costo che il progetto non aveva mai prezzato)
`scripts/research/r0822d_funding.py` (1.212 righe, 32 s, `--no-net` usa la cache). **Nessuna cella e'
una selezione** → niente DSR da calcolare. Ridotto per budget: muri a 2.000 path (**risoluzione ~1%,
dichiarata**).
Il progetto ha prezzato fee, slippage, min-order, pavimento IB, haircut, fortuna d'ancora, degrado
d'esecuzione, look-ahead, backfill, split, contaminazione EUR/USD, rischio di venue e fisco — **e mai
il costo di TENERE APERTA una posizione su un perpetual.**
| serie | ShFULL | ShHOLD | maxDD | CAGR | drift |
|---|---|---|---|---|---|
| LIBRO 75/25 path live | 1,692 | 1,214 | 11,2% | 20,43% | 19,24% |
| **+ funding** | **1,513** | **1,154** | **11,5%** | **17,87%** | **17,08%** |
| Δ | 0,179 | 0,060 | **+0,3pp** | 2,56% | **2,16%** |
| TP01 canonico | 1,314 → **1,146** | 0,489 → 0,420 | 14,3 → 15,2% | 16,43 → 14,02% | 2,10% |
| SKH01 50/50 path live | 1,247 → **1,154** | 1,456 → 1,439 | 24,6 → 24,8% | 30,56 → 27,59% | 2,32% |
📌 **Il costo va citato CON LA FINESTRA: 2,16%/anno** (2019-2026, proxy inverse sul 40% del campione)
· **1,39%** sulla sola finestra dello strumento vero (≥2022-03) · **0,55%** sul 2025+ — e il 2022 e
il 2026 costano ~0 **perche' il libro era FLAT** (esposizione 0,008 / 0,018), non perche' il funding
sia sparito.
🚨 **IL MECCANISMO, ed e' il risultato trasferibile: esposizione e funding sono POSITIVAMENTE
CORRELATI.** Il tasso che il libro paga davvero e' **1,86-2,55×** l'incondizionato per TP01 e
**2,41-3,44×** per SKH01. **Il prodotto ingenuo "esposizione media × tasso medio" sottostima di ~2×**
— ed e' esattamente la forma della stima grezza da cui e' nato il filone.
❌ **L'ipotesi da cui il filone e' partito — "SKH01 paga meno perche' sta a mercato il 12% del tempo"
— e' FALSA:** 2,24%/anno di sleeve contro **2,02%** di TP01. Quando e' a mercato SKH01 sta a nozionale
**1,0×** (TP01 vol-targeted sta a **0,14×**) **ed entra sui breakout, cioe' quando il funding e' caro.**
**Il peso ottimale resta 0,25** con e senza funding, e il delta e' negativo a **23/23 offset per ogni w**.
⚠️ **Il proxy Hyperliquid era 2,1-2,2× il venue vero** sulle stesse ore (14,8% contro 6,8-7,1%): **due
errori opposti — tasso troppo alto, esposizione condizionale troppo bassa — che quasi si
compensavano.** *Compensarsi non e' misurare.*
🚨 **COSA CAMBIA NEI NUMERI PUBBLICATI:** rendita perpetua **10,73% → 9,14%**; muro
**$276,6k → $325,0k (+17,5%)**; traiettoria da $600 a €250/mese **16,4a con P(20a) 90% → 18,7a con
P(20a) 64%**; **soffitto direzionale ~1,31 → ~1,15**.
📌 **E il maxDD NON si muove (+0,3pp): e' una tassa sul DRIFT, non sulla coda** — per questo colpisce i
**muri** molto piu' dello Sharpe. Il gradino di leva **regge** (k* 13,7 → 12,3, guadagno del passo
1,00→1,25× 12%).
**NON cambia:** il peso **75/25**, il gradino di leva, il maxDD, ne' **l'ordine delle leve del piano**.
⚠️ **AVVERTENZA DEL COORDINATORE, non dell'agente: questa correzione e quella del FISCO si SOMMANO, e
nessuna tabella pubblicata le contiene entrambe.** La riga "€250/mese" vale P(20a) **92% al lordo** ·
**52% col fisco** (07/08) · **64% col funding** (oggi) — le due lenti sono state applicate
**separatamente** allo stesso numero lordo. La tabella con entrambe **non esiste ancora**, e il
risultato congiunto sara' **peggiore di 52%**.
**Validato contro il CONTO VERO, e per ELIMINAZIONE invece che per grandezza:** modello contro
`realized_pnl` di sessione **ETH 0,2% / BTC 7,7%**, mentre le finestre sbagliate sbagliano di 2-4×.
L'identificazione regge perche' nella sessione ci sono stati **0 ordini** (letti dal log) → il P&L di
trading realizzato e' **esattamente zero**, quindi quel campo non puo' essere P&L di trading; e il
segno e' negativo su due gambe **entrambe long**. Funding realmente pagato da quando il libro esegue:
**$0,22**. Convenzione temporale **verificata sui dati** (`interest_8h` = somma delle 8 ore trailing
incluso T: mediana |dif| **2,2e-08** contro 1,1e-06 dell'alternativa). Replica **bit-exact 5/5**.
⚠️ **BUG CATTURATO DAL CONTROLLO POSITIVO, non a occhio, e in famiglia gia' nota:**
`DatetimeIndex.astype("int64")` su tre serie dello stesso progetto con risoluzioni **diverse**
(`[ms]` il funding, `[us]` `al.get`, `[s]` il log) dava funding **0,000%/anno su SKH01** e
**+1,229%/GIORNO su TP01**. **Nessuna eccezione, nessun NaN: due numeri plausibili in due punti
diversi.** E' la stessa famiglia codificata in CLAUDE.md il **01/07** (`DatetimeIndex.view("int64")`
su indici tz-aware non-ns → look-ahead che `causality_ok` non vede). Ora c'e' un controllo che
confronta `searchsorted` con un `groupby` di pandas **e verifica di avere potenza**.
⚠️ **Secondo errore corretto in sessione:** contava `diff(pos) < 0` come vendite — **su un perpetuale
lineare il nozionale scende da solo quando scende il mark.**
**Smentitore principale dichiarato:** sul **pre-2022** l'agente usa l'**inverse come proxy** e i due
strumenti correlano solo **0,27-0,40** orario → se il funding dei lineari nel 2019-2021 fosse stato
molto piu' basso, il 2,16% scenderebbe verso il **1,39%** della finestra pulita.
**VERDETTO: LEAD** (misura di politica, non strategia).
**`IL FUNDING COSTA 2,16%/ANNO NETTO AL LIBRO` — quanto la fortuna d'ancora ×0,89 che il progetto ha
misurato con enorme cura, e sposta i muri di capitale del +17,5%.**
---
## 36 — PIANO-VERO (la tabella congiunta) — **la risposta alla domanda del progetto**
`scripts/research/r0822d_piano_vero.py` (145 s). **Nessuna selezione** → niente DSR. Muri a 4.000
path (la taglia dei pubblicati), traiettorie a 3.000; **risoluzione MC misurata su 3 semi: 0,7% sul
muro, 1,5 €/m sul versamento** — dichiarata.
**Il buco:** le due correzioni misurate al piano — **fisco d'accumulo** (07/08) e **funding** (22/08) —
erano state applicate **separatamente allo stesso numero lordo**, e la tabella con entrambe non
esisteva. L'agente ha dichiarato **prima di misurare** di aspettarsi un congiunto **meno severo della
somma** (meno drift → meno plusvalenza → meno imposta).
**Replica 6/6 prima di pubblicare, due esatte AL DOLLARO:** sul vintage **2026-08-07** lo stesso
codice rida' **$272.061** (lordo) e **$258.338** (netto fisco); riproduce anche funding
2,1597/1,3931/0,5508 %/anno, perpetua 10,73→9,14%, muro +17,5%, traiettoria 16,4a/90% → 18,7a/64%.
⚠️ **Sulla serie di OGGI la stessa riga da' $278.033 (+2,2%)** — 15 giorni di dati in piu', `data/raw/`
gitignored: **stessa lezione GTAA del 07/08** → ogni confronto fra lenti e' fatto **sullo stesso
vintage**.
| lente (de-luck ×0,89) | drift | perpetua | muro | **€250/m da $635: P(20a)** |
|---|---|---|---|---|
| L0 LORDO (26/07) | 17,11% | 10,68% | $278k | **90%** *(pubbl. 92%)* |
| L1 +FISCO (07/08) | 17,11% | 7,52% | $264k | **49%** *(pubbl. 52%)* |
| L2 +FUNDING (22/08) | 15,19% | 9,06% | $328k | **63%** *(pubbl. 64%)* |
| 🚨 **L3 CONGIUNTA** | **15,19%** | **6,35%** | **$313k** | **14%** ← il numero che mancava |
| L3b congiunta, funding "strumento vero" 1,39%/a | 15,87% | 6,72% | $296k | **26%** |
🚨 **LE DUE CORREZIONI NON SI COMPENSANO: SI SOMMANO — e nel versamento necessario il congiunto e'
+10% PEGGIORE della loro somma.**
📌 **L'attesa dell'agente era sbagliata dove conta, e il perche' e' il risultato trasferibile:** il
meccanismo "meno drift → meno imposta" **esiste** (+9,97% di capitale recuperato; il fisco toglie il
50,9% a funding OFF e il 46,0% a funding ON), **ma la funzione versamento→probabilita' e' CONVESSA e
ne ribalta il segno**. Interazione misurata **in tre monete**: **+9,97% sul capitale**, **$815 sul
muro** (0,26%, *sotto* la risoluzione MC), **+26 €/mese sul versamento (+10%, segno stabile su 3
semi**: +26/+29/+22).
**REGOLA: non contare su una compensazione fra correzioni misurate separatamente — la si misura, e in
piu' di una MONETA, perche' un'interazione piccola cambia segno con la moneta.**
**Quanto versare (L3, da $635, nessun lump):**
| orizzonte | P=50% | P=75% | **P=90%** | totale versato @P=90% | **quota del bersaglio** |
|---|---|---|---|---|---|
| **10 anni** | €1.323 | €1.534 | **€1.733** | **$229.189** | **73%** |
| 15 anni | €656 | €784 | **€920** | $183.129 | 58% |
| 20 anni | €360 | €445 | **€541** | $143.804 | 46% |
Il **solo funding** aggiunge **1,27× / 1,33× / 1,40×** sopra la richiesta della lente fisco-only.
**Rendita €/g mediana a 20 anni (L3):** €250/m → **31,85 €/g, P(≥50/g) 8,8%** · €500/m → 63,05,
**P 77,1%** · €800/m → 100,50, **P 99,2%**.
📌 **Il LUMP, che nelle tabelle nette non era mai entrato:** **€10.000 oggi** + €250/m porta P(20a) da
**14% a 45%**; €5.000 la porta a 30%.
**Trappole evitate per costruzione** (tutte gia' pagate da questo progetto): non-arrivo = **+∞, mai
1**; **mediana condizionata mai stampata senza la sua P accanto**; risoluzione MC misurata e
dichiarata. **Rischio di venue NON incluso di proposito**: e' **rovina, non costo** (a p=5% il mediano
e' zero comunque) — dichiarato.
**VERDETTO: LEAD** (misura di politica).
```
CON TUTTE LE CORREZIONI, €250/MESE DA $635: 23,4 anni (mediana incondizionata;
22,1 condizionata all'arrivo), P(20a) 14% [banda funding "strumento vero": 22,2 anni, P 26%]
PER €50/GIORNO IN 10 ANNI SERVONO: €1.733/mese (P=90%), totale versato $229.189
```
📌 **A 10 anni si versano $229k per arrivare a ~$313k: il rendimento fa il 27%, i bonifici il 73%.**
E' la forma piu' netta finora della lezione gia' scritta: **a orizzonte corto non fai lavorare la
strategia, COMPRI il capitale coi bonifici.**
---
## 37 — GATE-C (l'ultima gamba del gate funded, e il biglietto riprezzato)
`scripts/research/r0822d_gate_c.py` (356 s, nessuna rete). **1.347 celle**, **zero di selezione**
(pesi, meccanismo, lente, de-luck e soglie tutti **ereditati e congelati**) → niente DSR da calcolare.
Ridotto e dichiarato: 23 offset × **3 fasi** (lo stesso sottocampione a priori di §32).
**Riproduzioni prima di ogni numero nuovo:** §32 (4,4% [2,5-8,2%], P(zero) 35,3%) **esatta**; §35
(2,16/2,10/2,32%) **esatta**; ladder contro `pc.simulate` **bit-exact, `max|diff| = 0,0` percorso
per percorso**. ⚠️ `r0725_hyro` da' **11%** rispetto al pubblicato ($6.018 contro $6.789) **perche' il
file ri-deriva le serie dal feed corrente, +4 settimane** — stessa lezione del vintage.
**Il biglietto a due stadi** (cella d'ancora **mediana**, non la canonica che sta al 91° pctl; funding
dentro; lente accoppiata; 6.000 percorsi): P(pass) **35,5-52,5%**, **P(payout | pass) 72,3-89,2%**,
E[payout] 1 anno funded $1.016-2.194.
**EV del biglietto $100k in tre convenzioni:** spesa persa **$+1.615** · rimborso al pass **$+1.919** ·
**rimborso al primo payout (la regola vera) $+1.835**. **Positivo in tutte e tre.**
📌 **Ma la correzione economica che aveva motivato il filone vale +13,6% di EV e +0,60pp su P(≥50/g):
reale, misurata, e NON cambia nessuna decisione.**
🚨 **Il funding costa anche qui, appaiato cella per cella (69 celle): dJ 0,0491 (69/69 negative),
dP(≥50/g) 1,60pp (66/69)** → **P(≥50 €/g) 2,6% [1,5%, 4,7%], P(zero) 40,3%**.
**Catena completa del ridimensionamento in una giornata: 42% → 7,8% → 4,4% → 2,6%.**
🚨 **XS01 PAGA il funding, non lo incassa — e il meccanismo e' DIMOSTRATO, non congetturato:**
`max|ΣW| = 2,8e-17` (dollar-neutral **esatto**) ⇒ **il livello del funding non entra, entra solo la
dispersione cross-sezionale**; e il momentum cross-sezionale **compra i perp col funding piu' caro e
vende quelli col piu' basso** → **+1,45%/anno** (IC95 [+1,18, +1,72]; banda onesta [+0,69, +1,45] se
HL e' ~2,1× il venue eseguibile). *L'ipotesi opposta era nel mio briefing.*
📌 **Il progetto conteneva GIA' due modelli contraddittori della quota:** `r0725_hyro:200` la rimborsa
**al PASS** (ottimista), `pc.simulate` non la rimborsa **mai** (pessimista) — e il numero operativo
usciva dal secondo. Le due convenzioni *sbagliate* distano **$84** = prezzo × (P(pass) P(payout)).
📌 **Piu' leva sul funded ALZA E[payout] e ABBASSA P(payout):** chi vuole il rimborso non vuole la leva
massima. **Sono due obiettivi diversi.**
⚠️ **Un numero netto catturato PRIMA di pubblicarlo:** il "capitale d'incrocio €1.000-2.000" **NON e'
un meccanismo**. La ricchezza terminale della strada-biglietto e' **bimodale**, e
`P(cassa finale < $249)` si muove **liscia** (56,3 → 50,8 → 28,3 → 16,9 → 3,9 → 0,0%) mentre la
mediana **salta di un ordine di grandezza** appena quella massa passa il 50%. **La mediana non e' una
statistica robusta qui** — ed e' esattamente il tipo di numero netto che si sarebbe finito per citare
come soglia di progetto.
**IL CONFRONTO CHE DECIDE** (36 mesi, $654 iniziali, **stesso bootstrap appaiato**, funding in
entrambe le strade, fisco 33%):
| versamento | strada | mediana | media | P(<versato) | P(≥50/g) |
|---|---|---|---|---|---|
| €0 | BIGLIETTO | $132 | **$9.592** | 58,3% | 4,2% |
| €0 | LIBRO | **$787** | $803 | 11,8% | 0,0% |
| €500/m | **BIGLIETTO** | **$39.820** | **$46.298** | 21,8% | **13,7%** |
| €500/m | LIBRO | $22.444 | $22.694 | 15,7% | 0,0% |
**`GATE PROP-01 GAMBA (c) RIFORMULATA: PASS 2/2` — due condizioni CONGIUNTE, entrambe verificabili
OGGI, nessuna data d'attesa.**
**(c1) ECONOMICA** — EV del biglietto **> 0 con la quota trattata come SPESA PERSA**, alla cella
d'ancora **mediana**, col funding dentro, sotto lente accoppiata. *Oggi: **$+1.615 → PASS***.
**(c2) DI SOPRAVVIVENZA** — prezzo del biglietto **≤ 2 versamenti mensili del piano in corso**,
perche' il piano d'accumulo e' la leva dominante misurata e **zero e' assorbente**. *Oggi (piano
€500/mese): **$579 contro $1.090 → PASS***.
📌 **La FORMA del gate e' imposta dal costo della misura:** l'EV costa una corsa di script (zero
dollari), **la rimborsabilita' costa $579 e si puo' misurare solo comprando** → un gate d'attesa su
quella sarebbe **superabile solo dopo averlo violato**. Percio' (c1) e' scritta perche' **la
rimborsabilita' NON decida**, e il rimborso diventa **un regalo invece di un'ipotesi su cui si e'
scommesso**.
**`IL BIGLIETTO CONTRO IL VERSARE: MEGLIO — ma solo perche' il piano di versamento c'e', e la ragione
non e' il rendimento, e' il NUMERO DI VOLTE CHE SI PUO' GIOCARE.`** Senza versamenti la stessa
scommessa **perde la mediana 6×** ($132 contro $787) e **vince la media 12×**: e' una lotteria a valore
atteso positivo che un conto da $654 puo' permettersi di giocare **una volta sola**.
⚠️ E il vantaggio poggia **interamente** sul drift di XS01 misurato su **13 gambe su 19**.
**Smentitore che azzera tutto senza che il modello lo segnali:** una **morte-firm ≫10%/anno**.
---
## 38 — SCALE-SPEC (la chiave di scala che non esiste, specificata)
`docs/research/SPEC-scale-key.md` (38 KB) + `scripts/research/r0822e_scale_proto.py` (1,0 s, zero
rete, **zero scritture**). **~630 valutazioni, nessuna cella scelta** → niente DSR.
**Produzione non toccata** (`git status` vuoto su `src/`, `config/`, `scripts/live/`, `tests/`), e
la sez. 0 del prototipo **verifica l'isolamento a runtime** — *ed e' fallita su se stessa alla prima
stesura, che e' il modo giusto per un controllo di scoprire che funziona.*
**Replica a k=1,00 superata 6/6** contro WORST-DAY (peggior giorno 3,95% il 2020-03-13, bound
strutturale 14,32%, morso del clamp 3/5.648 contro 3/5.650, drift e vol al centesimo).
| | k=1,00 | **k=1,25** |
|---|---|---|
| Sharpe FULL | 1,5051 | **1,5051** (invariante) |
| drift / vol | 17,11% / 11,37% | 21,39% / 14,21% |
| g(k) esatto (CAGR geom.) | 17,90% | **22,61%** |
| maxDD storico | 12,17% | 15,01% |
| peggior giorno possibile | 14,32% | 17,90% |
| **costo di un disaster-SL** | 30,0% | **37,5%** ← la guardia che morde |
| margine di liquidazione | 15,8x | 10,1x |
⚠️ **CORREZIONE A UN NUMERO CHE AVEVO SCRITTO IO** (nel briefing e in CLAUDE.md): *"il gradino
1,00x→1,25-1,50x vale 14,7 → 11,6 anni, ~€300/mese"* **fondeva due gradini**. §2 da' **1,25x → 12,9a**
e **1,50x → 11,6a**; il ~€300/mese e' del **1,50x**. Ricalcolato sulla tabella netta: **1,25x =
+€164/mese equivalenti** (l'interpolazione riproduce €282 per 1,50x = controllo superato).
**Tre risultati che il mandato non prevedeva:**
1. 🚨 **`test_leva_massima_da_config_resta_sotto_o_uguale_a_1x` NON si rompe — ed e' PEGGIO che
rompersi.** Misura `frac · n_asset` mentre la grandezza vera diventerebbe `frac · n_asset · scala`
**continua a passare e smette di controllare**. **4ª occorrenza della forma "un controllo puntato
su una configurazione diversa da quella che gira"** (dopo `fee_watch` sugli inverse, la taratura di
`venue_watch` con bitfinex, i test di `book_live` senza potenza a libro flat). **Va cancellato con
nota, non aggiustato.**
2. 🚨 **La guardia che morde per prima e' il DISASTER-SL, non il peggior giorno:** dal bound
strutturale k ≤ 3,49x, **dal disaster-SL k ≤ 1,67x** = **2,1× piu' stringente**. **C1 di WORST-DAY
guardava la grandezza sbagliata.** → il tetto giusto e' l'invariante
`n_asset · frac · scala · disaster_sl_pct ≤ 0,50`, che lega **tre** chiavi.
3. 🚨 **Il tetto va sul PRODOTTO, non sulla chiave:** `frac=0,625` + `scala=1,25` fa leva **1,562x** e
**passerebbe** un tetto *"scala ≤ 1,25"*. Ed e' concreto: WORST-DAY ha appena pubblicato che alzare
`frac` da solo *"non produce k=1,25"***combinato con la scala lo produce eccome**.
**Gate proposto `GATE SCALA-01`** — 9 condizioni, fra cui **A2** (180 giorni sul gradino precedente),
**A5** (tetto sul **prodotto**), **A6 anti-recency** (`k_ammesso` calcolato **togliendo gli ultimi 90
giorni** dev'essere ≥ k richiesto) e **A9** (11 test verdi), piu' un sorvegliante giornaliero a **tre
stati**. Nasce dal fatto misurato che **la scala e' invisibile a tutti i gate esistenti**: Sharpe
**1,5051 identico** a tutte e 5 le celle di k → `deflated_sharpe` e `marginal_vs_tp01` **non
falliscono, non vedono la variabile**. ✅ `weights_tilt_null` invece **passa e con potenza**: peso
implicito TP01 **0,750000 a ogni k**, `max|target(k) k·target(1)| = 0,00e+00`, e il **controllo
positivo** (scala sulla sola gamba TP01 = cio' che farebbe `target_vol`) lo porta a **0,789** e viene
smascherato.
**VERDETTO: LEAD** (specifica di processo).
**`LA CHIAVE DI SCALA: SPECIFICATA MA CON UN NODO IRRISOLTO`** — `execution.py:196-223` **ri-ancora
il disaster-SL al mark a ogni giro** (tolleranza 5%): il **30% e' ROTOLANTE, non un pavimento**.
Se e' cosi', il 37,5% e' il costo di **un episodio** e un ribasso lento ne produce **piu' d'uno**, e
il margine 1,33x del gradino non e' quello vero. ⚠️ **Letto nel codice, NON misurato** — e il log non
lo permette (servirebbe `pos_prima`): **non ricostruibile a posteriori.**
**Secondo smentitore, con soglia dichiarata:** il ramo di **fallback dell'equity** oggi scatta
**0 volte su 1.442 giri**; se superasse il **2% dei giri in 90 giorni** il libro girerebbe a leva
**mista** e `g(k)` smetterebbe di descriverlo.
---
## 39 — FUNDING-AVOID (evitare il funding: datati e spot)
`scripts/research/r0822e_funding_avoid.py` (1.141 righe, ~45-56 s). **48 + 138 valutazioni**, nessuna
selezione (segnale e pesi **congelati**) → niente DSR. ✅ Replica: **2,161%/anno riprodotto** e
protetto da `assert` prima di ogni delta; muri A/F **identici ai pubblicati**.
**L'unico filone della giornata che poteva RESTITUIRE drift.**
| variante | ShFULL | ShHOLD | drift | Δdrift | muro |
|---|---|---|---|---|---|
| **A) perp (oggi)** | 1,513 | 1,154 | 17,08% | — | **$325,0k** |
| B) tutto sui datati | 1,495 | 1,129 | 17,43% | +0,35% | — |
| D) TP01 datato + SKH01 perp | 1,507 | **1,118** | 17,53% | **+0,47%** | $319,5k |
| **E) TP01 SPOT + SKH01 perp** | **1,649** | **1,203** | 18,63% | **+1,55%** | **$289,6k (10,9%)** |
| F) nessun carry (irreale) | 1,692 | 1,214 | 19,24% | +2,16% | $276,6k |
📌 **La tesi condizionale REGGE ma non basta.** Funding condizionale **1,94×/2,59×** l'incondizionato
(✅ replica indipendente del 1,86-2,55× di ieri), basis solo **1,47×/1,66×**: in **livello** i due
carry sono identici (~6,4-7,4%), il datato vince **solo perche' si riprezza meno**. Ma il vantaggio e'
**tutto 2019-2023** e vale ~0 o e' avverso dal 2024 → **ShHOLD 0,034, negativo a 0/23 offset**, e il
**gate iso-volatilita' FALLISCE** (1,507 contro 1,513).
🚨 **L'ESTIMATORE ARITMETICO INVENTA META' DELL'EFFETTO.** La media delle differenze di rendimento fra
due strumenti sullo stesso sottostante contiene `(var A var B)/2`: qui vale **1,48% (BTC) / 2,60%
(ETH) l'anno**, cioe' **2-4× l'effetto cercato**. Controllo che lo rende visibile: il perpetual
"sovra-rende" l'indice di +0,4/+0,5%/anno con l'aritmetico e **~0 col log**. **REGOLA: il carry si
misura sul LOG del rapporto dei prezzi** — stessa forma della regola UCITS del 26/07 (*"la deviazione
fra due veicoli sullo stesso indice si misura sul rapporto cumulato, mai sulla media delle
differenze"*), ripassata in veste nuova.
⚠️ **Bug catturato in sessione, stessa famiglia di quello di ieri sera, e NON visto dal numero:**
`fund_*.parquet` etichetta l'indice **all'istante T**, `al.get(a,'1h')` etichetta la barra **all'inizio**
→ appaiarle **sfasa di un'ora** (corr **0,996 al lag +1**, ~0 al lag 0), gonfia la sd della base da 8 a
**68-86 bps** e produceva un finto **"+0,32%/anno" nel verso atteso**. 📌 **Si e' visto dalla
VOLATILITA' (+1,07pp su una strategia identica), non dal numero** — che era plausibile e nel verso
che l'agente si aspettava. Riparato con controllo positivo che fallisce se lo si sbaglia; il pezzo
vero vale **+0,07%/anno**.
📌 **Il cambio si giudica per SLEEVE:** SKH01 sui datati **peggiora** — turnover **48-57×/anno** contro
6,6-8,4× di TP01, quindi lo stesso mezzo spread gli costa **7 volte tanto**, e paga anche piu' carry.
Il netting TP01/SKH01 vale 1-2%: separarli non e' un argomento contro.
🚨 **IL SOTTOPRODOTTO: lo strumento a carry ZERO esiste ed e' lo SPOT** (`BTC_USDC`/`ETH_USDC`, taker
**0,0** oggi, min 0,0001). TP01 e' long-flat e supera 1,0× nello **0,102%** dei giorni → il tetto non
morde. **+1,55%/anno di drift a volatilita' IDENTICA**, muro **10,9%**, e supera il gate iso-vol.
⚠️ **NON e' un candidato, per tre ragioni dichiarate:** (a) **SKH01 non e' esprimibile sullo spot**
(e' long/short); (b) la **fee 0 e' dichiarata temporanea** e **`fee_watch` non sorveglia lo spot** (se
sparisse, **13% del vantaggio**, misurato); (c) 🚨 **la domanda fiscale aperta vale PIU' del
risparmio** — se i derivati sono `c-quater` (26%) e lo spot `c-sexies` (33%), **7 punti su un CAGR del
17,9% fanno ~1,25%/anno**, cioe' **piu' di quello che lo spot porta**.
**VERDETTO: `ESPRIMERE IL LIBRO SUI DATATI: COSTA 1,69%/ANNO CONTRO 2,16% DEL PERP → NON CONVIENE`**
(i 0,47 punti risparmiati si pagano con 0,034 di ShHOLD, negativo a 0/23 offset, e il gate iso-vol
fallisce). **SCARTATO** sui datati, **LEAD** sullo spot per la sola gamba TP01 — subordinato alla
domanda fiscale, che va posta al commercialista **prima** di qualunque prova.
---
## 40 — SL-ANCHOR (il nodo del disaster-SL, sciolto)
`scripts/research/r0823_sl_anchor.py` (**2,0 s**, sola lettura). **42 celle**, nessuna riduzione per
budget. ✅ **Sola lettura provata**: `git status` mostra solo questo file; il ramo venue fa **2 sole**
`get_open_orders` e si astiene nei minuti :05-:10 e :24-:30.
🚨 **La dichiarazione di non-misurabilita' della SPEC era FALSA: il log bastava.** Ieri notte
`SPEC-scale-key.md` scriveva *"letto nel codice, NON misurato — il log non lo permette (servirebbe
`pos_prima`): non ricostruibile a posteriori"*. **Terza conferma della regola del 26/07: un blocco
dichiarato e' un'IPOTESI, non un fatto.**
📌 **L'agente ha scritto l'attesa PRIMA di guardare, derivandola dal codice — e ha predetto le soglie
esatte:** rotolante e **simmetrico**, con innesco a **+5,263%** (salita) / **4,762%** (discesa),
perche' il fattore 0,70 si semplifica e la condizione `|stpwant|/want ≥ 0,05` diventa una condizione
**sul mark**, non sullo stop.
**Misura sul log di produzione** (1443 giri, 60,1 giorni, 2840 righe-asset): i 15 `placed` si
scompongono in **5 prime aperture + 7 ribilanci + 3 A POSIZIONE FERMA**. Le tre — 21/08 00:07 BTC,
06:07 ETH, 22:07 BTC — hanno azione `HOLD (a target)`, **0 ordini**, e **trigger spostato**: salti
**+5,74% / +5,81% / +5,38%**, tutti **appena sopra il +5,263% predetto**.
**Conferma dal venue:** la posizione BTC e' aperta dal **19/08 15:07**, l'ordine di stop sul book e'
stato creato il **22/08 01:07****l'ordine e' 2,5 giorni piu' giovane della posizione che protegge.**
🚨 **MA LA CONSEGUENZA CHE BLOCCAVA IL GRADINO E' REFUTATA, e va nel verso OPPOSTO al timore:** uno
stop che segue il prezzo **si allontana dal mercato**, quindi scatta **meno**. Episodi su storia reale
(caso peggiore: sempre long, rientro immediato): a **1h** — la cadenza che gira — BTC `roll` **0**
contro `floor` 1; ETH `roll` **1** contro 1; **mai piu' di 1 in 30 giorni**. Caduta massima storica
dentro un giro: BTC 1h **23,17%**, ETH **30,35%**, contro i ~26,5-30% che servirebbero.
📌 **E nell'outage — l'unico scenario per cui il bracket esiste — il ri-ancoraggio e' SPENTO per
costruzione**: nessun giro di cron, nessun ri-piazzamento ⇒ **un episodio solo**.
**⇒ Il 37,5% resta il costo di un episodio singolo, il margine 1,33× di WORST-DAY e' quello vero, e la
sua gamba REGGE.**
**Due cose da registrare, entrambe INDIPENDENTI da k:**
1. ⚠️ **Il nome inganna: "disaster-SL 30%" suggerisce un massimo di perdita per trade che NON
ESISTE.** Su cicli a ingresso proprio, il rotolante lascia passare perdite oltre 30% **senza
scattare** nel **0,03% (24h) / 0,96-2,84% (7g) / 7,22-13,33% (30g)** dei cicli, e il peggior DD
dall'ingresso e' **60,6% BTC / 61,5% ETH** contro 38,3%/45,4% del pavimento.
2. 🚨 **L'accumulo e' funzione della CADENZA DEL CRON, non della leva — e c'e' una trappola viva in
produzione:** il docstring di `book_execute.py` prescrive *"ogni ~230 minuti"* mentre **il cron gira
ogni ora**. Chi "correggesse" la cadenza verso il docstring sposterebbe il libro sulla riga **4h**,
**dove BTC raddoppia gli scatti** (`roll` 2 contro 1). A 24h ETH arriva a 5, con 2 in 30 giorni.
⚠️ **Trappola n.10 del brief catturata in sessione:** la colonna "perdita dall'ingresso" della prima
stesura era un **artefatto** (posizione aperta dal 2018 ⇒ era il DD di un buy&hold pluriennale) →
dichiarata e **rifatta con cicli a ingresso proprio**. E una prima versione della simulazione e' stata
**scartata** perche' il rientro avveniva fuori dal giro di cron (irrealistico).
**Controllo positivo superato** (obbligatorio): lo stesso esercizio applicato a un'implementazione
**a pavimento** risponde `ok` → l'esercizio **distingue** le due implementazioni, non passa e basta.
**Guardia anti-rete superata**: la sottoclasse che esercita il vero `ensure_disaster_sl` ha `_post`
che **solleva**, e l'esercizio e' riuscito ⇒ **nessuna chiamata di rete e' partita da quel percorso.**
⚠️ **Limite dichiarato:** **0 ri-ancoraggi verso il BASSO osservati su 3** — i 2 mesi di vita del libro
sono **un solo regime** (BTC da ~$66,5k a ~$78,6k) e non c'e' mai stato un calo del mark >4,76% con
posizione aperta. **La simmetria e' un fatto di CODICE** (un solo `abs()`, esercitato in entrambi i
versi), **non un fatto OSSERVATO**: la prima osservazione utile arriva al primo ribasso >5% con
posizione aperta.
📌 **Nota di metodo:** la storia degli ordini **non e' raggiungibile dal percorso del conto** — il
gateway `cerbero-mcp` espone 32 tool Deribit e **nessuno** e' `get_order_history_by_currency`. Le
chiavi dirette appartengono a un altro progetto e **non sono state usate**: sarebbe stato inventare un
percorso, *e la domanda non ne aveva bisogno.*
**VERDETTO: `IL DISASTER-SL E' ROTOLANTE (costo vero 37,5% contro 37,5% — un episodio solo alla cadenza
di produzione; sale a ~75% solo con cron a 24h, che non e' la configurazione che gira)`.**
---
## — NOTIFIER (audit di fatto, coordinatore) — l'allarme puo' non arrivare, e nessuno lo sa
**Non e' un filone di ricerca: e' un difetto di produzione trovato leggendo i log mentre l'ondata 7
girava.** Nessun file di produzione toccato.
**Come e' venuto fuori.** Il giro `cron_daily` di stanotte finisce con
`NON inviato (config Telegram assente o rete KO)`. La nota conflaziona due cause; **la prima e'
falsa** — `TELEGRAM_BOT_TOKEN` e `TELEGRAM_CHAT_ID` sono **presenti** in `.env`, e
`src/live/notifier._cfg()` lo legge (verificato). Quindi la causa e' la rete, e il messaggio manda
a controllare la configurazione. E' la **stessa forma** del difetto codificato il 29/07 sul
`venue_watch` (*"una nota di diagnosi cablata e' peggio di nessuna nota"*), su un percorso diverso.
**Il difetto vero, che e' piu' grande della nota.** `src/live/notifier.send()`:
```
urllib.request.urlopen(url, data, timeout=10) # UN tentativo
except Exception: return False # esito ingoiato
```
- **nessun retry** — un singolo blip di rete perde il messaggio;
- **l'esito non viene registrato da nessuna parte**: `notify()` ritorna `bool` e
`scripts/live/venue_watch.py:80` **non lo guarda**; `logs/cron_book.log` contiene **0**
occorrenze di un qualsiasi esito d'invio (verificato con grep). *Quando serve sapere se
l'allarme e' arrivato, l'informazione non e' stata scritta.*
- 🚨 **e lo stato viene marcato PRIMA dell'invio.** In `src/live/venue_watch.lock_step`/streak
la riga `new.alerted = True` sta **dentro la logica pura**, e viene persistita comunque; alle ore
successive `already = st.alerted and st.sign == sign` fa tornare `"WATCH"` invece di `"ALERT"`
**`notify` non viene piu' chiamata per quell'episodio**. Un 🚨 perso **e' perso per l'episodio
intero**, e gli episodi storici (Mt.Gox, FTX, Bitfinex 2018-19) durano **da 200 a 2.324 ore con
segno costante**: e' esattamente il caso in cui la ri-notifica non arriva mai.
**Quanto vale, misurato.** Sullo stesso `send()`, il digest giornaliero ha tentato **29** invii e
ne ha **falliti 2****6,9%**, IC95 Wilson **[1,9%, 22,0%]**.
⚠️ **Fonte del numero, dichiarata:** e' il percorso del **digest** (messaggio lungo, una volta al
giorno), usato come **proxy** del percorso d'allarme (messaggio corto, orario) — che **non ha
nessun dato proprio, ed e' questo il punto**. Stessi endpoint, stesso timeout, stessa funzione.
**Perche' conta piu' del suo numero.** L'economia del `venue_watch` (26/07) e' calcolata assumendo
che il vero positivo **arrivi**: costo atteso di un falso allarme 0,248% di equity contro il
**100%** che un vero positivo evita, break-even `p > 0,031%`. Una perdita del ~7% degli allarmi
non ribalta quel conto — ma **sorveglia l'unico rischio che il progetto ha prezzato come capace di
portare il conto a zero** (P(perso tutto) 10/18/34/64% a p=0,5/1/2/5%), e la sorveglianza e'
l'unica mitigazione rimasta dopo la decisione del 26/07 di stare **100% su Deribit fino a $20k**.
*Su una perdita totale, un allarme su quattordici che non arriva non e' un arrotondamento.*
**Cosa NON e' stato fatto, e perche'.** Nessuna riparazione: `src/live/notifier.py` e
`scripts/live/venue_watch.py` sono produzione, il cron esegue dalla working tree, e un ramo di
ricerca non manda codice live. La riparazione e' piccola e ha tre pezzi indipendenti — (a) retry
con backoff su `send()`; (b) **registrare l'esito** nel punto in cui l'eccezione viene ingoiata
(la regola del 29/07, mai applicata al notifier); (c) marcare `alerted=True` **solo a invio
riuscito**, cosi' che un allarme non consegnato **si ripresenti** l'ora dopo. Il pezzo (c) e'
quello che cambia il comportamento e va deciso dall'operatore: rende l'allarme ripetitivo finche'
non passa, che e' il verso giusto per un 🚨 e il verso sbagliato per un ⚠️.
⚠️ **Cio' che questo audit NON dice:** che il `venue_watch` non funzioni. Il rilevatore e' tarato,
validato su un controllo positivo (22 episodi Bitfinex) e ha 1 solo falso allarme in 8 anni. Il
difetto e' **a valle del rilevatore**, nel trasporto — la parte che nessuno aveva guardato perche'
non produce numeri.
**VERDETTO: `LA RETE DI SICUREZZA HA UN TRASPORTO SENZA RETRY, SENZA REGISTRO E CON LO STATO
MARCATO PRIMA DELL'INVIO — ~7% DEGLI ALLARMI PUO' NON ARRIVARE, PER L'EPISODIO INTERO`**
---
## 42 — TP01-LS (la gamba short del trend a 1d)
`scripts/research/r0823_tp01_ls.py` (**4,4 s**). **4 trial dichiarati** (floor ∈ {0, 1/3, 2/3, 1}
sul solo TF di deploy); le **24 ancore non sono trial** e sono giudicate con `anchor_luck_band` /
`anchor_luck_delta`. Nessun file di produzione toccato.
**Meccanismo congelato, UN grado di liberta'.** `TrendPortfolio` di produzione **importata e
sottoclassata**: l'unica riga diversa e' `np.clip(direction, floor, None)` al posto di
`np.clip(direction, 0, None)`. `net_returns` (shift causale + fee) **ereditata**.
**Replica bit-exact a 4 vie, `max|diff| = 0.0`:** floor=0 == `CANONICAL(long_only=True)`;
**floor=1 == `CANONICAL(long_only=False)`** — cioe' la riga nuova coincide con la produzione a
**entrambi** gli estremi, e il codice davvero nuovo sono i soli due floor intermedi; sleeve 50/50 ==
`sleeves._tp01_returns()`; `candidate_daily(floor=0)` == `tp01_baseline_daily()`.
**Controlli positivi 4/4**, fra cui il piu' importante: **gate iso-vol puntato sulla leva pura**
(canonico ×1,3) → dCAGR grezzo **+5,05%** che diventa **+0,000000** iso-vol — *il gate riconosce la
leva travestita*.
**Attesa a priori del coordinatore, dichiarata prima di misurare:** *"il guadagno sara' un anno
solo, il 2022"*. **Confermata e superata.**
| floor | ShFULL | ShHOLD | CAGR | drift | vol | maxDD | turn/a |
|---|---|---|---|---|---|---|---|
| **0 (canonico LF)** | **1,305** | 0,441 | **16,32%** | **15,12%** | 12,14% | **14,31%** | 7,99 |
| 1/3 | 1,199 | 0,674 | 15,53% | 14,44% | 12,71% | 16,49% | 10,61 |
| 2/3 | 1,030 | 0,546 | 13,99% | 13,09% | 13,61% | 18,12% | 12,75 |
| 1 (LS pieno) | 0,855 | 0,433 | 12,37% | 11,66% | 14,94% | 20,61% | 15,02 |
**Drift: NO, monotono decrescente. Gate iso-vol: FAIL 3/3** (k = 0,955/0,892/0,813 → dCAGR
**1,49% / 3,83% / 6,19%**). **Non e' leva travestita, e' peggio:** alza la vol **e** abbassa il
ritorno.
**Banda d'ancora (24 ore, mediana delle differenze APPAIATE):**
| floor | dShFULL | dShHOLD | dDRIFT | dMAXDD |
|---|---|---|---|---|
| 1/3 | **0,114** [0,149,0,076] **0/24** | +0,219 24/24 | 0,78% 0/24 | +3,33pp 24/24 |
| 2/3 | **0,224** 0/24 | +0,258 24/24 | 1,29% 0/24 | +5,12pp 24/24 |
| 1 | **0,354** [0,450,0,251] **0/24** | +0,292 23/24 | **1,91% 0/24** | **+8,80pp 24/24** |
📌 **Il 2022, e la risposta e' piu' netta dell'attesa.** dSharpe per anno a floor=1: 2019 0,10 ·
2020 **0,85** · 2021 0,07 · **2022 +1,84** · 2023 **1,01** · 2024 0,61 · 2025 +0,27 · 2026 0,68
**2/8 anni positivi**. **Senza il 2022 il divario RADDOPPIA** (dShFULL 0,406 in 0/24, dDRIFT
3,71%, iso-vol dCAGR **7,44%**). **Il 2022 non e' l'anno che regge la tesi: e' l'unico che la
tiene a galla a meta'** — nemmeno con lui dentro la short arriva in pari.
**Marginale NEUTRAL 3/3** (corr→TP01 0,93/0,87/0,79, alpha **0,21 / 1,40 / 2,60%/anno**,
`multicut_persistent=False`, `robust_oos=False`). Diagnostica: e' un **hedge debole**
(corr(Sharpe-TP01 annuo, uplift) 0,83…−0,87), non alpha.
📌 **Il gate che chiude la faccenda: selection-on-holdout.** Sharpe in-sample (<2025) **1,488** /
1,322 / 1,151 / 0,972 → la cella scelta **al buio** da `select_cell_insample` e' **il canonico**;
quella scelta sull'hold-out e' floor=1/3. **Il guadagno hold-out non e' selezionabile.**
⚠️ **L'unica cosa che va nel verso della short, riportata per intero:** dShHOLD **+0,292 in 23/24**
ancore — ma **all'ancora canonica vale 0,008** (p10 +0,094, p90 +0,541). E' il caso **speculare**
della lezione del 26/07: li' l'ancora canonica *inventava* un danno, qui ne *nasconde* un vantaggio.
Resta un hold-out di 1,6 anni, non selezionabile, con multicut negativo in 6 anni su 7.
**Protezione — la short erode proprio cio' per cui TP01 esiste.** Criterio (B) di `edge_watch`
(DD sleeve < 75% del DD buy&hold negli anni di sinistro): canonico **0/8 violazioni**,
**floor=1 viola 1/8** (2023, 0,80); maxDD full 14,31% → 20,61%.
**E non e' morte-per-fee:** a **fee ZERO** 1,338 contro **0,904**. L'edge lordo non c'e'; il
turnover raddoppiato e' un'aggravante, non la causa.
**Libro 75/25:** ShFULL 1,814 → 1,347, maxDD 9,42% → 14,44%, banda **dSh 0,356 in 0/24**.
**Ridondanza con SKH01: no, e non aiuta** — la gamba short isolata ha corr **+0,10** con SKH01 ma
Sharpe **0,335**: non e' ridondante, e' perdente.
**Eseguibilita' a $635:** haircut **±0,002** (**5ª volta nell'ondata** che l'eseguibilita' non e' il
vincolo). 📌 **Trovato per strada:** `src/live/book.py` contiene `max(tp_frac, 0.0)` → **il
long-flat e' cablato anche nell'ESECUTORE**, non solo in `CANONICAL`.
**DSR 0,997/0,988/0,962** con sr0 nullo 0,208 su N=4 — **e non e' il gate che decide**: con 4 celle
quasi identiche sr0 e' piccolo per costruzione (è la lezione §10 del 22/08 vista dal lato buono).
⚠️ **Errori catturati dall'agente su se stesso:** (i) il trial set del DSR era costruito **a mano**
invece che preso da `select_cell_insample` — due percorsi per lo stesso numero e' esattamente cio'
che il gate codificato evita; ora sono confrontati e coincidono; (ii) un `:+.2f` su una frazione
stampava **+0,09pp** invece di **+8,80pp**.
**Cosa NON e' misurato, dichiarato:** il **funding** (nessun backtest del progetto lo modella, §35)
— e' l'unica voce che potrebbe spingere verso la short, ma l'agente ne da' un **argomento, non una
misura** (ordine ~1-2%/anno contro 1,91% di drift perso): si chiude con `r0822d_funding.py`.
Inoltre: nessun TF diverso dal 1d (riaprirlo riapre la **famiglia**), banda del libro con SKH01 alla
sola ancora canonica, tutto **close-only**.
**VERDETTO: `LA SHORT DEL TREND A 1d NON PAGA IL PROPRIO COSTO SU NESSUN ASSE CHE DECIDE`**
SCARTATO. **Libro, pesi, cron, config INVARIATI.**
---
## 41 — TP01-SIZE (una size che risponde alla convinzione)
`scripts/research/r0823_tp01_size.py` (**8,4 s**, nessuna rete). **60 celle dichiarate prima di
guardare** (`rho` = g(1/3)/g(1), 10 valori × `q` = esponente del vol-targeting, 6 valori) × 24
ancore = 1.440 valutazioni di sleeve + 3 controlli positivi. **Segnale CONGELATO** (TSMOM 30/90/180,
long-flat): cambia solo la mappa `convinzione → size`.
**Replica bit-exact**: `target_series` vs `TrendPortfolio.target_series` **max|diff| = 0**;
rendimenti vs `sleeves._tp01_returns()` **max|diff| = 0** (n=2720).
⚠️ **Sottoprodotto sull'harness:** `altlib.tp01_baseline_daily()` **NON e' bit-exact col sleeve**
1 ulp (1,11e-16) su **1863/2720 giorni (68,5%)**, perche' `_to_daily` fa
`(1+r).resample("1D").prod()-1`, che e' un no-op **algebrico** ma non in virgola mobile su una serie
gia' giornaliera. Innocuo, ma *"bit-exact vs altlib" non e' un controllo ottenibile*: chi lo pretende
insegue un fantasma.
🚨 **CORREZIONE ALLA PREMESSA DEL MANDATO (mia), verificata al sorgente.** Il briefing diceva che
la convinzione e' *"spesso 1/3 o 2/3"*. **Il bucket 2/3 e' aritmeticamente impossibile:**
`tsmom_blend` media **tre `np.sign(...)`** → la direzione vive in **{1, 1/3, +1/3, +1}**, e dopo il
clip long-flat in **{0, 1/3, 1}** (misurato BTC: 44,2% / 24,7% / 31,1%). ✅ Confermato da **due
agenti indipendenti** e ri-verificato dal coordinatore leggendo `src/strategies/trend_portfolio.py`.
**Conseguenza:** potenza `c^p`, floor affine e soglia sono **la stessa cella riparametrizzata** — la
famiglia della convinzione ha **UN** grado di liberta', non tre.
**Attesa a priori dell'agente, scritta nel docstring prima di misurare:** *"il canonico e' gia'
dentro il suo plateau; qualunque rimodellamento dara' un delta indistinguibile da zero a iso-vol…
VERDETTO ATTESO: SCARTATO"*, col corollario che il null del de-levering sarebbe apparso in **forma
speculare (re-levering)**. **Entrambi confermati.**
| | ShFULL | ShIS | ShHOLD | vol | CAGR grezzo | CAGR **iso-vol** |
|---|---|---|---|---|---|---|
| **canonico** rho=1/3 q=1 | 1,305 | 1,488 | 0,441 | 12,14% | 16,32% | **16,32%** |
| binario rho=1 q=1 | 1,265 | 1,398 | **0,674** | 15,30% | 19,95% | 15,87% (0,45pp) |
| soglia rho=0 q=1 | 1,229 | 1,429 | 0,236 | 11,46% | 14,38% | 15,16% (1,16pp) |
| **niente vol-target** q=0 | 1,166 | 1,298 | 0,479 | **39,65%** | **46,75%** | 13,92% (2,40pp) |
| miglior cella iso-vol | 1,312 | 1,498 | 0,480 | 9,82% | 13,20% | 16,61% (**+0,30pp**) |
| cella scelta **al buio** | 1,306 | 1,508 | 0,382 | 9,26% | 12,38% | 16,48% (+0,16pp) |
Rango del canonico: **5/60 in-sample, 6/60 full, 41/60 hold-out**.
📌 **NULL DEL RE-LEVERING nella forma piu' pura mai misurata nel progetto (6ª occorrenza, prima
col segno rovesciato):** togliere il vol-targeting porta il CAGR **16,32% → 46,75% (+186%)** e a
iso-vol fa **2,40pp**. **Era tutta leva.** Il gate e' esatto per costruzione (`net` omogeneo di
grado 1 → lo Sharpe e' invariante, verificato a 4,4e-16) quindi **morde sul drift, non sullo
Sharpe**; `k` calibrato **in-sample** per non introdurre look-ahead nella normalizzazione.
**Banda d'ancora (24, mediana delle differenze APPAIATE):**
| cella | dShFULL | >0 | dShHOLD | >0 | dCAGRiso | >0 |
|---|---|---|---|---|---|---|
| scelta al buio 0,25/1,25 | +0,0074 | 17/24 | **0,0580** | **0/24** | +0,242pp | 22/24 |
| de-luckata 0,15/1,25 | +0,0002 | 12/24 | 0,1108 | 0/24 | +0,090pp | 16/24 |
| binario 1,00/1,00 | 0,0932 | 2/24 | **+0,2429** | **24/24** | 1,029pp | 3/24 |
⚠️ Le due selezioni oneste **non coincidono** (ancora 0 → rho=0,25; mediana su 24 ancore → rho=0,15):
**la superficie e' piatta**.
**Replica indipendente, su dati odierni, del finding d'ancora del 02/07:** hold-out canonico
**+0,441 = 96° pctl** delle 24, **mediana onesta +0,219**, banda [+0,014, +0,441]; FULL canonico al
29° pctl.
**Per anno** (mediana appaiata su 24 ancore): 2019 +0,006 · **2020 +0,085 (24/24)** · 2021 0,077
(0/24) · 2022 0,080 (0/24) · 2023 +0,020 · **2024 +0,057 (23/24)** · 2025 0,051 · 2026 0,003 →
**4/8 positivi = moneta**: non "un anno solo", ma nemmeno persistenza.
**Impatto sul LIBRO** (canonico ShFULL 1,814 · ShHOLD 1,437 · CAGR 21,22% · maxDD 9,42%): la cella
scelta fa **dShFULL +0,0006 (12/24 = moneta)**, **dShHOLD 0,0878 (0/24)**, dCAGR +0,188pp (22/24) e
📌 **dmaxDD +0,493pp PEGGIORE a 24 ancore su 24** — e il valore dichiarato di TP01 **e' il taglio
del DD**.
🚨 **IL RISULTATO CHE DECIDE, e nessuno lo cercava: `Spearman(ShIS, ShHOLD) = 0,527` (p<0,001)
sulle 60 celle — in questa famiglia scegliere in-sample e' PEGGIO DI UNA MONETA.** Ed e' un
meccanismo misurato, non rumore: **`Spearman(rho, ShHOLD) = +1,000` a tutti e sei i q** (in hold-out
l'ottimo e' al bordo rho≥1) mentre in-sample la curva e' **a gobba** con ottimo interno ~0,45-0,60.
**La convinzione e' informativa in-sample e ANTI-informativa in hold-out** — visibile anche nei
bucket (BTC hold-out: convinzione debole Sharpe **+2,20** contro piena **0,06**). Quindi l'unica
cella con guadagno hold-out robusto (binario rho=1, 24/24) e' **esattamente quella che si potrebbe
scegliere solo guardando l'hold-out** = il gate del 29/06. **Non esiste una cella proponibile,
nemmeno diversa da quella scelta.**
**Gate e controlli.** `causality_ok` **True** (max_tail_diff 0,0); `select_cell_insample` importato
sceglie **la stessa cella** (identita' verificata); **`deflated_sharpe` 0,9990 PASS ma quasi vacuo**
(famiglia omogenea, sd(Sharpe) 0,084 → sr0 0,197; **FAIL a sr0 ≥0,9**, 0,229 all'sr0 di screen
1,572) = **terza conferma indipendente del §10**; `marginal_vs_tp01` **REDUNDANT per costruzione**
(giudica un'aggiunta, non la SOSTITUZIONE della size di uno sleeve gia' nel libro) → riportato, non
usato come gate. **Controlli positivi 3/3**: de-levering ×0,5 → dSharpe **esattamente 0** e dCAGR
iso **esattamente 0**; oracolo look-ahead → Sharpe **10,97** con `causality_ok=False`; anti (rho=3)
3,55pp. **Eseguibilita' a $635: haircut 0,001** (**8ª volta nell'ondata**).
**Cosa NON e' misurato:** altri TF (il deploy e' a 1d, e sotto le 12h e' vietato dal 19/06); ancora
di SKH01 (si cancella nella differenza appaiata); una convinzione da un **segnale** diverso
(magnitudine invece di segno) — sarebbe un'altra **famiglia**, da dichiarare e deflazionare a parte;
`weights_tilt_null` non applicabile (il 75/25 non si muove).
**VERDETTO: `NON ESISTE UNA CELLA PROPONIBILE — E IL MOTIVO E' CHE IN QUESTA FAMIGLIA LA SELEZIONE
IN-SAMPLE E' ANTI-CORRELATA COL FUTURO`** — SCARTATO. **Libro, pesi, cron, config INVARIATI.**
---
## 44 — DEPOSIT-TIMING (il timing dei bonifici)
`scripts/research/r0823_deposit_timing.py` (**81 s**, nessuna rete). **3.000 percorsi**, block
bootstrap a 20 giorni, 25 anni, lente **L3 CONGIUNTA** (funding + fisco d'accumulo + ancora ×0,89),
bersaglio **$313k**. **Risoluzione MC misurata su 3 semi: 1,13 pp sui LIVELLI, 1,97 pp sulle
differenze APPAIATE** (i confronti girano sugli stessi percorsi) → si cita al punto percentuale.
**Replica 4/4 prima di ogni delta:** muro **$313.143** contro $313k; €250/m **23,4a / 14,4%**;
€500/m **17,3a / 85,4%**; e soprattutto **P0 del motore nuovo vs `PN.accumula`: `max|dif| = 0.0`**
sul capitale **e 0 sul giorno d'arrivo**; `boot_idx` bit-exact contro `CC._boot_paths`.
**Attesa a priori, dichiarata prima di misurare:** *"non funziona, perche' entrare piu' tardi domina
il comprare piu' in basso"*. **Confermata** — ma il meccanismo vale piu' del verdetto.
**€500/mese, stesso flusso di cassa disponibile per tutte le politiche:**
| politica | P(20a) | dP20 appaiato | attesa (g) | prezzo d'ingresso vs P0 |
|---|---|---|---|---|
| **P0 piatto** | **85,4%** | — | 0 | 1,000 |
| P1 dip 5% | 84,0% | 1,4% | 95 | **1,009** |
| P1 dip 10% | 69,7% | 15,7% | 713 | 0,959 |
| P1 dip 15% | 27,7% | 57,7% | 2.254 | 0,718 |
| P1 dip 20% | **6,3%** | **79,1%** | 3.682 | **0,494** |
| P2 risk-off (TP01 a 0x) | 84,8% | 0,6% | 22 | 1,002 |
| P3 valore-medio g=0 / 8 / 15% | 48,2 / 83,5 / 85,3% | 37,2 / 1,9 / 0,1% | 2.489 / 789 / 32 | 0,220 / 0,560 / 0,997 |
| P4 anti-dip 5-20% | 85,4 → 84,7% | 0,0 → 0,7% | 1 → 16 | ~1,000 |
**0/12 celle in OGNI lente** (€500/m, €250/m, IID, drift dimezzato). Il migliore in assoluto vale
0,03% ed e' P4 anti-5%, che aspetta **1 giorno** = P0 travestito. **Niente da deflazionare:** il
conteggio dei trial non e' il vincolo, il segno e' negativo e **monotono nella profondita' della
condizione**.
📌 **IL MECCANISMO — il segnale FA quello che promette, e perde lo stesso.** Dip 20% compra al
**0,494** del livello medio del piatto, cioe' **il 51% piu' in basso**, e arriva nel 6,3% dei casi:
*comprare meglio e comprare tardi sono la stessa mossa*. E sotto soglia bassa **si ribalta** — dip 5%
compra a **1,009**, cioe' **piu' in alto**: su una serie che sale, una condizione poco profonda non
compra il calo, **ritarda dentro la salita**.
📌 **L'ASIMMETRIA E' LA MISURA.** P4 anti-dip **non** da' lo stesso segno di taglia di P1 (0,3%
medio contro 38,5%) → non stiamo misurando rumore. Ma non e' simmetrico, e il perche' e' il
risultato: **un rialzo del 20% dal minimo arriva in 16 giorni, un ribasso del 20% dal massimo in
3.682**. *Il costo non e' scommettere sul lato sbagliato: e' mettere una **condizione rara** davanti
a un bonifico, in qualunque direzione.*
**Rischio di venue, separato dal timing** (convenzione dichiarata: al fallimento il libro va a zero,
**la cassa sopravvive**, si riparte). Il meccanismo esiste — tenere i soldi fuori riduce la penalita'
di **+2,4 pp a p=1%** e **+3,8 pp a p=2%** su dip 10% — ma contro una penalita' di timing di
**15,7 pp**, ed e' **un ordine di grandezza troppo piccolo**. E `P(libro azzerato)` e' **identica
per tutte le politiche** (21,6% a p=1%): *il conto salta comunque, cambia quanto c'e' sopra.* La
protezione si compra con un **secondo conto**, non ritardando i bonifici — coerente col 27/07.
⚠️ **Due errori catturati dall'agente su se stesso, entrambi da un controllo e non a occhio.**
(i) Il **ritardo-gemello** (stessa attesa media, deterministica, nessun segnale) dava "informazione"
**+11,5%** a dip 15% sul mercato vero: leggendo solo quella riga avrebbe scritto che il buy-the-dip
contiene previsione. Sotto **IID**, dove per costruzione non c'e' nulla da prevedere, la stessa
colonna vale **+14,9%** — **non piu' piccola, piu' grande** → il divario e' **meccanico**, non
previsione. (ii) Senza la colonna **attesa** avrebbe letto P4 come *"stesso segno di P1 ⇒ rumore"*
(la regola del mandato): falso, P4 e' piatto perche' la sua condizione e' **quasi sempre gia' vera**.
**Lo specchio si legge sulla colonna dell'attesa, non su quella del segno.**
**Sensibilita':** cassa al 2% invece che 0% riduce la penalita' di ~4 pp e **non cambia segno**;
traguardo su solo-libro (severo) peggiora ancora le condizionali → la convenzione usata e' quella
**favorevole** alle politiche condizionali, scelta apposta. **Non misurato:** politiche che cambiano
il *flusso disponibile* (altra domanda, fuori dal controllo del libro); orizzonti diversi da 25 anni;
e la finestra resta 7,4 anni con due tori.
📌 **ORDINE DI GRANDEZZA, che e' come va usato il risultato: la migliore politica di timing vale
0,1 pp di P(20a), dentro il rumore MC di 2,0 pp; passare da €250 a €500 al mese vale +71 pp
(14% → 85%).**
**VERDETTO: `IL TIMING DEI BONIFICI NON PAGA IN NESSUNA LENTE — E IL SEGNALE FUNZIONA, E' LA
CONDIZIONE RARA A COSTARE`** — SCARTATO. Chiude una domanda che l'operatore potrebbe altrimenti
riporsi ogni mese per vent'anni. **Libro, pesi, cron, config INVARIATI.**
---
## 43 — DATA-UNUSED (i dati che nessuno legge)
`scripts/research/r0823_data_unused.py`. Indice su **647 file `.py`** in `src/ scripts/ tests/`
(`Old/` escluso = archivio). *"MAI LETTA"* = zero occorrenze **a confini di parola** — misura
**generosa verso "letta"**, quindi forte quando dice mai.
### FASE 1 — l'inventario (e' il risultato principale, non un preambolo)
| dataset | righe | intervallo | letto da | colonne MAI LETTE |
|---|---|---|---|---|
| `btc/eth_{5m,15m,1h}` | 70.335 (1h) | 2018-08→oggi | tutto il progetto | — |
| `hl_*_1d` (51 alt) | 966 | 2024-01→oggi | 17 script | — |
| `hlfund_*_1h` (19) | 26.739 | 2023-05→2026-06 | 9 (famiglia chiusa 4 lati) | — |
| `eq_*_1d` (29 ETF) | 7.539 | 1996-08→oggi | 11 | — |
| `eqx_*_1d` (12 UCITS) | 1.770 | 2019-05→2026-07 | 7 | — |
| `fut_*_1h` (7 indici) | 15.070 | 2023-06→2026-06 | 4 | — |
| `fut_deribit/` + `fund_*` | 8.739 / 64.110 | 2018-09→oggi | **2** (entrambi del 22/08) | — |
| `dvol_*` | 1.979 | 2021-03→oggi | 17 | — |
| `vol_term_*` | **59** | 2026-06-26→oggi | 3 | `iv_90d` |
| `cb_chain/` | 1.232.212 | 2026-05-01→oggi | 14 | `volume_24h` (in 4 file, **tutti collettori/certificatori, nessuno analitico**) |
| `cb_market_snapshots` | 17.406 | 2026-03-26→**2026-07-30, morto** | 3 | `fetch_errors_json` |
| `fundnews_short_screen` | **19** | 2026-06-26 | 3 | — |
| `alt_sol_*` | 38.898 | 2022-03→ | 2 (escluso dall'operatore 22/08) | — |
| 🚨 **`external/coinmetrics/cm_{btc,eth}.csv`** | **6.351 / 3.952** | **2009 / 2015→2026-05** | **1** | 🚨 **26 colonne su 31** |
| `external/{fng,stables}.json`, `premium/` | — | 2015-2018→ | 1 ciascuno | — (chiusi 24/07) |
| `options_daily/snapshots.jsonl` | 60 snapshot | **30 giorni** | 2 | letto solo per le **specifiche**, mai come serie |
| `instruments_registry.json` | — | — | **NESSUNO** | (reference, non segnale) |
📌 **Il quadro: ogni dataset con storia vera e' gia' stato analizzato almeno una volta. Cio' che
resta non letto e' telemetria a finestra corta (30-113 giorni) — con UNA eccezione.**
⚠️ **Due difetti dell'inventario stesso, corretti in sessione:** la ricerca a **sottostringa** dava
`iv` in 571 file (e' dentro *drive*, *receive*); e le chiavi derivate dall'etichetta producevano due
falsi **"NESSUNO"** su `eqx_` e `fut_deribit/fund_` — cioe' avrebbero **fabbricato** un dato mai
usato che non esiste.
### FASE 2 — `FlowInExNtv`/`FlowOutExNtv`, e perche' proprio quelle
Sceltе per: **storia** (100% coperte 2018→2026 su entrambi gli asset, contro *mesi* per tutto il
resto), **meccanismo** (il turnover **lordo** misura quanta parte del flottante viene
ri-posizionata), **eseguibilita'** (1d → long-flat/LS su BTC+ETH perp, l'impianto di TP01),
**famiglia non chiusa**. La famiglia exchange-flow **e'** chiusa (24/07, su `SplyExNtv`) → il
meccanismo nuovo e' stato **misurato prima di usarlo**:
| | BTC | ETH |
|---|---|---|
| corr( d(SplyEx) , **InOut** ) | **+0,9993** | +0,7516 |
| corr( d(SplyEx) , **In+Out** ) | **+0,0349** | +0,0801 |
| \|InOut\| / (In+Out) mediano | **0,060** | 0,062 |
📌 **Il netto E' la derivata dello stock gia' testato; il lordo e' ortogonale — e il 94% del flusso
si cancella**, quindi lo stock vede 6 monete su 100 fra quelle che si muovono. Il dato nuovo era
davvero nuovo.
**Griglia dichiarata prima e contata al rialzo:** 3 variabili (GROSS nuova · IMB mista ·
**NETCTL = controllo negativo, l'informazione gia' uccisa**) × W {30,90,180} × mode {LF,LS} ×
sign {±1} = **36 celle**, **+4 gia' spese su EXS il 24/07 = 40 trial**.
**Controllo positivo:** la famiglia uccisa ri-girata con la **sua** factory (`ow.exs_factory`
importata) → `earns_slot_honest=False`, DSR 0,903 = **riproduce il 24/07**.
**Esito** (`study_family_honest`, cella scelta **solo in-sample**): la cella al buio e'
**`NETCTL W=90 LF +1`, cioe' il CONTROLLO NEGATIVO** — IS 1,273 · FULL **0,951** · HOLD **0,094**.
🚨 **Massimo atteso dal PURO RUMORE su 36 trial = Sharpe 1,009: il candidato sta SOTTO.**
DSR **0,437** (N=36) / **0,411** (N=40); marginale **NEUTRAL**, corr→TP01 **0,653**, multi-cut
negativo **7/7 anni**. Per variabile: GROSS **DILUTES** (HOLD 0,415), IMB **DILUTES**, NETCTL
NEUTRAL → **la parte algebricamente nuova non e' selezionabile**. Direzione: |t|<1 su 2 asset × 2
variabili. Volatilita': ETH da' t **+2,70** su Pearson ma in **rango** +0,015 **p=0,46**, cambia
segno per anno e su BTC e' "significativo" nel verso sbagliato → **termometro contemporaneo**, come
TERM-STRUCTURE (§7) e SKEW (§5). `causality_ok` True; `implausible_sharpe` False (48,1% di barre
attive in perdita); **haircut a $635 = 0,000**. Finestra in **barre ATTIVE**: FULL 2.214 (6,06 a) →
SE(Sharpe) 0,41; **HOLD-OUT 511 (1,40 a) → MDE 1,66 di Sharpe**.
⚠️ **Due errori dell'agente su se stesso, catturati prima di pubblicare.** (a) Il pool *"N=12"* del
deflated-Sharpe erano **le 12 celle MIGLIORI** (`rows` e' ordinata) e faceva **PASSARE** il candidato
a **0,975**; con la partizione legittima fa 0,678 → **conferma diretta della lezione §10**: *la
stessa griglia da' verdetti opposti secondo come la si partiziona*. (b) Il residuo di vol calcolato
a mano invece che per OLS **ribaltava il segno** su ETH.
**Escluso e perche':** `volume_24h`/`book_depth_top3` e 0DTE (113 e 30 giorni, e ogni loro
espressione eseguibile e' short-vol = chiuso); `fut_deribit` (il basis **e'** il funding, §13);
`funding_cross_annualized`/`oi_delta_pct_4h` (famiglia chiusa / dataset morto dal 30/07);
Amihud-turnover HL (gia' testato in `xsec_v3_lowrisk`); kimchi, HLP, F&G, MVRV, hash-ribbons,
stablecoin (24/07); `liquidation_*_risk` (una sola categoria in 17.229/17.229); `iv_90d` (59 righe).
📌 **IL PEZZO DI METODO RIUSABILE:** *mettere nella griglia una variabile che si sa gia' morta*
trasforma **"il candidato perde"** in **"il dato non contiene nient'altro di selezionabile"** — qui
la selezione in-sample e' **tornata sul controllo negativo**, che e' l'unica forma in cui un
inventario puo' concludere qualcosa di positivo su un'assenza. Sottoprodotto: corr→TP01 0,50-0,65 =
**replica indipendente** del *"l'on-chain tradabile e' prezzo travestito"* del 24/07, su colonne che
quell'ondata non aveva mai aperto.
**VERDETTO: `NESSUN DATO INUTILIZZATO SOSTIENE OGGI UN'IPOTESI NUOVA — LA SCORTA DI DATI DEL
PROGETTO E' ESAURITA, E CIO' CHE RESTA NON LETTO E' TELEMETRIA A FINESTRA CORTA, NON STORIA`** —
SCARTATO. **Libro, pesi, cron, config INVARIATI.**
---
## 45 — SPOT-NETTING (separare le gambe su due strumenti)
`scripts/research/r0823_spot_netting.py`. **Sola lettura provata:** `git status` mostra solo questo
file, `git status -- src/ config/ scripts/live/ scripts/cron_*.sh tests/ data/` **vuoto**; ~17 GET
pubbliche + ~13 letture del conto via `DeribitRead` (**nessun metodo di trading esiste in quella
classe, by design**); **ordini inviati: 0**; finestre :05-:10 e :24-:30 rispettate da una guardia
nello script.
### Q1 — il margine non uccide il lead; **il codice si'**
**[VENUE]** `get_currencies`: BTC ed ETH hanno `in_cross_collateral_pool: true` (**11 valute su 51**
→ elenco ristretto, non un default). `get_instruments?kind=spot`: `BTC_USDC`/`ETH_USDC` hanno
**`max_leverage: 10`**, taker **0,00 bps**, min lotto 0,0001 → **[DEDOTTO]** lo spot vive dentro il
conto marginato, non in un portafoglio segregato.
**[CONTO]** equity USDC **$636,01**, nozionale lordo $327,52, **margine impegnato $6,55 = 2,000% del
nozionale** (limite superiore: contiene eventuali riserve d'ordine → l'aritmetica che segue e'
conservativa).
**[CALC] caso peggiore** (TP01 al massimo su entrambi gli asset): spot $477, USDC libero **$159**,
nozionale perp di SKH01 $159, margine richiesto $3,18 → **copertura 50,0x**. Entrambi i termini sono
proporzionali a E → **il rapporto non dipende dal capitale**. Anche con lo spot valutato **zero**
come collaterale, SKH01 resta marginato 50 volte. **L'haircut — non leggibile — non e' binding.**
🚨 **[CODICE, verificato con `inspect.getsource`]** `src/live/shadow.py::_equity` legge **solo**
`account_summary("USDC")` e ripiega sulle valute-moneta solo se quell'equity e' ≤1; `position_usd`
matcha per `instrument_name`. → comprando $477 di spot il libro **leggerebbe $159 invece di $636
(25%)** e non vedrebbe la gamba, che il riconciliatore **ricomprerebbe**. **Non e' un cambio di
strumento: e' un cambio del percorso di SIZING del live.**
**Ipotesi dell'agente, nata e refutata nello stesso filone.** `get_currencies` dichiara USDC
`apr` **3,40** (USDT/BTC/ETH 0,0): se accreditato, tenere il 75% in spot costerebbe fino a
**2,55%/anno = meta' del vantaggio**. **[LOG]** 6 run col conto **flat** (il piu' lungo **257 giri
orari = 10,7 giorni**): equity **invariata al centesimo** contro i +$0,59 attesi → limite superiore
su qualunque interesse **< 0,029%/anno**, e un accredito mensile e' escluso (un run attraversa il
31/07-01/08 con Δ=0,00). **L'obiezione e' morta e il lead non deve pagarla.**
### Q2 — il valore della separazione: **nullo**
🚨 **(i) T1 sbloccato e' un DECLASSAMENTO.** Con la macchineria originale (`r0726_skh_onbook`, 23
offset, differenze appaiate): `onbook_tp hourly` = **+0,051 FULL (19/23) / +0,057 HOLD** → il
pubblicato (+0,054/+0,061) e' **riprodotto**. Ma il 26/07 stesso stabili' che il live fa rilevazione
**intra-barra**, e `fastdetect hourly` = **+0,082 in 23/23** (pubblicato +0,081). Contro il path
che il live **gia' percorre**: **`onbook_tp fastdetect` = 0,048 FULL (6/23)**. *Sbloccare T1
comprerebbe un path peggiore di quello che gira* — conferma indipendente della conclusione del 26/07,
raggiunta per una strada diversa.
**(ii) Funding risparmiato** [riprodotto da §35/§39]: TP01 su perp drift 13,66% → senza carry 15,77%
(**+2,11%/anno di sleeve**, vol invariata 12,17→12,22%); a peso di libro ×0,75 → **+1,58%/anno**.
📌 **(iii) Il costo del netting perso: §39 lo stimava "1-2%", ed e' ALTO DI UN ORDINE DI
GRANDEZZA.** Simulazione della riconciliazione **oraria** su 8 anni, percorso SKH01 **validato
contro l'harness** (trade 194/194 BTC, 213/213 ETH):
| percorso | ordini/anno | turnover perp | turnover spot | lordo medio |
|---|---|---|---|---|
| NETTA | 289,1 | $12.412 | $0 | $84,52 |
| SEPARATA | 282,8 | $8.493 | $3.893 | $85,52 |
**Commissioni: NETTA $4,34/anno (0,683% di equity) contro SEPARATA $2,97 — un RISPARMIO di
0,216%.** **Il netting non risparmia commissioni.** Ordini 6,3/anno, ma ⚠️ **meno ordini non e'
meglio**: il tracking peggiora del **+12%** ($1,61 → $1,81 di scarto medio dal target) — **5ª
occorrenza** della lezione *"banda in valuta assoluta"*. Margine: irrilevante (IM 0,266% di equity).
**Segni opposti — cioe' le ore in cui il netting serve davvero — 0,61% della storia.**
**[VENUE] Il costo vero e' lo SPREAD:** il perp e' un mercato a **un tick** (0,01-0,02 bps di mezzo
spread), lo spot no (1,5-3,1 bps) → sovracosto **[0,139%, 0,250%]/anno**. ⚠️ **Due istantanee a 4
minuti danno 2,27 e 4,08 bps (+79%) e il contributo netto dell'esecuzione CAMBIA SEGNO fra le due**
→ si cita come banda **[0,034%, +0,077%]/anno**, ampiezza = 7% del lead: **l'esecuzione non decide
questo lead**. ✅ **Controllo positivo:** ordini simulati sulla finestra live **132/anno** contro
**114/anno osservati**. ⚠️ **[LOG] In 2 mesi SKH01 non e' MAI stato short** → il campione live **non
puo'** misurare il netting, e l'agente lo dichiara invece di estrapolarlo. Fee reale sul nastro
**3,70 bps/lato**.
**Il numero da citare:** lordo **+1,58%** → **netto oggi [+1,55%, +1,66%]** → con spot a 3,50 bps
[+1,33%, +1,44%] → **nello scenario fiscale sfavorevole +0,50%**.
### Q3 — la sorveglianza
**[CODICE]** `fee_watch` deriva `INSTRUMENTS` da `BOOK_INSTRUMENT` → una gamba spot **non
comparirebbe**: e' esattamente il difetto corretto il 21/08. Riga **dichiarata e non scritta**:
`SPOT_INSTRUMENT` in `src/live/book.py` + concatenazione in `fee_watch`. ⚠️ **Non basta:**
`convenzione('BTC_USDC')` ritorna **`'ignota'`** → il cross-check sui fill tornerebbe `None`
(onesto ma cieco): servirebbe una **terza famiglia 'spot'**. Se la fee tornasse a 3,50 bps il lead
perderebbe 0,216%/anno = 14% del guadagno → **sopravviverebbe**; *la ragione per sorvegliarlo non e'
che lo ucciderebbe, e' che oggi nessuno se ne accorgerebbe*.
### Q4 — il rischio
**Venue:** invariato (era gia' totale). **Fisco:** 7 punti di aliquota sulla gamba TP01 = **0,83%/anno
= oltre meta' del guadagno** — e 🚨 **un costo nuovo mai contato: se i derivati sono `c-quater` i
comparti si SEPARANO**, quindi le minusvalenze del perp (SKH01) smetterebbero di compensare le
plusvalenze spot (TP01) **[DEDOTTO, per il commercialista]**. **Liquidazione — qui la separazione
MIGLIORA:** lo spot non si liquida, esce dal perimetro il 75% del libro ($85 → ~$21 di nozionale
liquidabile); **contropartita:** il disaster-SL oggi protegge la posizione **netta**, separando
resterebbe solo sul perp e in un blackout **TP01 resterebbe long al 75% del conto senza stop**.
**Haircut:** non leggibile e **non binding** — *unico caso in cui "non lo so" e "non conta"
coincidono, e va detto in quest'ordine*.
### Non determinabile senza un conto reale
(i) l'haircut del collaterale (`get_collateral_info`*Method not found*); (ii) se
`account_summary('USDC').equity` **includa** i saldi BTC/ETH (il conto ne tiene $0,19: troppo poco
per discriminare); (iii) se `get_positions` restituisca lo spot. **Tutte e tre si risolvono con un
acquisto di prova da $7,73** leggendo equity/available/positions prima e dopo — **e' un ordine,
quindi decisione dell'operatore.**
**VERDETTO: `IL LEAD REGGE E VALE [+1,55%, +1,66%]/ANNO NETTO, MA LA SEPARAZIONE DELLE GAMBE — LA
RAGIONE PER CUI IL FILONE E' STATO APERTO — NON AGGIUNGE NULLA`**: T1 sbloccato e' un declassamento,
il netting perso risparmia commissioni invece di costarle, il margine non era il vincolo. **Il valore
e' il funding e basta**, e in cambio si prendono due costi nuovi mai contati (comparti fiscali
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' implicitarealizzata**`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.**
---
## 49 — TP01-TWIN (il 75% del libro dipende da una sola definizione di trend)
`scripts/research/r0823_tp01_twin.py` (**8 s**). ✅ Replica bit-exact vs `sleeves._tp01_returns()`:
**max|diff| = 0.0**. **53 trial** contati al rialzo (22 celle + 31 composizioni).
**L'ATTESA A PRIORI DEL COORDINATORE E' REFUTATA, ed e' il motivo per cui il filone valeva.**
Avevo scritto *"i meccanismi di trend a 1d correlano 0,85-0,95, l'ensemble sara' TP01 con piu' fee"*.
Misurato — rendimenti netti / **posizioni-bersaglio** (dove vive davvero la ridondanza):
| | TSMOM | DON | EWMA | KEL | KAU |
|---|---|---|---|---|---|
| **TSMOM** | 1.000 | 0.852 / **0.700** | 0.929 / **0.859** | 0.714 / **0.510** | 0.767 / **0.527** |
| DON | | 1.000 | 0.892 / 0.775 | 0.696 / 0.464 | 0.759 / 0.517 |
| EWMA | | | 1.000 | 0.696 / 0.440 | 0.791 / 0.528 |
| KEL | | | | 1.000 | 0.855 / 0.758 |
Media fuori diagonale **0,795 (rendimenti) / 0,608 (posizioni)**. Keltner e Kaufman stanno a
**0,51-0,53** di posizione da TSMOM: **meccanismi genuinamente diversi, non TP01 travestito** → il
filone **non si chiudeva sulla matrice** ed e' stato misurato fino in fondo.
🚨 **LA PROTEZIONE — il criterio (B) di `edge_watch.py`, importato dal sorgente di produzione.**
La colonna che decide non e' l'ancora canonica ma la frazione di ancore:
| anno | DD b&h | rapp. TSMOM | rapp. ENS | ancore in cui ENS e' meglio |
|---|---|---|---|---|
| 2019 | 56,4% | 0,170 | 0,172 | 14/24 |
| 2020 | 59,2% | 0,124 | 0,114 | 18/24 |
| 2021 | 52,0% | 0,130 | 0,121 | 18/24 |
| **2022** | **68,4%** | **0,039** | **0,129** | **0/24** |
| 2023 | 22,0% | 0,531 | 0,486 | 23/24 |
| **2024** | 35,6% | 0,222 | 0,345 | **0/24** |
| **2025** | 45,1% | 0,166 | 0,209 | **0/24** |
| **2026** | 46,6% | 0,025 | 0,108 | **0/24** |
**Dove l'ensemble perde, perde a TUTTE le ancore** — degradazione unanime, non fortuna d'ancora — e
i quattro anni in cui perde sono i **quattro piu' recenti**. Nel **2022, il sinistro maggiore, e'
3,2x peggiore**. Rapporto **medio** 0,18 → 0,21 (**0/24** favorevoli); celle ancora×anno a favore
**73/192 = 38%**.
⚠️ **Errore dell'agente catturato in sessione, e del tipo che avrebbe cambiato il verdetto:** la
prima stesura decideva sul **caso peggiore** (max degli 8 rapporti), che migliora 0,56 → 0,49, e
avrebbe stampato **"PROMOSSO A LEAD"**. *Il massimo di 8 numeri non e' una statistica*: si era mosso
perche' era migliorato **un** anno (il 2023, che deteneva il massimo) mentre **4 su 8** peggioravano.
📌 **Il null del de-levering non e' "superato": e' SENZA POTENZA, e va detto cosi'.**
`k_isovol = 0,9896 ≈ 1`**non c'e' niente da de-levere**: vol 12,14% contro 12,02%, esposizione
media ENS **0,152 > 0,141**, tempo a mercato **70% > 55%**. ✅ E il rilevatore **ha** potenza: su un
de-levering vero (`target_vol=10%`) segnala Sharpe invariato 1,305 e maxDD 14,3% → 7,3%.
Aggiunto un gate su 31 sottoinsiemi: **0/30 composizioni alternative** batte TSMOM da solo su
protezione **E** hold-out insieme.
**Banda d'ancora (24, differenze APPAIATE):** Sharpe FULL +0,0177 (14/24) · **Sharpe HOLD-OUT
0,0671 (7/24)** · maxDD +0,0164 (**2/24**) · peggior 3 mesi **+0,0113 (24/24)** · protezione media
**+0,0305 (0/24)**. **Sul libro 75/25** (la gamba SKH e' identica nei due bracci → la sua ancora si
cancella): **Sharpe hold-out Δ 0,127, favorevole 3/24**; FULL +0,0001; maxDD 0,004; peggior 3 mesi
+0,014 (24/24).
**Onesta' verso l'ensemble:** l'ancora canonica h=0 e' la **migliore delle 24** per l'hold-out di
TSMOM (**100° pctl** — replica indipendente della fortuna d'ancora del 02/07 e 26/07), quindi il
divario a h=0 (0,37) e' **gonfiato**: il numero da citare e' **0,067**.
**I costi non sono il problema:** turnover **5,3/anno contro 8,0** di TSMOM (la nettatura cancella
turnover), a 0,20% RT 1,252 contro 1,274, haircut a $635 **0,002**. `study_family_honest`: cella
in-sample-only = **TSMOM**, marginale **REDUNDANT**, `earns_slot_honest=False` — con DSR 0,999
**dichiarato non decisivo** (famiglia omogenea ⇒ sr0 piccolo per costruzione).
📌 **E il criterio che si voleva migliorare NON E' BINDING:** TSMOM ha rapporto peggiore **0,635
contro la soglia 0,75 in 192 celle su 192**. `weights_tilt_null` non si applica (il vettore dei pesi
e' identico, cambia il contenuto del 75%) ed e' detto esplicitamente nello script.
📌 **IL FATTO TRASFERIBILE: mediare meccanismi di trend NON diversifica il rischio di trend.**
Cinque segnali guidati dallo **stesso prezzo** divergono solo ai **bordi** del trend — cioe' nei
ribassi — e la media li tiene **mezzi-lunghi mentre il singolo e' gia' flat**. Piu' meccanismi =
ingresso/uscita piu' morbidi (peggior 3 mesi migliore **24/24**), **non** piu' assicurazione.
⚠️ **Cio' che NON si conclude:** che la monocultura sia sicura. Servirebbe un regime in cui il TSMOM
fallisce, e in 7,4 anni non c'e'.
**VERDETTO: `MEDIARE MECCANISMI DI TREND NON DIVERSIFICA IL RISCHIO DI TREND — PROTEGGE PEGGIO
PROPRIO NEI RIBASSI`** — REFUTED. **Libro, pesi, cron, config INVARIATI.**
---
## 46 — TAIL-HEDGE (put deep-OTM come assicurazione statica)
`scripts/research/r0823_tail_hedge.py`. **Libro, pesi, cron, config INVARIATI. Nessun ordine.**
🚨 **Il null del de-levering non arriva nemmeno a essere il gate che decide: la premessa cade
prima.**
| lente di f | maxDD scende | batte il de-levering | miglior Δdrift | ΔSharpe |
|---|---|---|---|---|
| **f=1,00** (modello nudo, **regalato**) | **0/54** | 0/54 | +0,07 pp/a | 0,108 |
| f=2,23 (misura 30/07) | **0/54** | 0/54 | 0,00 pp/a | 0,004 |
| f=5,85 (misura 30/07) | **0/54** | 0/54 | +0,02 pp/a | 0,032 |
| **f misurato oggi** (1,89/1,27/1,06) | **0/54** | 0/54 | 0,01 pp/a | 0,004 |
Libro nudo (2021-03→oggi, finestra DVOL): Sharpe 1,356 / maxDD **9,42%** / drift 13,75%. Coperto:
maxDD **9,53-10,37%**. **Non serve trovare il `k`**: il claim *"meno drawdown"* e' falso al primo
passo, e dove il DD **peggiora** il null e' degenere (k=1) — un Δdrift>0 li' risponde a una domanda
di *alpha*, non a questa.
📌 **IL MECCANISMO, ed e' il risultato trasferibile: il beta del libro al sottostante e' +0,076.**
Il 19/05/2021 il mercato ha fatto **21,1%** e il libro **2,0%**. *La put protegge una perdita gia'
ridotta ~10x dalla strategia stessa*, quindi coprirla costerebbe ~1/beta volte il budget. E il bleed
del premio cade **dentro** i drawdown — che su questo libro sono **lunghi e poco profondi** — mentre
il payoff cade su singoli giorni di crollo **che non sono il fondo del drawdown**: sui 5 peggiori
mesi la copertura peggiora **tutti e cinque**.
**Meta' dell'attesa a priori dell'agente refutata:** 15/20 dei peggiori giorni del libro **sono**
crolli (lo short-squeeze di SKH01 sta fuori finestra). Regge l'altra meta', ed e' il beta.
**f misurato oggi sulle quote vere** (420 put con bid **E** ask, catena USDC): δ−0,05 → **1,89** ·
δ−0,10 → **1,27** · δ−0,15 → **1,06** — piu' mite del 2,23-5,85 del 30/07, **e il verdetto non
cambia**. 📌 Struttura del modello che vale come risultato a se': **f si paga solo sulla parte di
valore che converge a intrinseco**, quindi un roll anticipato non lo paga (asimmetria misurata:
expiry 0,27pp invariato, half 0,19 → 0,39pp).
🚨 **CORREGGE UN MURO PUBBLICATO: comprare un'opzione costa il PREMIO, non il NOZIONALE.** I
*"lotti da migliaia di dollari"* del 22/08 sono il **collaterale per VENDERE**. Lotto minimo
BTC_USDC = **$1,79-7,93** di premio; la copertura e' comprabile a ogni roll da **~$9,2k** (30g
δ−0,05) a **~$38,8k** (7g δ−0,15). ✅ **Verificato al venue dal coordinatore:** `min_trade_amount`
**0,01** su tutte le 343 put BTC_USDC, e il premio del lotto minimo di una put a 5 giorni va da
**$0,00** a qualche dollaro.
📌 **Il secondo muro e' strutturale e non di capitale: il TICK da 5 USDC.** ✅ Verificato
(`tick_size = 5.0` su tutte). **Piu' la copertura e' deep-OTM — cioe' economica — piu' il tick
domina**: una put marcata 0,82 USDC non e' quotabile sotto 5. E' un pavimento di prezzo del **6x**
sulle ali piu' lontane, e nessun budget lo aggira.
**Canale funded:** sulla regola binding (max-loss 6% **statico**) la copertura va **nel verso
sbagliato** — alza il maxDD, quindi **abbassa** la leva ammessa (k 0,629 → 0,594-0,620). Il
beneficio sui breach a un giorno (0,92 → 0,55/anno) e' reale, ma il de-levering **a pari drift** lo
compra allo stesso ordine di grandezza **senza toccare il maxDD**.
⚠️ **Tre errori dell'agente, tutti catturati dai controlli e non a occhio.** (i) Il controllo
positivo *"payoff gratis"* **falliva**: non accreditava il valore dell'asset regalato mentre il MTM
ne addebitava il decadimento → il free lunch costava quanto il premio. **Un controllo positivo rotto
dichiara guasto l'apparato.** (ii) La causalita' dava 1,28e-04 ("DIVERGE") perche' il confronto
arrivava fino al taglio mentre il prefisso si ferma **un roll prima**: differiva per **assenza di un
roll**, non per look-ahead → finestra corretta, **0,00e+00 esatto**. (iii) Errore di **criterio**:
contava "vittoria" anche dove il maxDD peggiora — col criterio corretto le *"3/54 vittorie a f=1"*
diventano **0/54**. Controlli finali **3/3** (free-lunch e f=0,1 riconosciuti, f=10 rifiutato).
⚠️ **Non misurato, dichiarato:** **marzo 2020 e' FUORI CAMPIONE** (il DVOL parte 2021-03) — *il
sinistro piu' grande della storia del libro non e' testato, ed e' l'unico scenario in cui la
conclusione potrebbe muoversi*. Lo spread viene dai soli strumenti con bid **E** ask veri: e' un
**pavimento che FAVORISCE la copertura** (le ali piu' profonde spesso hanno solo un ask al tick). I
3-5 breach in 5,4 anni **non distinguono le varianti fra loro**: si legge il segno, non la taglia.
Nessuna copertura **dinamica** (gated su regime) e' stata provata: la domanda era la statica.
**VERDETTO: `LA PUT PROTEGGE UNA PERDITA GIA' RIDOTTA 10x DALLA STRATEGIA — IL maxDD SALE IN 162
CELLE SU 162`** — REFUTATO.
---
## 47 — ANCHOR-ENSEMBLE (de-luckare l'ESECUZIONE invece del numero)
`scripts/research/r0823_anchor_ensemble.py` (**127 s**). Attese a priori **A1-A7 scritte e stampate
prima** di misurare: **3 confermate, 3 refutate, 1 mezza**. **Libro, pesi, ancore, cron, config
INVARIATI.**
**(i) Batte l'ancora MEDIANA: si', di +0,014 di Sharpe FULL — e l'algebra dice che non puo' fare di
piu'.** La posizione dell'ensemble e' la **media** delle posizioni e il lordo orario e' lineare in
essa ⇒ **`lordo_ens == media(lordi)`, verificato a max|dif| 1,4e-17**. Il drift non puo' cambiare se
non per fee-netting (**+0,013%**): **tutto il guadagno e' vol (1,1%)**.
📌 **Cio' che l'ensemble compra davvero non sta nella colonna Sharpe: `sd(ShFULL) 0,061 → 0` e
`sd(ShHOLD) 0,112 → 0`. Non riduce l'incertezza, la ELIMINA.**
⚠️ **A2 refutata sulla taglia:** l'agente prevedeva +0,03…+0,15 ed e' **7x piu' piccolo** — aveva
sopravvalutato quanto sono decorrelate 24 ancore della **stessa** strategia.
**(ii) Batte la CANONICA: NO sull'hold-out (0,223), SI' su FULL (+0,024) e in-sample (+0,071).**
La canonica sta al **98° pctl di 24 sull'hold-out e al 15° in-sample**.
📌 **E i due numeri non sono due stime della stessa cosa: +0,44 e' un'estrazione GIA' AVVENUTA,
+0,21 e' cio' che si ottiene senza estrarre.** Tenere la canonica non conserva il +0,44: **ri-estrae**
da [+0,02, +0,44]. **La stima onesta del futuro e' +0,21.**
**(iii) Eseguibile da quale capitale: da TUTTI, gia' a $635 — attesa REFUTATA.** A $635 il path
eseguito a K=24 segue l'ideale **meglio** che a K=1 (**corr 0,9986 contro 0,9954**), perche' *un
target che si muove a passi piccoli e frequenti entra in una banda fissa meglio di uno che salta*.
Ordini 119 → 729/anno, fee **$2,55 → $2,56**. ⚠️ Il criterio `N_max` dichiarato in anticipo
**satura (6/6 celle a ogni capitale)**: *un gate che passa sempre non misura niente* → la risposta
non e' un capitale, e' che **l'eseguibilita' non e' il vincolo (7ª volta nell'ondata)**.
**Replica del 02/07 prima di ogni delta:** `h=0 == tp01_baseline_daily`; **`banded()` ==
`r07.smallcap_net` bit-exact (0,0e+00, stessi ordini)**; **K=4 == EW di 4 book** (2,2e-16); **offset
0 == `sleeves._skyhook_returns()`** (0,0e+00). La **struttura** replica; i **livelli** sono
ri-derivati col dato di oggi (`data/raw/` non versionato): HOLD mediano 0,04 → **0,220**, banda
[0,13,+0,30] → **[+0,02,+0,44]**, canonico 0,31 → **0,436 (98° pctl in entrambi)** — **coincidono
con la memoria corrente del progetto** (canonico +0,44 al 96-98°, mediana +0,22).
📌 **Il funding: canale chiuso per ALGEBRA, non per piccolezza.** `funding = pos·f` e' lineare in
`pos`**`funding_ens == media esatta delle 24 ancore, max|dif| = 0`**. E il rapporto condizionale
misurato il 22/08 **non si attenua: 2,25x → 2,26x** da K=1 a K=24 — *e' esso stesso una media, e la
correlazione esposizione-funding vive alla scala del REGIME, non dell'ora del giorno*. (Replica
indipendente del drag su griglia oraria: **2,14%** contro il 2,02% pubblicato.)
📌 **DOVE STA IL SEGNALE: SKH01 — l'ancora a cui il 02/07 non porto' mai questa domanda.** Sulla
lente del path che gira: mediana delle 23 fasi ShFULL **0,974 → 1,286 (+0,312)**, maxDD mediano
**23,3% → 16,6%**. **Venti volte TP01**, e il meccanismo e' chiaro: i suoi trade sono **discreti**
spostare la griglia cambia **quali trade esistono**, non quanto sono grossi (sd d'ancora **0,194
contro 0,061**). **23 e' primo** ⇒ sulla griglia a 30m non esiste sotto-ensemble simmetrico.
⚠️ **Ma dentro il libro SKH01 pesa il 25% e li' non si distingue da zero** (+0,005 a $635, +0,022 a
$100k, coi segni dei singoli che cambiano fra i due capitali).
📌 **Contro-intuitivo misurato:** tranciando entrambi gli sleeve gli **ordini salgono 6,5x**
(197 → 1283/anno) ma le **fee SCENDONO** ($5,76 → $5,29). Su un venue a fee **proporzionale** si
paga il *nozionale*, e mediare 23 fasi trasforma un ±1,0x che sbatte da un estremo all'altro in una
posizione frazionaria. **Su un venue a pavimento fisso il segno si ribalterebbe** (regola del 25/07,
riconfermata da un terzo angolo).
**Barriera (canale funded) — attesa refutata *sulla regola sbagliata*.** Il lato binding non e' la
barriera (6%, P(breach) 0-7%) ma il **bersaglio** (+10%, P(pass) 40-82%): *meno vol allontana dal
traguardo quanto dalla barriera*, e l'ensemble sta al **31° pctl su P(pass)** pur avendo maxDD
migliore della mediana. Ma la regola che il 22/08 ha misurato **uccidere** e' la **daily-loss a un
giorno**, che close-only **non puo' vedere**: sul **p1 giornaliero** l'ensemble batte il **66%** di
150 configurazioni. **Indizio, non misura** — la conferma richiede la lente accoppiata.
⚠️ **Il costo vero, e non e' negli ordini: 23 ancore su 24 di TP01 richiedono le barre di oggi**,
cioe' **`fresh_5m`** — il path che il 26/07 e' risultato ricadere **in silenzio** sul certificato e
che il 29/07 ha fallito **6 giri su 8**. Oggi TP01 non ci dipende. **E' l'unica delle tre obiezioni
del 02/07 che sopravvive intatta** (SKH01 quel feed lo usa gia', il che rende l'asimmetria fra i due
sleeve ancora piu' netta).
🚨 **IL RISULTATO CHE NON ERA NEL MANDATO: la premessa del 02/07 era sbagliata.** Quel filone
boccio' il tranching perche' *"i delta per-ancora (~$1-2) sono sotto il min-order $5 → degenererebbe
in K=1"*. Ma **`src/live/book.build_book_order` banda `abs(delta)` sulla posizione NETTA e manda un
ordine per asset per giro**: *un delta per-ancora non e' mai un ordine*. **Stessa decisione, ragione
diversa — e la ragione conta**, perche' quella vecchia cadrebbe al primo esecutore che mandasse un
ordine per tranche, questa no (e' sulla **taglia dell'effetto**).
⚠️ **Due errori dell'agente, catturati e congelati in commento:** (a) confrontava
`turnover_per_year`, che `eval_weights` **arrotonda**, accanto a una disuguaglianza stretta →
stampava "9,40 contro 9,38" facendo sembrare violata una sub-additivita' che il conto esatto
rispetta; (b) i percentili di coda usavano **un solo segno per tre colonne** di cui due sono ritorni
e una una frequenza → stampava **34° dove il valore vero e' 66°**, cioe' *"peggio della mediana"*
per un numero migliore della mediana. E la prima stesura affermava *"i due effetti sono additivi"*
come **testo fisso**, refutato dai suoi stessi numeri: ora l'affermazione la **calcola il codice**.
**VERDETTO: `SU TP01 L'ENSEMBLE NON PUO' CAMBIARE IL DRIFT PER ALGEBRA — ELIMINA L'INCERTEZZA, NON
LA MIGLIORA; IL SEGNALE STA SU SKH01 E DENTRO IL LIBRO NON SI DISTINGUE DA ZERO`**.
**Nessuna proposta**: SKH01 non e' passato per `study_family_honest` su questa griglia, il guadagno
e' misurato sugli stessi 7 anni su cui e' stato selezionato, e la lente `hourly` e' gia' nota (26/07)
per sottostimare il path live. **Il filone stabilisce dove guardare, non cosa fare.**
---
## 53 — SKEPTIC-LEVA (attacco deliberato al gradino di leva)
`scripts/research/r0823_skeptic_leva.py` (**127 s**, sola lettura, zero rete). **Le soglie dei sei
attacchi sono congelate nella sezione (0), scritte PRIMA di guardare le sezioni 2-7.**
**Replica prima di attaccare — 14 numeri, tutti riprodotti:** drift 19,23/17,07% · Sharpe
1,691/1,512 · **k\* 13,69 e 12,31** (§35 dice 13,7 e 12,3) · g(1,00) 17,90% e g(1,25) 22,61%
**esatti** · perpetua 7,55/6,38% · muri $263,3k/$311,7k · anni 14,81 contro 14,7 pubblicati.
E l'appaiamento fra k e' **provato**: `max|paths(1,25·r) 1,25·paths(r)| = 0` ⇒ **i confronti fra k
non hanno rumore Monte Carlo**.
**A1 DRIFT — REGGE, ed e' l'attacco che il mandato riteneva principale.** Bootstrap a blocchi (20 g,
4000 estrazioni): SE **5,09%** (**1,23x l'ingenuo iid** — il clustering allarga, ed e' la scelta
severa), IC95 **[+4,78%, +24,97%]**. Il **drift di pareggio del gradino e' +1,42%/anno = 2,70 SE =
0,25° percentile**: fuori da IC95 **e** da IC99. **Il libro puo' perdere il 90,6% del suo drift e il
gradino resta non dannoso.** Controllo che non dipende dal modello: il **peggior triennio mai
realizzato** (+5,35%) sta **3,8x sopra** la soglia.
**A2 SINISTRO — REGGE, con una qualifica misurata.** Δg(1,25)>0 in **5/5** finestre giudicabili,
**2020-21 tolto compreso** (+2,77%). Ma cercando il **biennio MOBILE peggiore** (non la partizione
arbitraria) ne esce uno vero: da **2021-10, drift 0,45%**, dove il gradino costa **0,31%/anno**.
Rapporto guadagno/costo **13:1**. 🚨 **A parte quel biennio nessuna finestra ha drift negativo**
*l'attacco nella forma piu' forte non e' esprimibile su questo campione*, ed e' esattamente cio' che
il mandato temeva: la sostituzione onesta e' A1, che **impone** il drift invece di cercarlo.
**A3 CODA — REGGE, e corregge §33.** Hill e' k-sensibile (sweep ξ 0,289→0,672): preso il
**peggiore, ξ=0,431**, piu' severo del 0,34 pubblicato. Peggior giorno strutturale a 1,25x
**17,90% < 50%**; P(dimezzamento su 10 anni) **0,100%**. ⚠️ **Correzione:** §33 scriveva *"la coda
muove k\* di 1-2 unita'"* → **ne muove 4,6** (12,31 → 7,71). La conclusione regge (il drift ne muove
6,2) ma **il numero pubblicato era ottimista ~3x**, e a quella coda k\* resta comunque **6x il
gradino**.
**A4 LENTE — REGGE.** Sotto la lente accoppiata (minimo intra-giorno 7,32% **replicato**) il
ricarico del maxDD **cala** con k: 1,2358 → 1,2297 (1,50x) → 1,2237 (2,00x). E la frequenza del
disaster-SL e' **invariante a k per costruzione**: `want_stop` e' un **prezzo** ancorato al mark,
`want_amount` una taglia, e il test di ri-piazzamento e' **relativo** (`want_amount*0,1`) → **il
numero di §40 va moltiplicato, non rifatto**.
🚨 **A5 INVARIANTE — L'UNICO CHE INCRINA, e sta dove nessuno guardava.** Sul **percorso fidato**
l'invariante e' **completo**: la leva vera e' `n_asset·min(WEIGHT·(W_TP01·lev+W_SKH), frac)·scala`,
un **limite superiore** — 0 violazioni su 576 combinazioni. **Ma il percorso fidato non e' l'unico:**
nel ramo **`eq_fallback`** il denominatore del rapporto e' il **watermark** (l'*ultima equity
osservata*), non l'equity. Con un prelievo dell'80% non ancora visto la leva vera e' **5,00x gia' a
k=1,00** e **6,25x a k=1,25**, mentre l'invariante legge 1,00x/1,25x.
📌 **La scala non apre il buco: lo MOLTIPLICA.** ⇒ la guardia **G3 della SPEC non e' opzionale**,
e **la SPEC la presenta come una chiusura mentre non lo e'**. Frequenza del ramo **0/1.442 giri**, e
li' `book_execute` **allerta e non blocca**. Seconda incompletezza: `disaster_sl_pct`=0,30 e'
trattato come tetto di perdita e §40 ha misurato che **non lo e'** (stop rotolante: passano 60%
dall'ingresso).
**A6 FUNDING — REGGE, e nel verso OPPOSTO all'ipotesi del mandato.** Il funding scala con k per
costruzione (`r_k = k·(rf)`, verificato 1,92% → 2,40%). Il gradino vale **+3,49a** (muro mobile) /
**+2,10a** (muro congelato) **col funding dentro**, contro +2,98a / +1,82a senza: **il funding non
riduce il gradino, lo AUMENTA**, perche' peggiora il **caso base** (17,28a contro 14,81a).
⚠️ **Ma il livello peggiora su tutta la colonna:** k=1,25 col funding (13,78a) resta **peggio** di
k=1,00 senza (14,81a) → **il gradino non ripaga il funding, lo attenua.**
| lente | k | drift | perpetua | muro | anni (muro mobile) | anni (muro congelato) |
|---|---|---|---|---|---|---|
| L1 fisco | 1,00 | 17,11% | 7,55% | $263.347 | 14,81a | 14,81a |
| L1 fisco | **1,25** | 21,39% | 9,20% | $216.241 | **11,83a (+2,98)** | **13,00a (+1,82)** |
| L3 +FUNDING | 1,00 | 15,19% | 6,38% | $311.705 | 17,28a | 17,28a |
| L3 +FUNDING | **1,25** | 18,99% | 7,79% | $255.422 | **13,78a (+3,49)** | **15,17a (+2,10)** |
🚨 **RICONCILIAZIONE: il "+1,8 anni / +€164" pubblicato non era una discrepanza, era una
CONVENZIONE NON DICHIARATA.** E' la lettura a **muro congelato** (de-leva al traguardo), riprodotta
a **0,02a**. §33 **non dichiara quale delle due letture usa**, e la differenza fra le due (**1,2
anni**) e' **piu' grande di quasi tutti gli effetti che questo progetto misura**. E il versamento
equivalente misurato direttamente e' **+€144/mese, non €164** — la differenza *e'* l'ipotesi di
linearita' dell'interpolazione.
**K MASSIMO DIFENDIBILE: 1,40.**
| vincolo | k max |
|---|---|
| PROCESSO (scaletta `SCALA_LADDER`) | **1,25** |
| **SCETTICO** peggior giorno strutturale ≤20% (recupero +25%) | **1,40** |
| PROGETTO disaster-SL ≤50% equity (G6) | 1,67 |
| PROGETTO mezzo-Kelly al limite basso IC95 | 1,92 |
| PROGETTO peggior giorno ≤50% (C1 §33) | 3,49 |
Coi **soli vincoli gia' dichiarati dal progetto** sarebbe **1,67**, e a mordere e' **G6 (il
disaster-SL), non il peggior giorno**. La soglia del 20% e' **aggiunta dall'agente ed e' una
proposta, non una regola**. 🚨 **Il 1,50x NON sopravvive**: sfonda il 20% (21,48%) e sta al 90% del
tetto G6. **La scaletta a 1,25 resta giusta: e' l'unico gate che il progetto ha contro un parametro
che nessun altro gate vede.**
⚠️ **Attacchi NON portati, dichiarati:** (a) **banda d'ancora del guadagno in anni** — e' un Δ su
griglia ancorata, servivano 23×24 ancore congiunte, fuori dal budget di 2 CPU; **il segno non e' in
dubbio** (positivo a ogni drift dell'IC95), **la taglia in anni si'**, ed e' la stessa distorsione
che ha gia' ridimensionato il numero funded da 7,8% a 4,4%; (b) **slippage a taglia crescente**
§5 ha misurato un fill al **21,9% del volume della sua barra 5m** a $635 con partecipazione lineare
**1,25x lo porta al 27,4% SUBITO, non a $5.000**: *va misurato prima del gradino*; (c) costo di
margine sopra 1x — **non esiste** su un perp lineare marginato in USDC (il carry *e'* il funding,
gia' dentro); (d) coda di venue — vive sul suo asse separato.
**VERDETTO: `IL GRADINO 1,25x SOPRAVVIVE A CINQUE ATTACCHI SU SEI; IL 1,50x NO; k MASSIMO
DIFENDIBILE 1,40`** — e l'unica incrinatura non e' nel gradino ma nella **guardia che lo
accompagnerebbe**.
---
## 50 — BOOK-3RD (il terzo sleeve del libro LIVE)
`scripts/research/r0823_book_3rd.py`. **Nessun file di produzione toccato, nessun ordine.**
Distingue i due oggetti che il progetto confonde di continuo: il **book di RICERCA a 5 sleeve** (su
cui sono calcolati quasi tutti i numeri pubblicati) e il **LIBRO LIVE a 2** (TP01 75 / SKH01 25),
che **non ha mai avuto un terzo sleeve**.
### Lo stato REALE dei candidati (venue letto ORA, non memoria)
| candidato | su Deribit? | capitale/lotto minimo | **netta col libro?** | gate |
|---|---|---|---|---|
| STATARB-RESID | SI' | $5 (soglia **nostra**) | **SI'** | 27/09 aperto |
| DVOLSPREAD | SI' | $5 (soglia nostra) | **SI'** | 24/10 kill · 24/01 dec. |
| **PREVDAY** | SI' | $5 (soglia nostra) | **SI'** | 🚨 **nessuno, mai registrato** |
| XS01 (19 gambe) | **NO — 5 mancano** | 14/19 quotate, 11 da ≥1 anno | parziale | — |
| XS01-D (11 gambe) | SI' (ridotta) | $0,09-7,72 dal venue | parziale | — |
| XSR01 | **NO** — venue diverso | n/d | NO | 23/10 aperto |
| VRP01 | SI' (ETH) | **lotto ETH $242 · BTC $772** | NO | regola short-vol |
| GTAA01 | **NO** | PRIIPs: ordine RIFIUTATO | NO | — |
📌 **Il vincolo che nessuno aveva messo in tabella, letto dal sorgente:** `book_net_target` somma
i due sleeve in **UN** numero per asset e `build_book_order` manda **UN** ordine ⇒ **un terzo sleeve
direzionale su BTC/ETH non paga un min-order proprio** (misurato: 163 → 344 ordini/anno a $635, ma
il **turnover sale solo del 14%**) — e per disuguaglianza triangolare `|Δ(Σw·p)| ≤ Σw·|Δp|`, cioe'
**le fee modellate per-sleeve sono un limite SUPERIORE**. Il rovescio: **non puo' avere un proprio
stop**, e uno su strumenti diversi richiede una riga in `_CONTRACT` = codice su un percorso con
soldi veri.
### La misura (1000 estrazioni congiunte, differenze APPAIATE, funding dentro, peso 15%)
✅ Replica di controllo prima di ogni delta: **1,813 / 1,437 / 9,42%** riprodotti; replica ancorata
**bit-exact (max|dif| = 0,0)** contro lo sleeve di produzione, idem XS01/VRP01/STATARB.
| candidato | dShFULL | >0 | dShHOLD | d drift | `weights_tilt_null` |
|---|---|---|---|---|---|
| **PREVDAY** | **+0,192** | 100% | **+0,363** | **+1,31pp** | PASS |
| STATARB | +0,159 | 100% | +0,081 | 0,12pp | PASS |
| VRP01 | +0,121 | 100% | +0,067 | +0,19pp | PASS |
| XS01 (19) | +0,110 | 100% | +0,378 | +0,79pp | PASS |
| DVOLSPREAD | +0,073 | 100% | +0,062 | 1,12pp | PASS |
| XS01-D (11) | **0,024** | 7% | 0,128 | 0,73pp | **FAIL** |
⚠️ `weights_tilt_null` passa **25/28**, ma il numero da leggere e' `frac_random_beat_hold`, che
arriva a **0,94**: dove vale cosi', *"questo candidato migliora l'hold-out"* e' un claim **generico**.
Il gate **ha potenza** (fallisce su XS01-D), resta **necessario e non sufficiente**.
### Due fatti di venue che contraddicono la memoria
🚨 **(1) Il muro del lotto di VRP01 era misurato sulla famiglia SBAGLIATA** — inverse, che un conto
USDC **non puo' marginare**. Sulla **USDC-lineare** il lotto ETH e' **$242** (non $1.832) e il BTC
**$772** (non $6.210) ⇒ 1 lotto ETH = peso 12% gia' da **~$2.000**. **Cade il lotto, non la regola**
*"niente short-vol da modello in deploy"*. **5ª occorrenza dello schema `fee_watch`** (un controllo
puntato su una configurazione diversa da quella che gira).
🚨 **(2) XS01 non e' bloccato dal capitale, e' bloccato dal VENUE.** Deribit quota **14 dei 19**
major, ma **3 sono listati fra il 15 e il 21 agosto** e APT non ha nemmeno una quota. Sulle **11 con
≥1 anno** il meccanismo **collassa: Sharpe 1,265 → 0,116**. E il null dei sottoinsiemi **separa le
cause**: sottoinsieme **mediano** da 11 = 0,548 ⇒ **il 62% della caduta e' AMPIEZZA, che il capitale
non compra**; quello di Deribit sta al **9° percentile** ⇒ il resto e' **quali** gambe mancano.
**Aspettare 2-3 listing non basta.**
### La scala — e non esiste
📌 **Non c'e' una soglia di capitale che ammette un terzo sleeve.** Il capitale sposta **solo
VRP01** (~$2.000 gamba ETH), che e' fermo **per una regola**. Le due date che contano sono un
**gate** (27/09, costa zero) e la **decisione di venue ($20k)**, che e' cio' che riapre XS01 sulle
19 gambe.
⚠️ **Caveat pubblicato dall'agente in testa al verdetto:** sono **7 candidati × 4 pesi = 28
configurazioni sullo stesso hold-out**, nessuna passata per un deflated-Sharpe **di screen** → *il
modo giusto di usare la tabella e' scegliere un candidato per una ragione dichiarata PRIMA, non
prendere il massimo di 28.*
🚨 **IL BUCO PIU' EVIDENTE, ed e' un fatto di processo: PREVDAY.** E' **il piu' forte misurato**
(+0,192 FULL / +0,363 HOLD, 100% delle estrazioni), **eseguibile**, **netta col libro**, **ADDS**,
`robust_oos` **TRUE**, forward Sharpe **+2,04 su 63 giorni** — l'unico monitor risultato **sano**
dopo l'audit §32 — **e sta in forward-monitor da giugno senza gate pre-registrato e senza
deflated-Sharpe.** Ogni altro lead del progetto ne ha uno. **E' una decisione dell'operatore.**
**Attesa a priori dichiarata prima di misurare: A1 confermata, A2 meta' giusta, A3 e A4 REFUTATE**
(STATARB da' +0,159 non <0,10; XS01 non entra a $2-5k **ed e' rotto anche a $20k, per venue**),
**A5 confermata al rovescio***la sorpresa e' un candidato dato per NON eseguibile che lo e'*.
**VERDETTO: `SETTE CANDIDATI, SETTE MURI DIVERSI, E NESSUNO DEI SETTE E' UNA SOGLIA DI CAPITALE`**
nessuno ammissibile oggi. **Libro, pesi, cron, config INVARIATI.**
---
## 52 — SKEPTIC-SPOT (attacco deliberato al lead dello spot)
`scripts/research/r0823_skeptic_spot.py` (**127 s**). **Sola lettura provata:**
`git status -- src/ config/ scripts/live/ scripts/cron_*.sh tests/ data/ docs/` **vuoto**, **0
ordini**, solo GET pubbliche con pacing e astensione :05-:10 / :24-:30. ✅ Replica **bit-exact**
prima di ogni delta (`max|dif| = 0.0` contro `FD.tp01_realistic`), con +2,106% di sleeve e +1,580%
di libro protetti da `assert`.
**A1 allineamento/lag — REGGE.** Sei coppie di serie su due asset: l'indice ha il massimo a lag +1
(= lo `shift(-1)` che `aligned_index` fa), lo spot — scaricato da un **endpoint diverso** — a lag 0
come il perp: **terza conferma indipendente della convenzione**. E la domanda si ribalta:
`spot_rate` (perp indice) vale **+0,015%/anno in log** contro +0,55% aritmetico ⇒ **il +1,55% non
viene dall'indice, viene dalla serie del funding** (contributo dell'indice: 0,006%/anno).
*L'attacco puntava a un pezzo che pesa nulla.*
🚨 **A2 controfattuale — INCRINA, e corregge §39.** §39 dichiara *"lo spot vero non ha storia in
questo progetto"*: **falso**. `get_instruments` da' `creation_timestamp` **2023-04-24** e
`get_tradingview_chart_data` serve **29.196 barre orarie, 0 ore mancanti**. TP01 girato sul **prezzo
spot vero** contro il perp, **24 ancore, differenze appaiate**: mediana **+0,166%/anno di sleeve**
[p10 0,445, p90 +0,581], **16/24 positive** → banda che contiene lo zero, punto stimato **a favore**
dello spot ⇒ **il controfattuale sul PREZZO e' innocuo**. Ma lo strumento **non esisteva per il
55,3%** del campione, e nel 2023 aveva ~9% di ore senza scambi e ~15% di barre piatte (**la soglia
con cui questo progetto escluse gli alt Deribit**). Lordo per finestra: **+1,580% (7,4 anni) →
+1,450% (era spot) → +1,180% (era liquida 2024+)**.
**A3 tetto 1,0x — REGGE, e il bersaglio ne esce piu' forte.** I 3 giorni sopra 1,0x sono BTC
2018-11-10/11/12 (max 1,012), **prima dell'era del libro e in perdita**: troncare avrebbe
**guadagnato** +0,013%.
🚨 **A4 spread e profondita' — INCRINA, ed e' l'attacco che decide.** Sullo **spread** fallisce:
mezzo spread **4,34 bps** (10 giri) contro 1,5-3,1 di §45, ma **like-with-like** il contributo netto
(spread pagato commissione risparmiata, spot a fee 0) e' **[0,047%, +0,153%]** e **si sovrappone**
alla banda pubblicata. Sulla **profondita' morde**: camminando **entrambi i libri** per ogni ordine
storico, il differenziale spotperpfee e' **+0,72 bps a $600 (0,04%/anno)** e **+25,66 bps a
$272k = 1,540%/anno, il 97% del lead lordo**.
📌 **IL LEAD SI ANNULLA ESATTAMENTE ALLA TAGLIA DEL MURO CHE PRETENDE DI SPOSTARE: il muro NON
scende del 10,9% pubblicato.**
**A5 haircut — REGGE.** Nessun haircut ≤100% rende binding il margine (**copertura 50,0x replicata
al decimo**). ⚠️ Correzione a §45: *"lo spot non si liquida"* e' **falso** — BTC/ETH hanno
`in_cross_collateral_pool: true`, quindi **sono** collaterale liquidabile. Non binding, **ma il
verso e' contrario alla prudenza**.
**A6 disaster-SL tolto a TP01 — REGGE.** Allo scenario operativo (72h) vale **1,497% di equity di
gamba una volta sola** = **0,152%/anno** ammortizzato (**10% del lead**). TP01 e' long-flat a
esposizione media 0,12-0,16x: *nei crolli e' gia' quasi flat*.
📌 **NUMERO ONESTO RIVISTO: `[+1,38%, +1,58%]/anno a $600` · `0,11%/anno a $272k`.**
⚠️ **Tre errori dell'agente, catturati e dichiarati nello script.** (a) Confrontava il costo di
**spread** con la banda **netta** di §45 — mele contro pere, **nel verso che gli conveniva**;
(b) l'aritmetica del margine metteva SKH01 a 1,0x su **ciascun** asset invece che sul proprio sleeve
(25,0x invece di 50,0x: **§45 aveva ragione**); (c) ammortizzava su 7,4 anni la coda di un blackout
da 30 giorni **preso come argmax**, ottenendo 1,97%/anno = **il 127% del lead da un evento mai
accaduto**. 📌 **E gli stimatori di spread da OHLC (Roll, Corwin-Schultz) sono stati SQUALIFICATI
DAL PROPRIO CONTROLLO POSITIVO** (davano 4-16 bps su un perp che sta a **un tick**) e i loro numeri
cancellati.
⚠️ **Attacchi non portati:** la distribuzione **giornaliera** dello spread (ha 10 giri di **una**
ora; servirebbe un campionatore orario per ~30 giorni, 2 GET/ora, **€0**); il f di **esecuzione**
vero (richiede l'ordine di prova da $7,73 = decisione dell'operatore); l'haircut resta **non
leggibile** (`get_collateral_info`*Method not found*), **aggirato invece che risolto**; il muro
rifatto con costo d'esecuzione **funzione del capitale** (seguito naturale di A4); la liquidita'
2019-2023 **non esiste per definizione**; e **la domanda fiscale (~0,83%/anno) resta dominante e non
falsificabile con un backtest**.
**VERDETTO: `IL LEAD REGGE A $600 E SI ANNULLA A $272k — CIO' CHE MORDE NON E' NEI SUOI NUMERI, E'
NELLA TAGLIA A CUI VENGONO SPESI`**.
---
## 54 — PREVDAY-GATE (il gate che il lead piu' forte non ha mai avuto)
`scripts/research/r0823_prevday_gate.py` (**215 s**). Nessun file di produzione toccato (`git diff`
vuoto; **sola lettura provata a runtime con md5+mtime su 6 file**).
**Famiglia dichiarata e trial contati al rialzo, STAMPATI PRIMA di ogni risultato:**
`ANCHOR_DAYS{1,2,3,5}` × `BUFFER_K{0…1,00}` × `ALLOW_SHORT{T,F}` × `MIN_HOLD_H{0,24,72}` ×
`TF{1h,4h}` = **336 celle**; le **11** gia' spese in giugno e le **≥8** della scoperta sono
**dentro**. Escludere il TF 15m rende il conto **piu' permissivo**, ed e' dichiarato. Screen:
N=352 / N_sweep=456.
🚨 **IL RISULTATO PRINCIPALE: la cella al buio non e' quella che gira.**
| | AL BUIO (in-sample) | CONGELATA (monitor) |
|---|---|---|
| tf / parametri | **4h, k=0,30, short=FALSE** | 1h, k=0,30, **short=TRUE** |
| rango in-sample | **1/336** | **186/336** |
| Sharpe FULL / HOLD | +1,621 / +0,731 | +1,236 / +1,297 |
| corr → TP01 (full/hold) | **0,641 / 0,469** | **0,152 / 0,028** |
| deflated-Sharpe N=336 | **0,993 PASS** | **0,905 FAIL** |
`earns_slot_honest = True`, **ma su un'altra strategia**. 📌 **La selezione onesta compra il libro
LONG-FLAT — mentre il docstring della scoperta dice l'opposto in chiaro** (*"LONG-SHORT is the
slot-earner… the long-flat sibling just re-rides the bull"*): **la gamba short, cioe' l'intera
ragione per cui PREVDAY fu promosso a LEAD, e' esattamente cio' che la selezione in-sample-only non
compra.** Rovescio dovuto e riportato: **la cella al buio diversifica molto meno** (corr 0,64 contro
0,15). ✅ `factory(FROZEN) == pb.target` bit-exact 2/2, `causality_ok` ok, identita' con
`study_family_honest` verificata.
**Attesa a priori del coordinatore REFUTATA sul DSR, e il perche' e' MISURATO.** Tutte le
partizioni difendibili **PASSANO** (N=11 → 1,000; N=168 → 0,996; N=336 → 0,993; famiglia+screen
N=352 → 0,991; N=560 → PASS): **portare N da 11 a 560 costa 0,009 di DSR**, e il verdetto si
ribalterebbe solo a `sd(trial) ≥ 0,363` contro **0,267** misurata. **Ma non e' vacuo:** controllo
positivo — la cella **mediana** della stessa famiglia **FALLISCE** (0,863), il 25° pctl 0,593.
📌 **REGOLA NUOVA, che completa il filo §10: su una famiglia OMOGENEA il deflated-Sharpe e' cieco
sul CONTEGGIO e vede sul LIVELLO.** Il 30/07 VRP01 si ribaltava col conteggio **perche' quella
famiglia era larga**. *Non e' il gate a essere incoerente: e' la larghezza della famiglia a decidere
su quale asse ha potenza.*
**`day_boundary_robust` — ROBUST** (8h +0,114 · 4h +0,218 · 0h **+0,328** · +4h +0,215 · +8h
+0,164, spread 0,214, **mai negativo**; controllo positivo superato: un segnale puramente di
calendario esce ARTIFACT-RISK). ⚠️ Ma sui **24 confini-giorno la canonica e' al 96° pctl**: ShFULL
1,236 → **mediana onesta 0,963**, uplift +0,328 → **+0,190**.
⚠️ **Trovato per strada:** il campo `base` di `altlib.day_boundary_robust` e' **`offsets[0]`, non lo
zero** — con una griglia che comincia in negativo **l'etichetta inganna**.
📌 **Banda d'ancora del LIBRO — §50 non aveva de-luckato il candidato.** Spazio congiunto
TP01×24 · SKH01×23 · **PREVDAY×24** = 13.248 configurazioni, 300 estrazioni, differenze appaiate.
**Replica indipendente di §50 a candidato fermo: +0,191/+0,362** contro i +0,192/+0,363
pubblicati. **De-luckato a peso 15%: dShFULL +0,100 (100% delle estrazioni) / dShHOLD +0,246.**
**Il segno regge al 100% a ogni peso; la taglia si dimezza.**
**MDE, integrita', funding, tilt-null.** **MDE:** 63 giorni = 0,172 anni → **t = 0,85 (naive) /
0,48 (Lo)**, IC95 largo **16,6 punti di Sharpe**; per distinguere uno Sharpe vero di 1,2 dal nulla
all'80% servono **9,4 anni**. ⚠️ E **il "+2,04" e' su lente ORARIA**: sulla lente **giornaliera** con
cui e' misurato ogni altro sleeve del progetto e' **+1,56**. **Integrita':** 1512/1512 ore, 0
duplicate, **95,6% ricostruibili bit-a-bit**; le 67 divergenti sono 1,06/giorno **all'ora del cron**
⇒ ~32 min/giorno non registrati (contro i **4 min/giorno** di `paper_statarb`): **sano, non
perfetto**. **Funding** (mai in nessun backtest): **1,37%/anno** di sleeve, e 📌 **la gamba short
NON compensa** — incassa 0,26-0,46x l'incondizionato mentre la lunga paga 1,25-1,69x.
**`weights_tilt_null`:** PASS a tutti i pesi, ma **`frac_random_beat_hold` = 0,91**.
### `GATE PREVDAY-01` — decisione **2027-06-21**
*(La data non e' scelta perche' la finestra diventi informativa — la misura dice che **non** lo
diventa — ma perche' oltre un anno **tenere un lead senza decidere e' esso stesso una decisione**.)*
Promozione al peso 15% **solo se TUTTE**: **(a)** DSR ≥ 0,95 sulla famiglia ri-dichiarata **prima**,
con la sensibilita' alla partizione pubblicata accanto; **(b)** la cella al buio **coincide** con
quella congelata, **oppure** il monitor si ri-congela su quella al buio **e il forward riparte da
zero**; **(c)** delta di libro appaiato sullo spazio congiunto **> +0,05** dShFULL, positivo in
**≥90%**, **col funding dentro**; **(d)** `weights_tilt_null` pass; **(e)** ADDS + robust_oos +
non-hedge **sulla cella al buio**; **(f)** `day_boundary_robust` ≠ ARTIFACT-RISK; **(g)** Sharpe
forward > 0, **soglia debole di proposito**.
**Veto d'integrita'** (blocca, non decide): ≥80% di barre ricostruibili **e** i minuti non
registrati non devono crescere. **Kill:** Sharpe forward < 0,50 su ≥180 giorni di barre **attive**
— a quell'orizzonte P(uccidere un edge vivo a Sharpe 1,2) = **9,7%**; **al kill la famiglia NON si
ri-ottimizza.**
⚠️ **Errori dell'agente su se stesso:** **A1 giusta nell'esito, sbagliata nel meccanismo** (prevedeva
un `k` piu' piccolo; k resta 0,30, a cambiare sono `ALLOW_SHORT` e il TF); **A2 refutata** (il DSR
non si ribalta col conteggio); **A5 giusta nel numero, sbagliata nel meccanismo** (credeva che la
gamba short compensasse il funding).
**VERDETTO: `IL GATE E' SCRITTO E OGGI PASSA 8 CONDIZIONI SU 10 — LE DUE CHE MANCANO SONO LA STESSA
COSA: LA CELLA CHE GIRA NON E' QUELLA CHE LA SELEZIONE ONESTA SCEGLIE`**. **Nessun cambio al libro
live proposto.**
### Addendum del coordinatore — la finestra forward di PREVDAY non puo' decidere niente
Misura mia, sulla serie che il gate userebbe (`data/paper_prevday/returns.jsonl`, **sola lettura**).
**La serie e' INTATTA**: **1512 barre orarie su 1512 attese** dal 2026-06-21 01:00 al 2026-08-23
00:00, zero buchi — **e' il monitor sano**, quello che il difetto `advance()` non tocca (cadenza
oraria, la barra si chiude ogni ora). Questo la distingue da STATARB/XSR01/DVOLSPREAD.
**Ma la finestra e' lunga 0,172 anni**, e li' l'**MDE(95%) e' 4,72 di Sharpe**: lo **+2,11**
osservato **non e' distinguibile da zero**. Il campione di scommesse e' **26 ENTRY** (14 BTC /
12 ETH, 151 trade/anno). ⚠️ **Conseguenza per `GATE PREVDAY-01`: qualunque cosa il gate decida, non
puo' appoggiarsi al numero forward** — le 8/10 condizioni superate stanno in piedi sul backtest e
sulla struttura, non sui 63 giorni di monitor.
⚠️ **Errore mio, catturato prima di pubblicarlo:** avevo formulato il meccanismo come *"la
precisione apparente viene dal numero di MARK, non dal numero di SCOMMESSE"* — **falso**. La
deviazione standard dello Sharpe annualizzato vale ~`1/sqrt(anni)` **indipendentemente dalla
frequenza di campionamento**: infatti la stima al livello barra e quella al livello trade danno lo
**stesso** 4,72. Campionare piu' fitto non gonfia la precisione, e la formula lo sapeva gia'.
**Il fatto vero e' piu' semplice: 63 giorni sono 63 giorni.**
---
## 56 — XS-AMPIEZZA (recuperare ampiezza su un universo povero)
`scripts/research/r0823_xs_ampiezza.py` (**235 s**). **Sola lettura provata** (`git status` su
`src/ config/ scripts/live/ scripts/cron_*.sh tests/ data/ docs/` **vuoto**, 0 ordini, GET pubbliche
con pacing e astensione). ✅ Replica **bit-exact** contro `sleeves._xsec_returns`
(`max|dif| = 0,0`) prima di ogni delta. Griglia dichiarata prima: 4 kind × 5 k × 2 lookback × 2 H =
**80 celle**.
### N_eff — il gate, in cima perche' decide
| universo / costruzione | gambe | rbar | **N_eff (autovalori)** | Sh FULL |
|---|---|---|---|---|
| **19 HL (canonico)** | 19 | 0,028 | **9,34** | 1,336 |
| 14 quotate Deribit | 14 | 0,049 | **8,03** | 0,893 |
| **11 Deribit ≥1 anno** | 11 | 0,067 | **7,23** | 0,193 |
| 11 — demean / resid / equal-risk / whitening | 11 | — | 7,13-7,21 | 0,193 / 0,550 / 0,088 / 0,051 |
| 11 — nudo L=30 / **k=2** | 11 | — | 8,47 / 8,30 | 0,243 / **0,669** |
🚨 **N_eff scende del 23% mentre lo Sharpe scende dell'86%**: sotto `IR = IC·√ampiezza` la sola
ampiezza predirebbe 1,175, cioe' **il 14% del divario**. E **nessuna costruzione la muove**
(7,13-8,47). ⇒ **L'etichetta "62% e' AMPIEZZA" di §50 descriveva il NUMERO DI GAMBE, non l'ampiezza
effettiva.**
⚠️ **La formula importata da XSR01 DEGENERA qui, e l'agente l'ha detto invece di usarla:** con
`rbar` negativa `N/(1+(N1)·rbar)` **esplode sopra N** (fino a 33 su 11 gambe). Non e' un difetto di
quella formula — su un paniere di **coppie** rbar e' positiva, mentre le gambe di un long/short
cross-sezionale sono **anti-correlate per costruzione**. Si legge il **participation ratio**.
📌 **E il demeaning — la mossa che CREO' XSR01 — su XS01 e' un NO-OP ALGEBRICO:** XS01 mette
+0,5/k e 0,5/k, quindi **`sum(w) = 0` per costruzione** (`max|Σw| = 2,8e-17`, serie identiche a
2,2e-16). *Non e' un risultato debole: e' un'identita' valida a ogni universo e ogni k.*
### Il canale che porta tutto e' `k` — e solo sull'universo povero
Differenze **appaiate sulle 10 fasi** del ciclo H=10:
| confronto | mediana | fasi >0 |
|---|---|---|
| **k=2 MENO canonico k=5 (11 gambe)** | **+0,832** | **100%** |
| k=3 MENO canonico k=5 (11) | +0,650 | 100% |
| resid k=2 MENO k=2 (11) | +0,125 | 80% |
| equal-risk / whitening / nudo / H=20 | 0,06 / 0,02 / 0,37 / 0,69 | 20/50/20/**0%** |
| **k=2 MENO canonico k=5 (19 gambe)** | **0,080** | **30%** |
🚨 **`k=5` NON E' UN PARAMETRO INVARIANTE DI SCALA.** Fu tarato su A=19, dove seleziona il **26%
per lato**; su A=11 e' il **45%** — con k=5 si tengono **10 posizioni su 11**, e lo spread z
longshort crolla da **2,08 a 1,43**. Plateau monotono su k∈{1,2,3}, **piatto su 19 gambe**.
**Il null a fee zero, e il p-value de-luckato** (mai fatto prima in questo progetto): canonico k=5
p=0,355 · k=2 p=0,165 · **resid k=2 alla fase 0 p=0,005** — ⚠️ ma quella fase sta al **90° pctl** per
quella cella, e de-luckando sulle 10 fasi **p mediano 0,130, sotto 0,05 solo nel 40%**.
*Il verdetto del null cambia con l'ancora, e l'ancora e' una scelta.* ✅ Controllo positivo:
canonico su 19 gambe p=0,010.
🚨 **DOVE STA DAVVERO IL DIVARIO: L'IC.**
| universo | IC | t |
|---|---|---|
| 19 HL | **+0,0565** | **+2,29** |
| 14 quotate | +0,0108 | +0,44 |
| **11 Deribit ≥1 anno** | **0,0270** | 0,88 |
| 9 alt maturi (11 senza BTC/ETH) | **0,0652** | **2,07** |
| le 8 mancanti da sole | +0,0075 | +0,26 |
Su **40 sottoinsiemi casuali da 11**: mediana +0,059, minimo +0,0115 → **Deribit al 0° percentile,
fuori dalla banda**. §50 lo chiamava *"sfortuna di listino"* al 9° pctl dello **Sharpe**; **sull'IC
e' strutturale**.
📌 **E poiche' ne' i major ne' le mancanti hanno IC da soli, l'informazione vive nel CONTRASTO FRA
LE FASCE: XS01 e' in buona parte una rotazione major-maturi contro alt-recenti, non una selezione
dentro una fascia.** *(E' la descrizione piu' precisa di XS01 prodotta finora, e arriva da un
tentativo di ripararlo.)*
**MDE e gate.** 966 giorni, **936 attivi (97%)**, in-sample = il solo **2024**. SE(Sharpe): FULL
0,66 · **in-sample 1,75** · hold-out 0,83 → **MDE hold-out 2,34**. Lo spread di coda che dovrebbe
pagare il recupero ha **t 0,24 (k=2) / 0,57 (resid k=2)** contro 1,91 dell'universo pieno. Cella al
buio `white k=1` → IS +1,90 / **HOLD 0,53**; **DSR 0,158 FAIL** (massimo atteso dal rumore
**1,065** contro candidato 0,459); `marginal_vs_tp01` NEUTRAL.
🚨 **ERRORE CATTURATO SU SE STESSO, e vale come regola: la selezione in-sample-only NON e' stabile
alla dichiarazione della griglia.** Con k∈{2,3,4,5} (64 celle) la cella al buio era `resid k=2`
IS +1,46 / **HOLD +1,33** / FULL 1,38, **un candidato che REGGE**. Aggiungendo k=1 (estensione del
plateau, **decisa prima di guardare**) diventa una cella che fa **HOLD 0,53**. **Con ~1 anno di
in-sample la procedura onesta e' una monetina.**
⚠️ **Secondo errore catturato:** la prima misura d'eseguibilita' usava `|ΔW|` e dava *"ticket $19,
100% eseguito"*. La posizione in dollari e' `W·scale`, e il vol-target muove il nozionale ogni
giorno anche a pesi fermi. Corretta: a $635 **83% del nozionale** eseguito (96% a $5k) — e
**riproduce per via indipendente le due popolazioni di §45** (ribilanci di segnale 11,9% degli
ordini / **62,5% del nozionale**; deriva del vol-target 88,1% / 37,5%). **Il muro non e' il
capitale, e' l'IC.**
**Eseguibilita' dal venue:** 14/19 quotate, di cui SUI (18/08), **APT (21/08, nessuna quota)** e
AAVE (15/08) listate negli ultimi 8 giorni; **11 da ≥1 anno**; lotti **$0,01-7,72**. Solo **2 delle
11** (BTC, ETH) netterebbero col libro live: **le altre 9 pagano min-order proprio** e vorrebbero
righe nuove in `_CONTRACT`.
**Attesa a priori del coordinatore: giusta nella conclusione, SBAGLIATA nel meccanismo** — dicevo
*"il 62% e' ampiezza e l'ampiezza non si compra"*; l'ampiezza **non e' quasi per niente il
problema**.
📌 **DA PORTARSI VIA: congelare un meccanismo su un universo nuovo vuol dire congelare il
QUANTILE, non il numero di posizioni.** Su XS01 la differenza vale **~0,8 di Sharpe**. *(Stessa
famiglia della lezione SOL del 22/08: il criterio di selezione di SKH01 non sopravvive a un asset
nuovo.)*
**VERDETTO: `NO — E LA CADUTA NON ERA AMPIEZZA: E' SELETTIVITA' (RECUPERABILE, MA SOTTO L'MDE) PIU'
UN IC CHE SU QUELLE 11 GAMBE VALE ZERO`**. XS01 resta bloccato dal venue, **e adesso si sa
perche'**. **Libro, pesi, cron, config INVARIATI.**
---
## 55 — COSTO-CAPITALE (il costo d'esecuzione come funzione del capitale)
`scripts/research/r0823_costo_capitale.py` (**144 s**, sola lettura, nessun ordine). Nato da un
follow-up che **due agenti hanno dichiarato indipendentemente** la stessa notte (§52 e §53).
### La curva costo-taglia, misurata
**[VENUE]** 50 istantanee (25+25) in 35 minuti, **camminate su entrambi i lati** — non una
fotografia. Mediana [p10-p90]:
| ordine | BTC_USDC-PERP | ETH_USDC-PERP |
|---|---|---|
| $5 | **0,006** [0,006-0,356] bps | **0,021** bps |
| $500 | 0,006 | 0,021 |
| $5.000 | 0,315 | 0,373 |
| $50.000 | 0,714 | 1,284 |
| $500.000 | **2,198** | **2,207** |
| $1.000.000 | 14,03 | 5,22 |
Fine del libro visibile: **BTC $2,81M · ETH $1,19M**. **Il fondo della curva e' il mezzo spread = UN
TICK.** ⚠️ Il campione e' di **domenica notte UTC**, la finestra piu' sottile della settimana:
**conservativo dentro il presente, ottimista proiettato su 2019-2026** — dichiarato in testa allo
script.
**Repliche 8/8 + R9**: TP01/SKH01/libro a costo spento **bit-exact**; muri **$272.061** e
**$258.338 al dollaro** sul vintage 07/08, **$313.143** oggi; `accumula_costo` bit-exact contro
`PN.accumula`; `walk_cost_bps` identica a quella di §52; **R9: k\* a costo zero = 12,25x =
`FD.k_star`**. Due controlli positivi obbligatori superati.
**Il muro col costo endogeno: $313.143 → $315.080 = +0,6%**, convergente in una iterazione.
📌 **Va letto come NULLO**: la bisezione e' un Monte Carlo a 4.000 percorsi con risoluzione ~1%.
Con la curva p90 resta +1,4%.
**Il punto di saturazione — due definizioni indipendenti, stessa decade:** **duro** (primo 1% di
nozionale annuo non eseguibile in un istante) **$10,0M**; **economico** (argmax di `C x drift(C)`)
**$9,49M** [$8,46-10,64M], profitto $1,28M/anno. 📌 **Non e' un ottimo liscio: la saturazione E' la
fine del libro visibile.** E **la cura e' dell'esecutore, non del mercato** — $1,25M costano 41,8 bps
in un istante e **1,1 bps a tranche da $125k**; serve solo a ~$10M. **SKH01 satura prima** (ordine
~100x la mediana di TP01, e il 69% del nozionale annuo), **TP01 lo supera subito dopo** per la coda
dei suoi ordini.
**Traiettoria €500/mese: 17,3a / P(20a) 85,1% → 17,3a / 84,7%.** L'attesa del coordinatore era
giusta, **ma per un motivo in piu' di quello previsto: il drag CAMBIA SEGNO** (0,118%/anno a $2k,
+0,118% a $1M). **Gradino di leva: k\* 12,50x → 12,25x** alla taglia del muro; **a $635 il costo
aggiuntivo di 1,25x sta sotto il punto base l'anno**; morde solo a $5M.
**Le due obiezioni degli scettici, misurate.** **§52 non e' contraddetta, e' confermata dall'altro
lato:** il costo che si annullava era dello **SPOT** (spread **100-500x** piu' largo del perpetual).
**§53 aveva la domanda giusta e la grandezza sbagliata:** il 21,9% era la quota di una barra 5m **a
volume basso**; l'ordine di oggi e' lo **0,13% (BTC) / 0,43% (ETH)** della profondita' a 1 bps, e a
1,25x diventa 0,16% / 0,54%. **La riserva di §53 e' misurata e non regge.**
🚨 **IL FATTO TROVATO PER STRADA, ed e' il piu' utile: alla taglia di oggi il costo che le tabelle
pubblicate non contengono ha segno NEGATIVO.** Il drift a **$635 e' 13 bps/anno PIU' BASSO** che a
$5.000 — e non per lo slippage: e' il **pavimento `min_order` $5**. Vale **~2x** quello che lo
slippage costa passando da $313k a $1M, **in direzione opposta**. *Il conto piu' preciso non muove
il muro: sposta il segno dell'errore, e alla taglia di oggi lo sposta a favore.*
⚠️ **Errori dell'agente, catturati e pubblicati nello script:** (i) la banda p10/p50/p90 era
costruita con **tre oggetti-curva separati** → oltre il libro visibile la p10 finiva **sopra** la
p50: *una banda che si incrocia non e' una banda*; (ii) il controllo positivo del drag era
**degenere per costruzione** (costo costante di 20 bps, che sparisce da un drag **differenziale**) —
stessa forma del null de-levering degenere di §5-bis: *un controllo puo' fallire perche' e'
costruito male, non perche' la macchina e' rotta.*
**VERDETTO: `IL COSTO ENDOGENO NON MORDE — IL MURO SI SPOSTA DI +0,6% (DENTRO LA RISOLUZIONE MC) E
LA SATURAZIONE STA 30x SOPRA`**. **Libro, pesi, cron, config INVARIATI.**