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

25 KiB
Raw Blame History

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
2 GROWTH-POLICY LEAD (condizione, non data) il libro gira al 7% di Kelly e raccoglie il 15% della crescita massima in log; il gradino eseguibile 1.00x->1.25-1.50x vale 14.7a -> 12.9-11.6a al muro. Ma un solo giorno -10% all'anno porta k* da ~10x a 2x: non si decide su un conto vero con la lente close-only
12 ORTHO-SCREEN SCARTATO 7/7 nessuna famiglia arriva a ADDS+DSR; e il motivo e' aritmetico: su 168 trial il massimo atteso dal rumore e' Sharpe 1.572, SOPRA il soffitto direzionale misurato (~1.3) -> uno screen largo su BTC/ETH direzionale non puo' passare un DSR, per costruzione
3 XS-LITE SCARTATO (come sleeve) + 1 soglia pubblicata falsificata concentrare XS01 non crea uno sleeve nuovo (corr 0.81-0.96 col canonico, DSR FAIL, de-levering non superato) — ma il muro "XS01 serve ~$20k" e' misurato su una diagnostica di TURNOVER: il ribilancio vero smette di passare sotto $109 di sleeve ($730 di book), 27x piu' in basso
10 FLOW-SQUEEZE SCARTATO (2 motivi indipendenti) meta' dell'ipotesi non esiste nel dato (liquidation_*_risk = una sola categoria in 17.229/17.229 righe); l'altra meta' e' sotto la propria soglia di potenza dichiarata prima (MDE 1,056% vs effetto 0,402%) ed e' comunque morta alla nascita (la colonna non e' ricostruibile)
11 VRP-QUOTE-VERE SCARTATO + 1 difetto di RACCOLTA in produzione il campione contiene l'astensione della strategia (0/19 settimane passano IV-rank>0.30) e il titolo non sopravvive all'ora d'ingresso; ma soprattutto: collect_chain.py raccoglie la famiglia di contratti che il conto NON puo' marginare
7 TERM-STRUCTURE SCARTATO + 1 LEAD stretto (decisione 2027-02-01) la pendenza e' un termometro contemporaneo (picco CCF a lag 1h/0h); il carry non paga il bid-ask (18,6 giorni di roll-down per pagare UN round-trip); come gate e' la 5ª occorrenza della ridondanza col trend
6 OI-PIN SCARTATO il max-pain batte uno strike casuale ma non batte mai (0/24) la media a 7 giorni dello spot, un livello che non usa NESSUN dato di opzioni: non e' pinning, e' reversione verso il centro recente con l'OI come stimatore rumoroso di quel centro
8 VOL-SIZE LEAD (gate 2026-12-22) + 1 falsificazione dare a SKH01 una size per-trade regge a 23/23 ancore, 8/8 anni, null di permutazione e trasferimento su V1 — ma vale +0,07 di Sharpe di libro, un terzo della fortuna d'ancora del libro stesso (+0,196). Il vol-target di libro e' invece falsificato: compra peso SKH gia' respinto e peggiora l'eseguibilita'

Note che sopravvivono ai singoli filoni

9 — ADAPTIVE-HORIZON (r0822_adaptive_horizon.py, 112 trial dichiarati)

  • Sanity: il baseline dell'agente riproduce TP01 canonico a max|diff| = 0.0 (n=2719).
  • Il controllo giusto NON era TP01 ma il miglior lookback COSTANTE: senza quel controllo il null confonde "adattare paga" con "un orizzonte piu' corto paga su questo campione". L'agente se l'e' costruito da solo dopo aver visto l'argmax incollato al bordo, e ha dichiarato i trial in piu'.
  • ⚠️ Segnalazione, NON proposta: 30/90/180 e' rango 18/24 in-sample nella propria famiglia di orizzonti (10/24 sull'hold-out), ma la superficie di L e' un crinale di rumore — il salto di Sharpe fra L ADIACENTI e' +0.18, cioe' il 47-67% dell'intero vantaggio del vincitore su TP01, ed estendere la griglia ha spostato l'argmax da L=20 a L=15. "Piu' corto e' meglio" e' un max-of-k su una superficie frastagliata. Nessun cambio a TP01.
  • Riaprirebbe il filone: un rilevatore il cui L si muove DAVVERO che batta il miglior L costante (non TP01) in >=6/8 anni appaiati con corr→TP01 < 0.6 — es. BOCPD/PELT vero, non provato.

