CLAUDE.md era arrivato a 310 KB (~80k token caricati a OGNI sessione) e la sua funzione si era sdoppiata: era insieme il manuale operativo e l'archivio di 69 filoni di ricerca. Le due cose hanno lettori diversi. I 65 bullet-blocco sono stati spostati VERBATIM in docs/memory/ (nulla riscritto). Verifica meccanica riga per riga prima del commit: 3272 righe non vuote, 0 mancanti, 0 aggiunte, zero buchi e zero sovrapposizioni nella copertura delle regioni estratte. 10-sleeve-e-candidati.md 30 KB TP01 XS01 VRP01 SKH01 GTAA01 XSR01 20-ondate-e-scartati.md 126 KB 69 filoni, ogni scartato col suo perche' 30-piano-capitale-fisco.md 59 KB muri, versamenti, venue risk, fisco, prop 40-produzione-e-deploy.md 66 KB esecutore, tripwire, monitor, PRIIPs/UCITS 50-dati-e-feed.md 14 KB difetti del dato, catena opzioni 60-metodo-e-gate.md 4 KB i gate di altlib.py In CLAUDE.md resta solo cio' che serve a non sbagliare una decisione: stato, book live vs book di ricerca, i numeri da citare e quelli da NON citare, 7 decisioni vincolanti dell'operatore con "cosa le riapre", 6 gate pre-registrati con la data, 9 debiti aperti non riparati, le regole di prim'ordine (D/M/C/P/N, distillate dalle 113 righe che contenevano REGOLA), IL DATO, metodologia, stack/struttura/comandi. Tre fatti che erano sepolti in 3400 righe e ora stanno in testa: le TRE baseline diverse che girano sotto il nome "libro 75/25" (spread piu' grande di quasi tutti gli effetti misurati), il funding non modellato in nessun backtest (-2,16%/anno), e che «N/N ancore» vale ~2 osservazioni. Verificato prima del commit: 36/36 percorsi citati esistono su disco, 708 test collezionati, code fence bilanciati. Nessun file di codice toccato. Convenzione aggiunta (§14) perche' il file non torni a crescere: quando un risultato CAMBIA UNA DECISIONE si aggiorna CLAUDE.md; quando aggiunge racconto, va in docs/memory/. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.3 KiB
Metodo: gate e harness
Estratto verbatim da
CLAUDE.mdil 2026-08-25 durante la compattazione. I gate codificati inaltlib.pyche ogni candidato deve attraversare. Il testo non e' stato riscritto: e' la memoria originale, spostata.
-
MARGINAL SCORER (implementato 2026-06-20) — la lezione "Sharpe marginale, non assoluto" è ora codice in
scripts/research/alt/altlib.py:study_marginal(name, target_fn)valuta un candidato direzionale BTC/ETH sia in assoluto sia rispetto al baselinetp01_baseline_daily()(corr, uplift del blend OOS, beta+alpha residua) e ritornaearns_slot = (abs!=FAIL) AND (marginal==ADDS). Regola: una nuova strategia direzionale si giudica suearns_slot, non sullo Sharpe assoluto (gli overlay-su-TSMOM ereditano lo Sharpe di trend e prendono PASS fasulli — es. CMB04 PASS assoluto → NEUTRAL marginale). Demomarginal_demo.py, testtests/test_marginal_scorer.py. ⚠️ INDURITO 2026-06-21 (onda ortho): la versione fisso-HOLDOUT + jackknife-mese era ingannabile — 17/18 book relative-value "ADDS" su una sola finestra 2025 (ETH-bleed dove TP01 è debole). Tre gate nuovi inmarginal_vs_tp01: (1) persistenza multi-cut (uplift positivo a più date di taglio, non solo 2025); (2) edge in-sample (has_insample_edge: lo Sharpe standalone PRE-holdout dev'essere ≥0.5 — un low-corr a Sharpe ~0.3 "aggiunge" solo matematica di diversificazione, riportata vianull_pctl_*vs un asset-rumore a corr-zero); (3) hedge vs alpha (is_hedge: un low-corr che paga SOLO quando TP01 è debole —corr(Sharpe-TP01, uplift annuo)molto negativa — è un hedge, non alpha). Verdetti nuovi: HEDGE, NOISE. Sull'onda ortho lo scorer indurito collassa 17/18 → 1 (dvol_spread, unico con edge in-sample reale; comunque forward-monitor per multiple-testing/storia DVOL corta). Lezione: un nuovo sleeve si giudica su edge-in-sample + persistenza multi-cut + non-hedge, non sull'uplift di una finestra fortunata. -
HARNESS REALISM (codificato 2026-06-21, onda intraday) — due gate nuovi in
altlib.py, testtests/test_harness_realism.py:day_boundary_robust(target_fn, tf)— un effetto ora/sessione/giorno il cui uplift marginale si inverte spostando il confine del giorno UTC di poche ore è un artefatto di etichettatura calendario (ha uccisoopen_drive: +0.23 a 00:00 → −0.33 a +8h → ARTIFACT-RISK). Un segnale di prezzo è INVARIANT (spread 0); un effetto calendario vero è ROBUST (resta positivo; es.prevday_range_breakout). Regola: ogni segnale calendar/session/hour passa questo test prima di crederci.eval_weights_smallcap(df, target, capital=600, min_order=5)— a ~$600 un ribilanciamento di nozionale < min_order non si esegue; la fee proporzionale cheeval_weightsapplica a migliaia di micro-trade sub-dollaro (tipici di un overlay vol-target) è finzione. Salta i sub-min_order e riporta lo Sharpe haircut reale vs modellato. Vale per OGNI sleeve a questo capitale, TP01 incluso — lo Sharpe netto onesto a $600 è quello small-cap, non quello modellato.
-
SELECTION-ON-HOLDOUT gate (codificato 2026-06-29, filone B intraday ERM) — terzo gate in
altlib.py, testtests/test_harness_realism.py. Il lead ERM facevaearns_slot=TrueMA lo script di scoperta sceglieva la cella permin_holdmassimo su 60+ celle = selezione-sull'hold-out: scegliendola in-sample-only ne esce un'altra (trend-beta corr→TP01 0.53, NEUTRAL) e il deflated-Sharpe crolla (DSR 0.0-0.24 su 122 trial).study_marginalda solo non lo vede (giudica UNO stream, non come è scelto). Tre funzioni:deflated_sharpe()(Bailey & Lopez de Prado, PASS ≥0.95),select_cell_insample()(cella scelta col solo Sharpe pre-HOLDOUT), e il gate combinatostudy_family_honest(name, factory, grid, tfs)→earns_slot_honest = earns_slot[cella in-sample] AND deflated-Sharpe≥0.95. Regola: una strategia direzionale grid-searched si giudica constudy_family_honest, non chiamandostudy_marginalsulla cella a max hold-out. Chiude il punto cieco gemello di CC01 ("Sharpe implausibile"). Diario2026-06-29-intraday-regime.md(analisiscripts/research/intraday_regime_analysis.py).