4 — DEALER-GAMMA (r0822_dealer_gamma.py, 136 statistiche dichiarate)

⚠️ DIFETTO DI DATO, il risultato piu' riusabile del filone: dealer_net_gamma e' il GEX col SEGNO INVERTITO — corr -0.95 BTC / -0.89 ETH contro la ricostruzione da manuale sulla catena (962/1116 snapshot, ~280-316 strike), fit dng ~ -0.7*GEX. Chi lo usasse col nome che porta leggerebbe ogni regime al contrario. Spiega anche la contraddizione interna del file (corr fra dng>0 e spot>flip = -0.28 / -0.92). ⚠️ Il file dichiara piu' di quel che ha: cadenza 15 min solo dal 2026-05-01; i 37 giorni prima sono un punto al giorno -> 90 giorni, non 4 mesi. liquidation_long_risk e liquidation_short_risk sono COSTANTI ('low' in 17.229 righe su 17.229 non nulle) = zero informazione. gamma_flip_level congelato nel 61% dei passi su BTC.

  • Gate: null de-levering FALLITO (baseline x0.6 stesso maxDD con Sharpe migliore); DSR 0.440 su 64 trial, e nel modo piu' netto — la cella migliore (+4.98 lordo) sta sotto il massimo atteso dal puro rumore (+5.12). marginal_vs_tp01 inutilizzabile: su 90 giorni full e hold-out COINCIDONO (n_hold_days == n_days == 90).
  • Null location-matched (aggiunto dall'agente): gamma_flip_level bocciato — 96% di accordo con spot > SMA(720h) su ETH; su BTC la SMA nuda da' uno spread MAGGIORE.
  • Ampiezza effettiva: 73/59 episodi di regime ma 6-8 coprono il 78-86% del tempo -> n_eff 53 (BTC) / 24 (ETH) ore su 2.130. Il regime coincide col MESE (maggio long, giugno short, luglio long).
  • Ricostruibile oggi dalla NOSTRA catena, meglio dell'originale (518 ore dal 01/08, ~209-262 strike/ora, quote_status ok ~100%, segno giusto) — ma la soglia non e' portabile (dng=0 corrisponde a GEX=+5.8e6 su BTC): ricalibrarla sui 90 giorni sarebbe la selezione che il progetto rifiuta. Riapertura non prima di ~30-40 episodi di regime = ~2 anni (meta' 2028).

2 — GROWTH-POLICY (r0822_growth_policy.py, 241 celle dichiarate)

Controllo di replica superato: il motore riproduce r0807_piano_netto §2 al numero pubblicato (EUR250/m -> 19,8a / P 52%; EUR500/m -> 14,7a / P 99%) con path diversi. 📌 Il risultato strutturale: ogni gate del progetto e' INVARIANTE ALLA SCALA. Lo Sharpe misura 1,31 a OGNI cella del knob di leva -> deflated_sharpe e marginal_vs_tp01 non falliscono, non vedono la variabile. E' per questo che la leva e' l'unica leva del libro mai esaminata in 2 mesi.

  • Serie de-luckata x0,89: drift 17,11%/a, vol 11,37%, Sharpe 1,51, peggior giorno -3,95%. Netto fee E netto fisco d'accumulo (33% + carry 4a + patrimoniale 0,2%).
  • k* empirico ~10-14x (banda 10x a 1500 path / 14x a 2500: la POSIZIONE non e' risolta), Kelly gaussiano 13,2x. Libro a k=1 -> g 17,0%/a, maxDD mediano 18,1%, P(DD>30%) 1,4%.
  • Fragilita' che decide il verdetto: k* e' lineare nell'errore del drift (stimato su 7,4 anni) — -1 SE -> 10x, -2 SE -> 7x, drift dimezzato -> 7x, drift zero -> 0,5x. E allo stress di coda un giorno -10% all'anno porta k* a 2x, -15%/anno a 1x.
  • ⚠️ Controllo di plausibilita' FALLITO dall'agente sul proprio output (e riportato): capitale mediano $4,4e12 da $600 a k=14x -> il modello assume ritorno indipendente dalla size. A k>2 i numeri sono aritmetica, non previsioni.
  • Gate pre-registrato (condizione, non data): nessuna proposta di k>1 prima di rifare la curva con la lente WICK ACCOPPIATA (r0725_prop_coupled) — a leva il breach si valuta sul MINIMO, e la lente close-only usata qui e' quella misurata cieca il 25/07 (raddoppia i breach da daily-loss).
  • 📌 Sottoprodotto da verificare (tocca un'etichetta del libro live): a target_vol=20% la vol realizzata di TP01 e' 12,14% — il target vale sulla posizione quando c'e', e TP01 e' long-flat. L'etichetta sovrastima il rischio preso di ~40%.

12 — ORTHO-SCREEN (r0822_ortho_screen.py, 174 trial: 7 famiglie x 24 + 6 controlli)

📌 Il risultato piu' riusabile dell'ondata, ed e' metodologico: il deflated-Sharpe va calcolato di screen (168 trial) e non solo di famiglia (24). Su quel pool il massimo atteso dal puro rumore e' Sharpe 1.572, cioe' sopra il soffitto direzionale misurato del progetto (~1.3). Conseguenza: una ricerca a rete larga su un singolo stream direzionale BTC/ETH non puo' passare il proprio gate — non e' sfortuna, e' aritmetica. Le ondate future o dichiarano famiglie molto piu' piccole in anticipo, o cambiano meccanismo (non-direzionale / cross-sectional). 📌 Per la prima volta nel progetto l'eseguibilita' a $600 non e' il vincolo binding di niente (haircut 0.00-0.01 su 7/7): muore tutto molto prima, sull'edge.

  • Famiglie: RSKEW (skew realizzata), TACC (accelerazione del trend), VPX (volume-prezzo), XDISP (dispersione dei 51 alt come timer), XCORR (corr BTC-ETH), XTAIL (dopo shock 3σ), VRAT (variance-ratio). Miglior DSR di famiglia 0.633, di screen 0.034. robust_oos False 7/7.
  • TACC e' l'unica ADDS (corr→TP01 0.09) ma il suo uplift hold-out vive tutto nel 2026 (2025 da solo 0.314) = finestra fortunata. E la domanda della famiglia ha risposta: e' il LIVELLO, non l'accelerazione — la cella scelta si riduce al ritorno a 5 giorni, corr +0.784 col momentum di livello.
  • Tre falsificazioni che chiudono spazio: (1) la mean-reversion non torna in vita sotto due conditioner mai provati (volume, shock 3σ): la selezione in-sample sceglie il ramo di CONTINUAZIONE in entrambi i casi; (2) la dispersione dei 51 alt come timer di mercato e' negativa (0.899 sulla sola finestra attiva, non e' un artefatto di calendario); (3) RSKEW e' il ritratto del fitting — miglior in-sample dello screen (1.281) e peggior hold-out (0.494), col segno OPPOSTO all'a-priori teorico dichiarato.
  • ⚠️ 6ª occorrenza del null del de-levering (VRAT, maxDD 4.4% -> k*TP01 fa meglio).
  • ⚠️ Due candidati hanno l'ancora canonica come PEGGIORE delle 8 (TACC, VRAT): la fortuna d'ancora non ha un verso fisso, e guardare solo il canonico a volte inventa un danno.

3 — XS-LITE (r0822_xs_lite.py, 26 celle + 120 valutazioni d'ancora)

Repliche bit-exact prima di ogni delta: XS01 vs sleeves._xsec_returns e XSR01 vs basket_from_positions(demean=True), entrambe max|diff| = 0.0. 📌 Falsificazione di un numero pubblicato: il muro "XS01 serve ~$20k" non e' un fatto di Sharpe ma di turnover — e a capitale piccolo il min-order salta la deriva del vol-target (|Δw| giornaliero 0.001) che non porta segnale, non il ribilancio (|Δw| 0.091-0.157). Capitale minimo perche' il ribilancio passi: $109 (k=5) / $86 (k=3) / $64 (k=2) di sleeve. Stessa lezione gia' imparata su TP01 nel 2026 ("a $600 il min-order e' gia' la banda ottimale") e mai applicata a XS01. ⚠️ L'agente ha usato min-order $10 (Hyperliquid), non $5 (Deribit) — un audit dedicato sta verificando i minimi veri del venue.

  • Concentrare non ripara il rischio #1 di XSR01: XS-LITE regge oltre 50 bps/gamba, XSR-LITE muore a ~28 bps a ogni k, pieno incluso.
  • La radice dell'ampiezza non descrive XS01: da 10 a 4 gambe si perde il 2% di Sharpe mediano-di-fase mentre N_hhi passa 6.9 -> 3.0 (il segnale sta negli estremi del ranking; le gambe 3-5 per lato aggiungono rischio quanto segnale). Il collasso arriva solo a k=1 (41%).
  • ⚠️ Da inseguire — tocca un gate pre-registrato: lo Sharpe 1.82 di XSR01 NON si riproduce oggi. Sulla finestra identica a quella di scoperta la lente "paniere" da' 1.75 e la lente "libro" di paper_xsr da' 2.23; 1.82 non e' nessuna delle due. Spiegazione piu' probabile: data/raw e' gitignored e il cron riscrive i parquet HL ogni notte -> stesso codice, dati diversi (identico allo scoperto del 07/08 su GTAA/TLT). La decisione del 23/10 poggia su quel numero.

10 — FLOW-SQUEEZE (r0822_flow_squeeze.py, 118 trial dichiarati, griglia RIDOTTA per budget)

📌 Sottoprodotto con potenza vera, e chiude un filone: il funding non predice ne' direzione ne' volatilita' — misurato su 53.430 ore / 3 anni di funding Hyperliquid (li' la potenza c'e'): eccesso |<=0,35%| a 24h con segno instabile fra anni, |ritorno| futuro piatto e non monotono. Il filone funding, gia' chiuso su 3 lati come livello di carry, si puo' dichiarare chiuso anche come proxy di AFFOLLAMENTO. Quarto lato.

  • Il "segnale" migliore (Sharpe 3,25 su 90 giorni) e' il massimo di 18 celle: DSR 0,103 (0,004 su 118 trial), implausible_sharpe=True, e su 114 giorni il massimo atteso per caso e' Sharpe 5,40 -> il candidato sta sotto il proprio null. Il 71% del P&L e' in giugno, il 60% in 3 giorni su 114.
  • Il null "statica travestita" e' superato (sempre-short = 0,67), ma quello di timing casuale location-matched e' al 99,7° pctl che pero' e' il massimo di 18 -> P(per caso) = 0,06: non superato dopo il conto dei trial. Esempio pulito di come si legge un percentile alto.
  • ⚠️ Ricostruibilita' MISURATA, non assunta: l'OI della catena (opzioni) contro la colonna dello snapshot (perpetual) da' Pearson +0,03 BTC / +0,21 ETH — non e' la stessa grandezza.
  • 💡 Azione possibile, costo quasi nullo (NON eseguita, tocca il cron di produzione): accendere un collettore orario dell'OI dei perpetual Deribit (una GET/ora, API pubblica). Non ripara questo filone, ma da quel giorno la storia comincia; oggi ripartirebbe da zero. Il criterio di falsificazione e' gia' scritto dall'agente: >=12 mesi, eccesso oltre la MDE (~0,3%) e presente in

    =3 trimestri su 4.

  • ⚠️ Distinzione metodologica utile (nata contraddicendo il suggerimento del coordinatore): qui il vincolo binding NON e' la concentrazione degli episodi (86-87 episodi corti, i primi 8 coprono solo il 20-25% delle ore) ma la lunghezza del calendario (90 giorni). Ampiezza scarsa e calendario corto sono due diagnosi diverse e si curano in modi diversi: piu' episodi vs piu' tempo.

11 — VRP-QUOTE-VERE (r0822_vrp_real_quotes.py, 60 trial + 9 ancore d'ingresso)

🚨 IL RISULTATO DI PRODUZIONE — collect_chain.py interroga {"currency": "BTC"|"ETH"}, che su Deribit restituisce le sole opzioni INVERSE (regolate in BTC/ETH). Il conto e' in USDC (esegue BTC_USDC-PERPETUAL). Esiste una famiglia USDC-lineare con lotto minimo 10x piu' piccolo:

famiglia min lotto ~$ per lotto
BTC inverse 0.1 ~$7.700
BTC_USDC 0.01 ~$780
ETH inverse 1.0 ~$2.500
ETH_USDC 0.1 ~$250
Quindi il muro pubblicato "BTC opzioni min 0.1 = $6.210/lotto -> FUORI a $3.000" (congelato in
tests/test_vrp_profit_take.py) e' misurato sulla famiglia che il conto non puo' marginare.
**3ª occorrenza dello schema fee_watch (21/08): un controllo/collettore puntato su uno strumento
diverso da quello che si trada.**
⚠️ MA la verifica indipendente del coordinatore cambia la conclusione, e in meglio: contando
l'open interest famiglia per famiglia (get_book_summary_by_currency, misura mia, non dell'agente)
famiglia strumenti con OI>=100
--- --- ---
BTC inverse 1038 415
ETH inverse 932 548
BTC_USDC 686 5
ETH_USDC 660 119
-> BTC_USDC e' praticamente morto (5 strumenti liquidi su 686). **Il muro sul BTC RESTA, ma per
la ragione giusta e meglio misurata: non la taglia del lotto, la LIQUIDITA'.** ETH_USDC (119
strumenti, ~$250/lotto) e' l'unica gamba che varrebbe la pena raccogliere.
📌 Sottoprodotto fuori perimetro: esiste un universo opzioni USDC piu' liquido di BTC_USDC —
SOL_USDC 341, XRP_USDC 250, HYPE_USDC 172, AVAX_USDC 146 strumenti con OI>=100.
  • Il campione misura la strategia mentre STA FERMA: 0/19 settimane passano il gate IV-rank>0.30, DVOL alla mediana del 7°/11° percentile storico, sottostante +25%/+44%.
  • Replica indipendente del f del 30/07 su campione piu' lungo: f = 0,714 pooled (IC95 [0,690, 0,779], 0/19 osservazioni >= 1,0). Attraversare lo spread costa ~10% del credito.
  • ⚠️ Correzione a un numero pubblicato: il forfait fee del sleeve sovrastima il listino vero di 1,44x (BTC) / 1,80x (ETH), non di "~2x". Il segno (conservativo) regge, la taglia no.
  • ⚠️ Rischio sul MINIMO, non sulle chiusure: peggior mark infra-settimana mediana 6,4% del rischio, minimo 91,0%; fra le settimane chiuse in utile, minimo 56,9%.
  • Gate: implausible_sharpe FLAGGED su entrambi (0 perdite su 10 -> regola del tre: tasso vero fino al 30%, su un payoff che perde 7,4x il credito); deflated_sharpe non calcolabile (T=10) e l'agente si e' rifiutato di fabbricare una griglia giornaliera al 94% di zeri per superare il T>=30; banda d'ancora: canonico all'89° pctl, mediana onesta 1,45, banda che include il negativo. Il titolo annualizzato (32,58) e' stato deliberatamente non riportato come risultato.
  • ⚠️ L'agente ha refutato in corsa una propria conclusione: spostare l'ora d'ingresso cambia QUALI STRIKE corrispondono al delta obiettivo -> non e' lo stesso trade un'ora dopo, e' un'altra struttura; la media BTC cambia segno fra le ancore (1,35% -> +11,22%).

7 — TERM-STRUCTURE (r0822_term_structure.py, 312 trial dichiarati)

🚨 MURO DEL DATO, e vale per ogni filone che usa la catena ereditata: prima del 2026-06-09 bite_archive raccoglieva UNA SOLA SCADENZA per giro (mediana 1, max 1) -> la curva non esiste. La finestra utilizzabile non e' "3,7 mesi": e' 74 giorni, SE(Sharpe) ~ 2,2. Ricostruzione certificata contro due riferimenti indipendenti: vs il logger vol_term_* corr 0,992-0,997 (scarto 0,00-0,30 pt-vol); vs DVOL corr 0,94 con bias 2,2/2,8 pt-vol = il segno atteso (DVOL integra lo smile).

  • Il test piu' informativo e' quello di RISOLUZIONE: l'unica correlazione col futuro che sembrava qualcosa (h=5g: +0,29/+0,32, 94°/98° pctl vs null a blocchi) cambia SEGNO togliendo l'ultima settimana (0,22/0,17). Sette giorni su 70. Nella regressione controllata per il ritorno passato il t di Newey-West sta sotto 1,0 a ogni orizzonte.
  • Il confronto che uccide il candidato: il buy&hold sulla stessa finestra. Mediana appaiata su 24 ancore vs B&H = +0,14 (14/24) su BTC e 0,65 (1/24) su ETH. La banda d'ancora gate_pass=True in isolamento e' inutile: il B&H passa lo stesso gate.
  • Confound proprio del filone, misurato: corr(pendenza, RV passata) 0,50/0,57 contro RV futura 0,39/0,38 -> la pendenza e' il premio di vol con la gamba realizzata sostituita da una implicita = la variabile di dvol_directional (gia' HEDGE, earns_slot=False su 5 anni).
  • deflated_sharpe NON girato, e la motivazione e' il risultato: su 74 osservazioni l'incertezza di CAMPIONE domina di un ordine di grandezza quella da SELEZIONE — deflazionare 312 trial darebbe un numero preciso e privo di senso.
  • 📌 LEAD stretto e pre-registrato (l'unico numero non banale: corr(pendenza, RV futura) 0,39): la term structure come previsore di VOL, non di ritorni. Decisione 2027-02-01, si riapre solo se (a) corr <= 0,30 su entrambi gli asset E (b) batte il DVOL a tenore singolo in R² incrementale E (c) supera il null del de-levering. Se (b) fallisce, il filone si chiude.
  • ⚠️ Tre bug propri catturati in sessione, tutti del tipo che passa i test pigri: il null del de-levering cercava il primo k salendo invece del piu' grande; la RV futura aveva uno shift di troppo; l'ATM vettorializzato e' stato verificato contro il prototipo (23.544/23.545 righe identiche).

6 — OI-PIN (r0822_oi_pin.py, 516 trial dichiarati, 73 scadenze/asset)

Potenza dichiarata PRIMA di guardare (e questa e' la ragione per cui il verdetto e' credibile): MDE a hte 12 = 0,46%/trade; effetto max-pain osservato +0,273% = SOTTO il proprio MDE. 📌 Il null che decide: il placebo senza opzioni. La cella migliore fa Sharpe 5,59 e batte gli strike casuali (6/72 contro ~2 attesi), ma 0/24 contro la media a 7 giorni dello spot, con cui condivide il 68-77% del segno. Non e' pinning verso uno strike: e' reversione verso il centro recente, e l'OI e' solo uno stimatore rumoroso di quel centro.

  • DSR 0,290 (288 trial): lo Sharpe-null atteso e' 6,79 > 5,59 osservato — su 75 giorni il massimo del rumore batte il risultato. implausible_sharpe scatta. I 5 giorni migliori valgono il 61% del log-equity.
  • ⚠️ marginal_vs_tp01 non puo' dare ADDS per costruzione su questa finestra: multicut vuole

    =2 tagli annuali da >=120g e has_insample_edge e' True per default perche' non esiste pre-2025. Un NEUTRAL qui non e' un giudizio.

  • Haircut a $600: +0,000 (si esegue sul perp) — 2ª conferma che l'eseguibilita' non e' piu' il vincolo binding di questa ondata.
  • ⚠️ REGOLA NUOVA (difetto proprio, trovato e corretto in sessione): un placebo si controlla per BILANCIAMENTO DEL SEGNO prima di usarlo. Il placebo jit concordava in segno con la propria regola solo nel 14% dei casi (5% per jit_gex): non era un null, era la strategia invertita, e usarlo fabbricava 3 celle "significative" e un contrasto spettacolare (8,6 di Sharpe). Un null pulito sta a ~0,50; sotto ~0,35 il suo delta va letto come ~2x il segnale.

8 — VOL-SIZE (r0822_vol_size.py, 28 trial + 23 ancore)

Sanity bit-exact: ricomposizione trade-by-trade max|diff| = 0.0 contro run_asset e contro sleeves._skyhook_returns(). 🚨 DIFETTO DI METODO GENERALE, trovato dall'agente nella propria prima stesura e MISURATO invece che cancellato: su uno sleeve a equity a GRADINO, un overlay giornaliero e' NON CAUSALE. Tutto il P&L di un trade SKH01 e' contabilizzato il giorno di CHIUSURA, fino a 3,83 giorni dopo l'ingresso; moltiplicare la serie giornaliera per L_t (che usa solo dati <= t1) passa qualunque controllo di causalita' scritto sulla serie giornaliera — il look-ahead sta nella CONTABILITA', non nella formula. Costo misurato: +0,04 di Sharpe hold-out fantasma. REGOLA: un overlay si applica alla data d'INGRESSO, non a quella in cui il P&L viene contabilizzato. 🚨 REGOLA 2 — il null del de-levering e' DEGENERE quando la variante e' una ri-scalatura (sh(k*base) === sh(base)): il test che serve non e' sul DD ma ISO-PESO sullo Sharpe, altrimenti si sta solo misurando di quanto e' cambiato il peso di uno sleeve. Qui era decisivo: quasi ogni variante alzava il peso effettivo di SKH fino a 0,375, e "alzare SKH01" e' gia' stato misurato e respinto il 26/07. 📌 Il meccanismo NON e' quello ipotizzato: scomponendo la vol trailing di uno sleeve all'88% di zeri nei due canali, il guadagno FULL viene dalla FREQUENZA (il solo filtro di attivita' fa +0,051 su +0,061) e non dalla magnitudine (+0,003). Non e' controllo del rischio: e' un filtro di frequenza, e va chiamato cosi'.

  • Baseline del libro, stima onesta (mediana banda): 1,626 FULL / 1,037 HOLD / DD 10,4% — la fortuna d'ancora del libro vale +0,196 FULL / +0,448 HOLD.
  • Cella congelata del LEAD (VTL tv20 w90): size fissata all'ingresso = clip(0,20 / rv90(t1), 0, 3). ISO dShFULL +0,070 (23/23 ancore), dShHOLD +0,101 (19/23), 8/8 anni positivi, null di permutazione p~0,027 (e la mediana del null e' 0,04: riassegnare a caso la stessa distribuzione di size danneggia).
  • ⚠️ 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.