Files
PythagorasGoal/CLAUDE.md
T
Adriano Dal Pastro 822aa1307e research(crt): video-claim "CRT top-down 74% win rate" SCARTATO — il 74% e' un knob, non un edge
Meccanizzato e falsificato il claim ICT/SMC top-down (H1 setup CRT -> M15/M5
conferma -> entry, uscita parziale+BE+runner) su BTC/ETH certificati.

- Setup H1 CRT gia' triplo-refutato (onda 2026-07-02); qui testato l'angolo nuovo:
  la gestione d'uscita e il "74% WR".
- WR reale 30-37% a RR 1.5-2, SOTTO il null gambler's-ruin 40% -> il ritest tocca
  il target meno di una moneta (conferma "il ritest e' informazione negativa").
- Il 74% si fabbrica avvicinando il target: sweep rr1 0.5->2.0 = WR sale, expectancy
  R INVARIANTE e negativa (-1.2..-3.3R netto). DSR 0.000; a fee 0 ancora negativa
  -> non morte-per-fee, l'edge lordo non c'e'.
- Non eseguibile pulito a $600 (3-4 ordini/trade, alcuni sub-min-order).
- Regola candidata: convertire ogni claim "WR X%" da schema parziale+BE in
  expectancy R netto fee (WR ~= 1/(1+rr1), non un merito).

Nessuna modifica a src/config/live/tests. Book e pesi INVARIATI.
Diario: docs/diary/2026-07-07-crt-topdown-74winrate.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 06:02:38 +00:00

45 KiB
Raw Blame History

PythagorasGoal — Istruzioni per agenti

Stato del progetto — v2.0.0 RESET (2026-06-19)

LEGGERE PRIMA DI TUTTO. Il progetto è stato resettato dopo aver scoperto che l'intera libreria di strategie "validata OOS" (FADE, PAIRS, DIP01, TR01, ROT02, TSM01, XS01, SH01) era artefatto di uno storico contaminato — print fantasma del feed Cerbero testnet + storico Binance/USDT. Ri-testate sul feed reale, tutte perdono ogni anno (vedi docs/diary/2026-06-19-deribit-history.md, il documento di fondazione).

Cosa è cambiato:

  • Lo storico è stato ricostruito da Deribit mainnet e certificato. Universo affidabile = solo BTC/ETH (tutti i TF). Gli alt sono esclusi (illiquidi/divergenti/non certificabili).
  • Tutto il codice vecchio (strategie, stack live, ~100 script di ricerca/gate, dati non certificati, 60+ diari) è archiviato in Old/ (preservato in git, non cancellato).
  • L'esecuzione è DISABILITATA, il conto mainnet è flat. Non c'è trading live attivo. AGGIORNATO 2026-06-20: l'esecuzione di TP01 è ARMATA e LIVE su Deribit mainnetconfig/live.json execution_enabled=true + cron giornaliero live_execute.py --execute (cablato in scripts/cron_daily.sh). Guardrail: cap $300 notional/asset, min order $5, disaster-SL on-book 30%, alert Telegram su esecuzione/errori. Capitale reale ≈ $600 (NON i €2000 nominali del paper trader). Stato corrente: flat (target TSMOM risk-off → BTC/ETH 0.0x, nessun ordine). Solo TP01 è eseguito; XS01/VRP01 restano paper/STAT-MODE.
  • Si riparte dalla ricerca di strategie NUOVE, su dati certi, con la metodologia qui sotto.

Ricerca post-reset (2026-06-19) — esito

Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condiviso src/backtest/harness.py). Sintesi in docs/diary/2026-06-19-research-synthesis.md.

  • TP01 Trend Portfolio — strategia DIFENSIVA robusta (non alpha)src/strategies/trend_portfolio.py. TSMOM multi-orizzonte (1-3-6 mesi) vol-targeted, long-flat, 50/50 BTC+ETH. Config canonica PORT LF1d (>=12h, 1d raccomandato, vol-target 20%, leva cap 2x): FULL Sharpe ~1.30, maxDD ~14%; HOLD-OUT 2025-26 Sharpe ~0.31 / +3.5% mentre il buy&hold 50/50 faceva 39%/DD60%. Verificata indipendentemente col gauntlet onesto (hold-out + cross-asset + plateau + deflated-Sharpe 0.999): regge. Valore = taglio del drawdown ~6× vs buy&hold, NON generazione di ritorno (CAGR ~16% vs ~48% del buy&hold sul toro). ⚠️ LOOK-AHEAD (2026-06-19): un ffill MIXED-TIMEFRAME su barre open-labeled gonfiava il 4h (~1.60 → reale ~1.1). Il calcolo per-singolo-TF è leak-free, ma NON scendere sotto le 12h: costi+overfitting dominano senza vantaggio (FULL Sh piatto ~1.3 da 12h a 4h; hold-out migliore a 1d). Deploy/paper a 1d. Diari 2026-06-19-tp01-verification.md / -tp01-lookahead-fix-lf.md. Paper trader: scripts/live/paper_trend.py (1d). Test: tests/test_trend_portfolio.py. Ri-verifica: scripts/analysis/{verify_tp01,stress_tp01,tp01_lowfreq}.py. ⚠️ ANCHOR TIMING-LUCK (2026-07-02, confermato da scettico): l'hold-out 0.31 è calcolato sull'ancora daily 00:00 UTC, che è la migliore delle 24 possibili (mediana ancore 0.04, banda [0.13,+0.30]; P0.86 che una qualsiasi ancora mostri uno spike così per puro caso) → l'hold-out 2025-26 NON risolve l'edge di ritorno di TP01; ciò che regge a OGNI ancora è il taglio del DD (7-10% vs ~60% B&H). FULL/plateau/deflated-Sharpe/gate INVARIATI (h=0 al 31° pctl su FULL). Regola: i futuri numeri hold-out di strategie a ribilanciamento ancorato si citano con la banda d'ancora. Diario 2026-07-02-timing-crt-wave.md; script scripts/research/r0702_tp01_offset.py
    • r0702_skeptic_offset.py.
  • XS01 Cross-Sectional Momentum (Hyperliquid) — DIVERSIFICATORE che migliora il portafogliosrc/portfolio/sleeves.py:_xsec_returns. Market-neutral su 19 alt liquidi major Hyperliquid (1d, dal 2024): ogni 10g long i 5 più forti / short i 5 più deboli, vol-target 20%. Scorrelato a TP01 (~0.12). Affinato (2026-06-19): (a) blend di lookback [30,90] (z-score cross-sectional mediato, come il multi-orizzonte di TP01); (b) gate di dispersione p30 (entra solo se la dispersione cross-section del momentum supera il percentile espandente causale, altrimenti flat — XS è rumore in regime compatto). Standalone FULL Sh 1.50 / HOLD 1.71 / DD 11%, plateau robusto (lookback, gate p15-35). Caveat: storia ~2.5 anni; STAT-MODE (book a 19 gambe non eseguibile a 2k, serve ~20k) → monitor forward. NB il gate concentra XS nei regimi dispersi (2025-26 = hold-out alta-dispersione). ⚠️ PHASE TIMING-LUCK (2026-07-02): i numeri headline sono sulla fase 0 del ciclo H=10, che è al 15° pctl di DD (10.8% vs ~15.5% fase tipica, 29% peggiore) e 85° di FULL fra le 10 fasi (HOLD solo 65°, non estremo); P(spike per caso)≈0.91-0.94. Lens onesta = ensemble di fase: FULL 1.25 / HOLD 1.31 / DD 10.9%; a fase mediana FULL 1.08/HOLD 1.10/DD 21%. La decisione di ammissione @15% regge (0 fasi negative, 8/10 FULL≥1.0), i numeri 1.50/1.71/11% no → citarli con banda di fase. Ora-del-giorno NON testabile (solo 1d HL). Script scripts/research/r0702_anchor_xs01.py; diario 2026-07-02-anchor-audit-xs01-skh01.md. Ricerca scripts/portfolio/{xsec_research,xsec_blend,xsec_dispgate}.py. Diari 2026-06-19-hyperliquid-xsec / -xsec-blend / -xsec-dispgate / -xsec-universe-expansion / -trend-multiasset.
  • PORTAFOGLIO ATTIVO = TP01 (33%) + XS01 (15%) + VRP01 (12%) + SKH01 (20%) + GTAA01 (20%) (src/portfolio/sleeves.active_sleeves): TP01+XS01 combinato FULL Sharpe 1.55, HOLD-OUT 1.55, DD 4.4%. Aggiunto VRP01 (options short-vol, sotto): TP01+VRP01 da solo fa FULL Sh 1.30→1.44 / HOLD 0.31→0.40 a peso 20%. Aggiunto SKH01-V2-DD @25% effettivo (2026-06-23, sotto): 4-sleeve FULL Sharpe 1.68→2.13, HOLD-OUT 1.63→2.30, DD full 14.3%→7.8% (Skyhook quasi-ortogonale, corr ~0.09). Aggiunto GTAA01 @20% effettivo (2026-07-01, i 4 preesistenti scalati ×0.80): trend difensivo equity 6-ETF su IB (src/portfolio/gtaa.py, ~30 anni storia, validato 2026-06-22 su OOS equity 2015+ INDIPENDENTE dall'hold-out crypto, corr al book ~+0.10) → 5-sleeve FULL Sharpe 2.12→2.24, HOLD-OUT 2.21→2.46, DD full 7.8%→6.2% (costo dichiarato: CAGR full 23.3→18.8%; 2022 unico anno con dSh). Uplift positivo in-sample E su tutte le finestre disgiunte (vs EW-STR refutato lo stesso giorno). Convenzioni: weekend/festivi equity = 0.0 (capitale IB fermo, non riciclato); attivazione nel book all'era crypto 2019-03; il book live Deribit (deribit_book_sleeves TP01+SKH01 75/25) NON lo include (GTAA in paper_combo dal 2026-06-23). Test tests/test_gtaa_sleeve.py; diario 2026-07-01-strategy-wave-6threads.md (addendum GTAA). Report scripts/portfolio/run_portfolio.py. Sleeve a date d'inizio diverse → outer-join con pesi rinormalizzati (TP01/SKH01/GTAA dal 2019*, VRP dal 2021, XS dal 2024; *GTAA troncato all'era book). ⚠️ ANCHOR-LUCK del book (2026-07-02): l'HOLD 2.46 è calcolato con TUTTI gli sleeve ancorati alla loro ancora canonica, che per TP01/XS01/SKH01 è al top della rispettiva banda (eredità di fortuna ~+0.10/+0.17/+0.5 HOLD). Stima de-luckata onesta: HOLD ~1.9-2.1, FULL ~2.0-2.2, DD ~6% invariato — il book resta positivo e diversificato a ogni ancora testata, ma 2.46 è un massimo di configurazioni d'ancora, non la stima centrale. Diario 2026-07-02-anchor-audit-xs01-skh01.md.
  • SKH01-V2-DD "Skyhook" — DIVERSIFICATORE quasi-ortogonale (research)src/strategies/skyhook.SKH01_V2_DD, sleeve src/portfolio/sleeves._skyhook_returns. Sistema dual-TF (segnale 690m / exec 230m) regime (BuzVola/BuzVolume tipo-Chande) AND pattern (Donchian breakout), NON trend-follower, L/S. Vincitrice di 2 onde multi-agente (la 2ª = DD-reduction): exit a percentuale fissa ASIMMETRICA (long sl4%/tp10%, short sl2%/tp8% più stretto) → standalone maxDD BTC 21% / ETH 27% (<30%), minFull +0.99, minHold +1.26, causale (0/400), fee-surviving 0.40%RT. Marginal vs TP01 ADDS (corr 0.09, has_insample_edge, robust_oos multicut 7/7, is_hedge=False); blend 0.75·TP01+0.25·SKH hold-out 0.31→1.17. Verificato leak-free + 2 scettici. CAVEAT: equity daily-step (Sharpe lens), ETH DD margine sottile, book 230m (costi ribilanciamento da verificare a deploy) → research win, forward-monitor. Diario 2026-06-23-skyhook.md. ⚠️ GRID TIMING-LUCK (2026-07-02, più forte di TP01): i numeri headline sono sull'offset 0 della griglia 230m/690m, al 93-98° pctl dei 23 offset a priori — minHold +1.26, blend 1.17 e book HOLD 2.44 sono il MASSIMO dei 23 (mediane: minHold +0.39, blend 0.72, book 1.96); spike, non plateau (±30m crolla); P(spike)≈0.70. Il gate DD<30% (criterio di selezione di V2-DD) fallisce in 15/23 offset (mediana ETH 29.2%). Regge de-luckato: uplift blend positivo a TUTTE le 23 fasi (min +0.18, med +0.42) + corr 0.05-0.11 → ADDS sopravvive ridimensionato. LIVE (SKH=25% del book Deribit): path reale cron orario + exit software → book 50/50 FULL 1.46→1.19 / HOLD 1.64→1.15 / DD 18→25%; nei crash gap-through-stop reale (sl2% modellato → 11/23% realizzato). Pesi/book INVARIATI (ogni cambio passa weights_tilt_null); follow-up: cadenza 230m, peso live da rivedere. Script scripts/research/r0702_anchor_skh01.py; diario 2026-07-02-anchor-audit-xs01-skh01.md.
  • VRP01 Options Short-Vol — DIVERSIFICATORE da FinanceOld/OptionsAgentsrc/portfolio/sleeves._vrp_combo_returns. Put credit spread settimanale (vendi put -0.28, compra put -0.10) gated su IV-rank. Idee portate da ../FinanceOld/OptionsAgent (Bear Call Spread + gate d'ingresso). Migliora il lead VRP nudo (options_vrp_lab): (a) defined-risk taglia la coda (worst-week -16.6%→-7.4%, DD 33%→14%); (b) gate IV-rank>0.30 = vendi vol solo ricca → ribalta HOLD-OUT da -0.25 a +0.28 (l'alpha è il filtro di regime). Standalone FULL Sh 1.10, HOLD 0.60, DD 12%, positivo/piatto ogni anno (2022 crash incluso). Scorrelato a TP01 (+0.01-0.07). CAVEAT: premio MODELLATO su DVOL ATM (skew non esplicito), book a 1d, f di stress reale non catturato → LEAD robusto, non deploy pieno. Ricerca scripts/research/options_vrp_v2.py (vs baseline options_vrp_lab.py). Test tests/test_vrp_sleeve.py. ⚠️ ANCHOR-AUDIT CHIUSO + ondata "migliora e proteggi" (2026-07-03, 7 filoni + 2 lenti + scettico): VRP01 NON è migliorabile e la protezione DD si compra SOLO con la size. (a) Anchor-luck (ciclo settimanale, 7 fasi): PRIMO sleeve SENZA firma di luck — la fase canonica è la PEGGIORE delle 7 su FULL (1.09 = 7° pctl) e su DD (11.8% = 93° pctl), mediana su HOLD (0.59); spike bootstrap NEGATIVO → i numeri di ammissione FULL 1.10/HOLD 0.60/DD 12% sono CONSERVATIVI, non gonfiati. Da ora si citano con banda: ShFULL [1.09,1.83], ShHOLD [0.03,1.11], DD [5.7,11.8%]; edge OOS f-dipendente (f=0.8 → HOLD0). Con questo l'audit anchor è completo su 4/4 sleeve ancorati. (b) Griglia 288 strutture: nessuna batte VRP01 (DSR 0.000; metà griglia = 3ª occorrenza "0-perdite/Sharpe implausibile" dopo CC01/ALB-A → gate implausible_sharpe alzato di priorità). (c) 4 overlay DD (exit-spike/SL-MTM/ ala-coda/cooldown): 4/4 REFUTED dal null de-levering — la protezione crash vive già nel gate d'ingresso IV-rank. (d) Gate nuovi: 4° fallimento su 4 (l'alpha è il binario IV-rank>0.30). (e) Sizing: 12% deploy ≈ 0.27 Kelly onesto (anti-rovina); ⚠️ NON confondere col 12% di PESO del book (~0.014 Kelly, fattore 19x). (f) Gate term-structure VIX/VXV su SPX (ΔSh +0.90, DSR 0.992) = confound di modello al 100% (la var del gate coincide con l'errore BS-flat vs term-structure) → nuova regola: riprezzare term-structure-consistent prima di credere a un gate vol su strutture BS-flat. Book/pesi INVARIATI. Diario 2026-07-03-vrp-improve-dd.md; script scripts/research/r0703_vrpimp_*.py (7 file). Diario 2026-06-20-financeold-analysis-vrp-v2.md.
  • Universo Hyperliquid: ESPANDERLO NON aiuta XS01 (provato): 52-asset / top-liquidità dinamico / trend-multi-asset → tutti peggiori (small-cap/memecoin diluiscono il momentum relativo; il trend multi-asset è ridondante con TP01, corr 0.74). I margini su XS sono nella STRUTTURA DEL SEGNALE (blend + gate), non nel numero di asset. I 51 parquet certificati restano per ricerca futura. ⚠️ Il test "52-asset = negativo" era in parte inquinato dal backfill sintetico (AXS 83%, ALGO/SAND 37% di barre vol=0) poi rimosso — vedi correzione estrazione 2026-06-20 sotto; resta comunque vero che il long-tail diluisce XS01, ma il numero netto post-fix è 51.
  • Lead OPZIONI VRP (income short-vol) — quantificato, NON deployscripts/research/options_vrp_*.py. Vendita put settimanali che incassa il volatility risk premium (IV>RV), scorrelato al trend (~0.07). Premio prezzato BS su DVOL reale (fetch_dvol.py) + calibrato su quote REALI cerbero-bite mainnet (options_vrp_calibrate.py): f reale ≈ 1.0 (non 1.29) → Sharpe ~0.71, DD 33%, coda severa (settimane 15..26% su LUNA/FTX). Diversificatore DEBOLE a premio reale, e short-vol da modello. Regola: niente short-vol da modello in deploy. Rivalutare quando cerbero-bite cattura un crash (per il f di stress reale). Diari 2026-06-19-options-vrp-lab / -eval-crypto-backtest-options.
  • Edge deboli/scartati: ML walk-forward BTC (Sh ~0.57), trend 1h L/S (~1.0), RV ETH/BTC (Sh 0.27, regime-luck), calendar/seasonality (buy&hold travestito), volume/vol e momentum-reversal (negativi).
  • MORTO/confermato artefatto: mean-reversion / fade (negativo anche a fee zero — la vecchia libreria +201%/+1238% era contaminazione); trend 5m/15m (fee).
  • GAMMA SCALPING (long-vol) "scalping BTC/ETH con copertura in opzioni" — SCARTATO (2026-06-26)scripts/research/options_gamma_scalp.py, test tests/test_gamma_scalp.py. È lo specchio esatto del VRP01 (long straddle ATM + delta-hedge: incassa RVIV, dove VRP01 incassa IVRV). Perde ogni anno, ogni variante, ogni frequenza (Sharpe 3 a 6; nudo/cheap-gated/rich-skip; rehedge 1d e 1h). Diagnostica strutturale: a 1d IV≈o>RV (BTC +4.9pp) → paghi il VRP; a 1h RV>IV gross ma (a) gonfiata da microstruttura, (b) il rehedge orario paga 24× la fee di hedge → variante peggiore (6). Marginale vs TP01 = DILUTES, non è nemmeno hedge (perde sia TP01-up sia TP01-down). Muro eseguibilità: opzione BTC min $5.968 ≫ $600. Schiacciato tra due muri: rehedge lento = premio, veloce = fee → nessuna frequenza vince. Regola gemella del VRP: niente long-vol scalp da modello in deploy. Il VRP01 (lato short, gated) resta l'unico edge opzioni — funziona perché sta sul lato giusto dello stesso premio. Diario 2026-06-26-gamma-scalp-options.md.
  • CASH-AND-CARRY (basis trade) "CC01" — premio REALE, Sharpe ARTEFATTO, NON deployabile (2026-06-26)scripts/research/cash_carry_hl.py, test tests/test_cash_carry.py. Diverso da FC01 (funding cross-sectional, già scartato): qui delta-neutral long-spot/short-perp sullo stesso asset → ritorno ≈ +funding (zero esposizione prezzo). Il premio di funding è reale (~+8-14%/anno aggregato, positivo ogni anno in-sample, ortogonale a TP01 corr ~0.05). MA lo Sharpe modellato 11-13 (DD 0.3%) è un ARTEFATTO: il modello cattura solo il cashflow liscio del funding e i rischi di coda sono strutturalmente fuori dal dataset — (1) storico funding dal 2023-05 → manca il 2022 (deleveraging, funding , basis blow-out); (2) procyclico (carry +23% toro 2024 → +1.7% bear 2026, si comprime quando servirebbe); (3) liquidazione short/slippage non modellati. Il mark-to-market della base (premium col → r=funding−Δpremium) sgonfia lo Sharpe solo 13→11 → il basis-from-data NON è il rischio vero. Sharpe reale di un basis-trade ~1-3 con code brusche. NON eseguibile a $600 (spot+perp = 4-38 gambe, funding HL non Deribit) → STAT-MODE. LEAD da rivedere a scala (~20k+ e venue con funding eseguibile), non uno sleeve. Sottoprodotto: CC01 passa OGNI gate del marginal scorer → punto cieco (manca un gate "Sharpe implausibile → rischio nascosto"; prossima indurita raccomandata). Diario 2026-06-26-cash-carry-hl.md.
  • TP01 × DVOL vol-targeting — NON migliora (2026-06-26)scripts/research/tp01_dvol_overlay.py, test tests/test_tp01_dvol_overlay.py. Angolo ESEGUIBILE (tocca il book live, non STAT-MODE): usare il DVOL (vol implicita forward-looking) come denominatore del vol-target di TP01 invece della vol realizzata. Su finestra comune 2021-2026: le varianti DVOL abbassano il DD (12.3%→9.2%) ma anche Sharpe FULL (0.75→0.70) e CAGR (8%→6%). Controllo decisivo: il realized a target_vol RIDOTTO (15%) eguaglia quel DD (9.4%) a Sharpe più alto (0.75) → il taglio di DD del DVOL è solo de-levering, replicabile meglio con un semplice target_vol più basso. L'unico residuo (hold-out +0.06) è single-window (storia DVOL <5 anni) → sotto la soglia multi-cut. Il gate DVOL-spike de-risk è ridondante col trend (TP01 già flat nei crash, Δ 0.00). Lezione: per meno DD sul live la leva è target_vol, non un overlay DVOL (20% resta canonico). Diario 2026-06-26-tp01-dvol-overlay.md.
  • Filoni 2026-06-29 (1ª ondata) — tutti scartati/forward. (A) DVOL-DIREZIONALE standalone BTC/ETH (buy-the-fear / IV-RV come segnale di livello): l'unico edge è un HEDGE (is_hedge=True, paga solo quando TP01 è debole), non alpha → earns_slot=False, forward-monitor come DD-dampener (diario 2026-06-29-dvol-directional.md). (B) INTRADAY ERM (efficiency-ratio regime momentum sub-daily): falso positivo da selezione-sull'hold-out → SCARTATO (vedi gate SELECTION-ON-HOLDOUT; 2026-06-29-intraday-regime.md). (C) XSEC-V2 NON-MOMENTUM su HL (reversal/idio-reversal/low-vol/BAB): solo LOWVOL 19-major regge standalone (FULL/HOLD 1.07) ma deflated-Sharpe 0.13 + storia 2.5a → DEBOLE/ forward STAT-MODE (2026-06-29-xsec-v2-nonmom.md). (D) MACRO regime-gate (equity/credito/oro/tassi → de-risk crypto): RIDONDANTE col trend (corr→TP01 0.989; il gate lavora solo nel 2-3% dei giorni, TP01 già flat nei crash) → SCARTATO (2026-06-29-macro-regime-gate.md).
  • Sweep strategie a 5 thread (2026-06-29) — 0 nuovi sleeve, 1 LEAD che rompe 2 muri su 3. Ricerca parallela onesta su aree inesplorate (harness altlib+xsec_v2_nonmom, tutti i gate incl. il nuovo study_family_honest): (1) low-risk cross-sectional, (2) momentum-structure vs XS01, (3) meta-allocazione dinamica, (4) segnali ortogonali ETH/BTC, (5) 1-gamba a segnale. Esito: soffitto ~1.3 riconfermato; ogni candidato ucciso dal gate giusto (deflated-Sharpe, is_hedge, selection-on-holdout, sostituzione-XS01, multi-cut). Niente batte/diversifica XS01 (varianti = REDUNDANT); meta-allocazione < pesi fissi (i 4 sleeve già quasi-risk-parity); 1-gamba a segnale = TP01 travestito (trend) o hedge a DSR<0.95. LEAD forward-monitor: STATARB-RESID (relative-MOMENTUM del residuo ETH−β·BTC, β OLS rolling, 2 gambe, cella vincente sgn=+1: le dislocazioni ETH-vs-BTC CONTINUANO a 1d, la MR pura sgn=1 perde) — primo stream insieme ortogonale (corr→book 0.027, β-mkt 0.013) ED eseguibile a $600 (haircut ~0, NON STAT-MODE come XS01/opzioni): marginal ADDS, robust_oos, fee-survive 0.30%/gamba; resta sotto soglia solo sull'edge (Sharpe 0.84, DSR 0.929 same-sign <0.95). CABLATO in forward-monitor PAPER: scripts/live/paper_statarb.py (W=45/sgn=+1 congelati, doppio libro MODELED/REAL-$600), nel cron giornaliero accanto a paper_prevday; test tests/test_paper_statarb.py. Se la finestra forward conferma l'edge è deployabile (2 gambe BTC/ETH perp). Altri LEAD: IVOL (idio-vol XS, STAT-MODE), DVOLSPREAD (storia DVOL corta). Diario 2026-06-29-strategy-search-5threads.md. Script scripts/research/{xsec_v3_lowrisk,xsec_v3_momstruct,meta_allocation,orthogonal_signals,signal_inout_1leg}.py.
  • Ondata 2026-07-01 (6 filoni multi-agente + scettico) — 0 edge nuovi dai filoni, 1 gate nuovo, e 1 sleeve promosso DALL'ARCHIVIO (GTAA01, sotto nel bullet portafoglio). Filoni su angoli non coperti dalle ondate precedenti: (1) funding time-series BTC/ETH (posizionamento) = SCARTATO — FOLLOW è trend-beta ritardato, FADE shorta il toro, il gate è TP01 travestito (DSR 0.215); il filone funding è chiuso su 3 lati (FC01 carry, price-clock, TS). (2) breadth/internals alt (51 HL) = SCARTATO ma unico NON-ridondante col trend (corr→TP01 0.40); muore su jackknife (uplift su 1 mese) + DSR 0.433 con ~8 mesi IS → rivisitabile tra 1-2 anni di storia HL nativa. (3) residual momentum XS (β-hedged, 19 major) = REDUNDANT — cross-section la residualizzazione è un no-op (lo z-score di XS01 rimuove già il mercato); l'edge resta solo nella coppia ETH/BTC (STATARB-RESID). (4) ri-ottimizzazione pesi + guardia-DD: il candidato EW-STR (TP30/XS25/VRP15/SKH30, HOLD 2.21→2.35) refutato dallo scettico come selezione-sull'hold-out di 2° ORDINE — SKH01/XS01 furono ammessi/affinati perché forti su quell'hold-out; pre-2025 ΔSh 0.05, finestre disgiunte 0.12/+0.06/+0.14, percentile 94-100° fra 500 tilt casuali ≈ firma best-of-15. Guardia-DD 5%/0.5: inerte OOS (la diversificazione fa già il lavoro; solo circuit-breaker d'emergenza). (5) affinamento VRP01 = NON MIGLIORA (l'alpha è tutto nel gate binario IV-rank; gate TP01 = trappola in-sample; 3° fallimento → filone "VRP dentro il modello" esaurito fino a f di stress reale). (6) stagionalità cross-sectional HL = morta allo step statistico (null permutato). GATE nuovo codificato: weights_tilt_null in src/portfolio/portfolio.py (+ combine_outer riusabile): ogni proposta di CAMBIO PESI si giudica vs il null dei tilt casuali cap-respecting — gate_pass solo se delta_insample≥0 E percentile < firma best-of-k (necessario, non sufficiente); test tests/test_weights_tilt_null.py. ⚠️ Lezione tecnica: DatetimeIndex.view("int64") su indici tz-aware non-ns (pandas 2.x) → scala sbagliata → merge_asof broadcasta = look-ahead che causality_ok non vede; usare epoca esplicita in ms (altlib verificato pulito). Diario di sintesi 2026-07-01-strategy-wave-6threads.md + 6 diari di filone; script scripts/research/r0701_*.py.
  • Ondata 2026-07-02 (TIMING + CRT, 8 filoni multi-agente + scettico) — 0 nuovi sleeve, 1 finding strutturale (anchor timing-luck di TP01, vedi ⚠️ nel bullet TP01). Goal: "strategie con timing differenti". (1) Event-clock bars (volume/vol/range da 5m, TSMOM/Donchian/EWMA in tempo-informazione): batte il wall-clock a pari segnale/frequenza solo in 4/45 coppie; cella best IS 1.45 → HOLD 0.46, NEUTRAL (corr 0.74 = trend travestito) → SCARTATO: il clock non è dove vive l'edge. (2) Calendario scadenze Deribit (expiry weekly/monthly/quarterly ven 08:00 UTC): 0/24 celle a Bonferroni; il drift post-expiry monthly fallisce placebo-weekday e permutation e si INVERTE sul quarterly (dove l'OI massimo dovrebbe amplificarlo); unico pattern robusto = gio→ven negativo, ma è day-of-week (SEA morta) a Sharpe netto ~0 → SCARTATO. (3) Anchor timing-luck TP01 + tranching: finding confermato (dettagli nel bullet TP01); tranching K=2/4 = sola riduzione della varianza della STIMA (ΔSharpe n.s., ΔDD ~0.5pt), NO deploy a $600 (il min-order lo degenera in K=1; serve feed intraday fuori path certificato) — rivalutare a ≥5-10k. Audit d'ancora ESEGUITO su XS01 e SKH01 (stesso giorno): il finding si replica su 3/3 sleeve ancorati — vedi ⚠️ nei rispettivi bullet e la stima de-luckata del book nel bullet portafoglio; diario 2026-07-02-anchor-audit-xs01-skh01.md. (4) Clock lenti (2-7g) + bande isteresi: fee drag di TP01 = ~0.4%/anno = tetto di ogni risparmio; il lag costa più del risparmio (HOLD ensemble 0.34→0.11 da N=2 a 7); a $600 il min-order $5 è GIÀ la banda ottimale (ordini 74% a costo ~0) → nessun cambio al book. (5) Velocità trend regime-condizionata (pesi tra orizzonti 30/90/180g vs percentile vol RV/DVOL): pctl 0.71 vs null pesi-statici-casuali = tilt-30d statico travestito (trappola EW-STR); pesi canonici 1/3 confermati → SCARTATO. (6-8) CRT "Candle Range Theory" (sweep-and-reclaim 3 candele, mai coperto da MRV/MIC): base 864 trial DSR 0.000 + anchor-flip + short "smart-money" negativo perfino in-sample; multi-TF (4h→15m, 1h→5m, ~10k trade) expectancy negativa ovunque anche a fee zero, e il ritest è informazione negativa (pattern con-ritest 40bps vs senza +52bps: aspettarlo seleziona i peggiori); contesto (FVG/equal-highs/sessioni, 22 trial) non salva il fade, cella "Asia" = artefatto anchor-flip → SCARTATO 3/3. Sottoprodotto: sugli stessi livelli prior-day FOLLOW > FADE ogni anno 2019-26 (conferma indipendente del lead prevday in forward-monitor). Lezione: il timing-luck d'ancora è multiple-testing che il deflated-Sharpe NON conta (candidato gate futuro anchor_luck_band). Diario 2026-07-02-timing-crt-wave.md; script scripts/research/r0702_*.py (9 file).
  • Ondata 2026-07-02-bis ("video claims": Elliott 3 filoni + Albimarini 2 + capital scaling) — 0 nuovi sleeve, 0 forward-monitor, 1 azione config pendente sul deposito. Meccanizzazione onesta di claim da video didattici: (1) Elliott range-cycle (onda1 compressa→onda3 ampia): rumore, 0/24 celle a Bonferroni, nessuna cella weekly regge a tutte le 7 ancore → SCARTATO. (2) Confluenza Fibonacci: vs null ingenui sembra buona (pctl 0.82-1.00), vs null location-matched (Fib±jitter: "0.618 vs 0.58?") crolla a 0.39-0.68 = l'apparente edge è la POSIZIONE dei livelli, non i numeri; confluenza FAIL 4/4 → SCARTATO (il null location-matched è IL test per ogni claim su livelli "speciali"). (3) Tecnica del canale Elliott: Donchian travestito — non batte il Donchian a pari geometria (corr 0.43-0.53), DSR 0.685, cella in-sample collassa in hold-out (1.40→−0.87), target 1.618 = caso (5/6 celle), anchor-luck di nuovo (4h banda hold [0.35,1.54], 00:00 la migliore) → SCARTATO. (4) Albimarini double-diagonal (short T + long T+1, deep OTM, via motore DVOL di VRP01): il condor stessa-scadenza la batte a ogni f (la long T+1 = assicurazione di coda +12/33bps nel tail, ~1bps costo medio, non dominanza); senza gate IV-rank TUTTE le strutture perdono (3ª conferma: l'alpha del VRP è il gate); su Deribit fee-negativa a QUALSIASI size (fee 8 gambe = 194-221% del theta); celle deep-OTM 0-perdite/142 trade = 2° caso "Sharpe implausibile" dopo CC01 → gate implausible_sharpe raccomandato con più forza. VRP01 resta superiore su tutta la banda skew → nessun LEAD. (5) Audit claims (28 trade, 82% win, PF 5.16, "420%/anno"): consistente con ZERO skill (P=20-45%; il 78.6% delle finestre 6-mesi 1996-2026 lo produce); replay con code reali = rovina 1998/2002/2020 col sizing dichiarato; la diagonale lascia passare il 12-40% della perdita naked. (6) Capital scaling 600→2-5k (r0702_capital_scaling.py): l'unico vincolo binding è max_notional_per_asset_usd=300 (a 5k il book live girerebbe al 49% del target) → al deposito alzare il cap a equity/2 ($1000/$1750/$2500 a 2k/3.5k/5k); min_order $5 da LASCIARE; tranching K=2 non cablare (blocco feed intraday); opzioni ETH eseguibili da ~2.6k ma la regola no-short-vol- da-modello non decade col capitale; XS01 ~20k confermata, CC01 fuori per struttura. Aspettativa onesta col CAGR de-luckato (10-15%): 2k ≈ €0.6-0.8/g, 5k ≈ €1.4-2/g (€50/g resta ≈130k). ⚠️ Lezione pandas: resample("7D", origin=...) IGNORA origin (pandas 2.x, solo RuntimeWarning) → bande d'ancora weekly finte; usare "168h". Diario 2026-07-02-elliott-albimarini-capital.md; script scripts/research/r0702_{ell_*,alb_*,capital_scaling}.py (6 file).
  • Video-claim "CRT top-down multi-TF, 74% win rate" — SCARTATO (2026-07-07): il 74% è un KNOB, non un edge. scripts/research/r0707_crt_topdown.py. Metodo ICT/SMC top-down (H1 setup CRT → M15 struttura/FVG → M5 conferma → M1 entry) con uscita parziale-70/80%-a-1.5R + break-even + runner verso prev-daily high/low. Il setup H1 CRT è già triplo-refutato (onda 2026-07-02: base DSR 0.000, MTF expectancy neg. ovunque "il ritest è informazione negativa", contesto/FVG peggiora, fade<follow) → qui testato l'UNICO angolo nuovo: la gestione d'uscita e il claim 74%. Su BTC/ETH certificati (H1→5m/15m; M1 non nel feed): WR reale 3037% a RR 1.52 (SOTTO il null gambler's-ruin 40% = P(+1.5R prima di 1R)=1/(1+1.5) → il ritest tocca il target MENO di una moneta), expectancy R negativa a ogni schema/fee/finestra/asset (1.2…−3.3R netto). Il 74% si fabbrica avvicinando il target: sweep rr1 0.5→2.0 mostra WR salire (51→32%) con expectancy R INVARIANTE (WR alto = target vicino, non direzione). DSR 0.000 (48 trial); a fee 0 expR 0.10/Sh 0.63 → non è morte-per-fee, l'edge lordo non c'è (residuo = beta di trend dei time-exit); parziale+BE+runner = 3-4 ordini/trade, alcuni sub-min-order a $600. Regola candidata: il win-rate di uno schema parziale+BE non è merito (≈1/(1+rr1)); convertire ogni claim "WR X%" in expectancy R netto fee prima di crederci (helper winrate_is_a_knob()). Diario 2026-07-07-crt-topdown-74winrate.md. Book/pesi INVARIATI.
  • Soffitto strutturale BTC/ETH-direzionale ~1.3 superato SOLO espandendo a un meccanismo diverso: cross-sectional su universo Hyperliquid certificato (XS01) → portafoglio Sharpe ~1.55.
  • Sweep "strategie alternative" (2026-06-20) — 104 ipotesi / 153 agenti / NIENTE di nuovo regge. Ricerca onesta a largo spettro su BTC/ETH+DVOL (harness condiviso vettoriale leak-free scripts/research/alt/altlib.py, 104 script in scripts/research/alt/runs/): 11 famiglie (breakout, trend non-TSMOM, mean-rev gated, DVOL/vol, cross-asset pairs, stagionalità, overlay rischio, opzioni modellate, microstruttura, ML walk-forward, combo). 16 promettenti, 1 sola sopravvissuta alla verifica avversariale (3 scettici) e comunque NON deployabile. Conferma forte del soffitto ~1.3: ogni PASS era hold-out-fitting o TP01/TSMOM travestito (trend-beta del toro). Unico LEAD: STA05 (EWMA-cross ensemble, long-short) — leak-free, plateau, corr hold-out 0.53 a TP01, il blend 0.75·TP01+0.25·STA05 alza l'hold-out 0.31→0.59 (full 1.30→1.24, DD 14→16%); MA hold-out corto (536g) → forward-monitor, non sleeve. Lezione harness: valutare lo Sharpe MARGINALE vs baseline TP01 (non assoluto) + esigere plateau e jackknife drop-one-month sull'hold-out prima di PASS (hanno ucciso 13/14 falsi positivi). Diario 2026-06-20-alt-strategies-100agent-sweep.md.
  • 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 baseline tp01_baseline_daily() (corr, uplift del blend OOS, beta+alpha residua) e ritorna earns_slot = (abs!=FAIL) AND (marginal==ADDS). Regola: una nuova strategia direzionale si giudica su earns_slot, non sullo Sharpe assoluto (gli overlay-su-TSMOM ereditano lo Sharpe di trend e prendono PASS fasulli — es. CMB04 PASS assoluto → NEUTRAL marginale). Demo marginal_demo.py, test tests/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 in marginal_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 via null_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, test tests/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 ucciso open_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 che eval_weights applica 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, test tests/test_harness_realism.py. Il lead ERM faceva earns_slot=True MA lo script di scoperta sceglieva la cella per min_hold massimo 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_marginal da 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 combinato study_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 con study_family_honest, non chiamando study_marginal sulla cella a max hold-out. Chiude il punto cieco gemello di CC01 ("Sharpe implausibile"). Diario 2026-06-29-intraday-regime.md (analisi scripts/research/intraday_regime_analysis.py).
  • Onestà sul target €50/giorno: NON raggiungibile su 2000 in 1-2 anni (servono ~130k di capitale o un DD da rovina). La leva non è la scorciatoia; la via è target-vol + capitale + tempo. La strategia che guadagna esiste, ma a ~+€1.5/giorno su 2000.

Script ricerca: scripts/research/track{A,B,C,D,E}_*.py + trackD_timing.py.

Obiettivo

Ricerca: riconoscimento pattern frattali per trading algoritmico su crypto. Target dichiarato €50/giorno partendo da €1.000. Onestà prima di tutto: nessun numero va creduto finché non è netto fee, out-of-sample, robusto su griglia, e su dati certificati + liquidi + eseguibili.

Stack

  • Linguaggio: Python 3.11+ — Package manager: uv (pyproject.toml, uv.lock)
  • Dati: Parquet in data/raw/ (gitignored). Solo BTC/ETH (5m/15m/1h).
  • Analisi/ML: numpy, pandas, scipy, scikit-learn
  • Fonte dati storici: Deribit mainnet via ccxt (pubblico, tokenless)

Struttura (post-reset)

src/data/downloader.py     → load_data(asset, tf): legge i parquet certificati da data/raw/
src/strategies/base.py     → Strategy (ABC), Signal, BacktestResult, YearlyStats
src/strategies/indicators.py → indicatori condivisi (ema, atr, keltner, ...)
src/strategies/trend_portfolio.py → TP01: strategia DIFENSIVA robusta (PORT LF1d, >=12h), causale
src/portfolio/             → PORTAFOGLIO DI STRATEGIE estensibile (Sleeve + StrategyPortfolio)
  portfolio.py             → combina N sleeve per peso su griglia giornaliera; metriche FULL/hold-out/anno
  sleeves.py               → REGISTRY sleeve attivi: TP01 33 / XS01 15 / VRP01 12 / SKH01 20 / GTAA01 20. Aggiungere = una riga
src/fractal/               → indicatori frattali (patterns.py, indicators.py, similarity.py)
src/backtest/engine.py     → engine di backtesting riusabile
src/backtest/harness.py    → harness ONESTO (load BTC/ETH, backtest_signals no-leakage, OOS)
src/version.py             → APP_VERSION (legge il file VERSION)
scripts/research/          → ricerca: track{A-I}_*.py + options_vrp_*.py + fetch_dvol.py
scripts/portfolio/         → run_portfolio.py (report) + xsec_*.py (ricerca/affinamento XS01)
scripts/live/paper_trend.py → paper trader forward-only di TP01 (1d) (no esecuzione reale)
scripts/analysis/          → SOLO i tool dati certificati:
  rebuild_history.py        → (ri)costruisce lo storico da Deribit mainnet (base 5m + resample)
  certify_feed.py           → certifica il feed (integrità, coerenza resample, spike, cross-venue)
  audit_feed.py             → audit per-barra vs riferimento esterno
  multi_source_check.py     → cross-check multi-venue (quale venue è "vero")
data/raw/                  → btc/eth × {5m,15m,1h} (gitignored). UNICO dato attivo.
data/instruments_registry.json → registry strumenti (reference)
docs/diary/                → diario di ricerca (1 voce: il reset; aggiungere dopo ogni esperimento)
Old/                       → ARCHIVIO: tutto il vecchio (strategie, live, ricerca, dati, diari)
VERSION                    → semver (2.0.0)

Comandi

uv sync                                                       # installa dipendenze
uv run python scripts/analysis/rebuild_history.py --asset BTC ETH   # (ri)costruisci storico da Deribit mainnet
uv run python scripts/analysis/certify_feed.py                # certifica i feed (locale + cross-venue)
uv run python scripts/analysis/certify_feed.py --local        # solo check locali (veloce)
uv run python scripts/research/trackD_trendport.py            # backtest strategia vincente (full report)
uv run python scripts/research/trackD_timing.py               # vincitrice su 15m/1h/4h/1d + PnL/DD/trade per anno
uv run python scripts/analysis/fetch_hyperliquid.py          # fetch+certify universo Hyperliquid (Cerbero mainnet) -> data/raw/hl_*
uv run python scripts/portfolio/xsec_research.py             # ricerca cross-sectional su Hyperliquid (XS01)
uv run python scripts/portfolio/run_portfolio.py             # report del PORTAFOGLIO attivo (TP01+XS01)
uv run python scripts/live/paper_trend.py                    # avanza il paper trader TP01 (forward-only, 1d)
uv run pytest                                                 # test
from src.data.downloader import load_data
df = load_data("BTC", "1h")   # OK. load_data("SOL", ...) -> FileNotFoundError (guardrail: solo dati certi)

IL DATO — fonte di verità (regola di prim'ordine)

  • La verità è Deribit mainnet, perché è dove (in futuro) eseguiamo. Cross-check multi-venue: Deribit mainnet è a 0-1 bps dal consenso. Binance NON è la verità (è USDT, ~10 bps fuori, e sotto depeg USDT fino al 3% off) → usare Binance/Coinbase SOLO come audit indipendente, mai come ancora per "ripulire" i dati.
  • Aggiornare lo storico SOLO con rebuild_history.py (ccxt Deribit mainnet, base 5m unica + resample → coerenza interna garantita). MAI il vecchio downloader Cerbero (token testnet = feed farlocco: è la causa della contaminazione).
  • Certificare sempre dopo un rebuild con certify_feed.py (integrità OHLC, zero gap, coerenza resample maxΔ≈0, spike = solo crash reali, accordo cross-venue per-anno vs Coinbase USD).

Universo ricercabile certificato

  • BTC / ETH: puliti (2-6 bps vs Coinbase USD su tutta la storia), liquidi (~0% barre flat a 1h), storia lunga (2018/2019→oggi) → ogni timeframe (5m/15m/1h). È l'unico dato in data/raw.
  • Alt Deribit (SOL/XRP/ADA/LTC/DOGE/BNB): FUORI. Illiquidi (LTC 5m 82% barre flat, run ~3 giorni), divergenti, o non certificabili. Archiviati in Old/data/raw.
  • Universo Hyperliquid (Cerbero MCP MAINNET): 19 alt liquidi a 1d, dal 2024 — BTC/ETH/SOL/BNB/XRP/ DOGE/AVAX/LINK/LTC/ADA/ARB/OP/SUI/APT/INJ/TIA/SEI/NEAR/AAVE. Certificati (fetch_hyperliquid.py): flat 0%, cross-venue 4-9 bps vs Binance, >1% ≈0% → data/raw/hl_*_1d.parquet. Caveat: storia nativa solo ~2.5 anni (2024-2026; pre-2024 = backfill, vol 0). Abilita le strategie CROSS-SECTIONAL (impossibili a 2 asset). NB: Cerbero col token TESTNET = farlocco; col token mainnet (.env.mainnet) = reale, ma SEMPRE da certificare (cross-venue + liquidità). ⚠️ CORREZIONE estrazione (2026-06-20): il backfill NON è solo pre-2024 — cerbero MCP padda con barre SINTETICHE (volume 0, prezzi copiati da Binance → matchano cross-venue e non sono flat) ogni asset listato su HL dopo lo START. Il flat+cross-venue da soli non lo vedono: il rivelatore è il VOLUME. fetch_hyperliquid.py ora (1) taglia il run iniziale a volume 0, (2) scarta chi resta < 365g reali (es. AXS 83% sintetico → fuori), (3) gata i gap vol=0 interni. Universo certificato = 51 (era 52). I 19 major di XS01 hanno 0 backfill → invariati (strategia live non toccata). Verificato direttamente su cerbero MCP. Diario 2026-06-20-cerbero-backfill-fix.md.

Metodologia obbligatoria per ogni nuova strategia

  1. Ingresso eseguibile: direzione e prezzo decisi con dati fino a close[i], mai close[i-1] con direzione presa da i; mai entry sull'estremo (high/low) di una candela.
  2. Backtest NETTO dopo fee realistiche Deribit (0.10% RT taker; maker ~0%) + leva.
  3. Out-of-sample held-out + robustezza su griglia parametri (entrambi gli asset, tutte le celle positive) + sweep fee (0.00-0.20% RT, margine ampio).
  4. Liquidità & plausibilità (lezione v2.0.0): incrociare ogni edge con la liquidità reale del book (quota di barre flat) e con la plausibilità del prezzo (cross-venue). Un edge full+OOS robusto su un book fermo o su wick fantasma NON è un edge.
  5. Strategia in scripts/strategies/ (codice univoco), test in tests/, diario aggiornato.

Lezioni critiche (da NON ripetere — la storia di questo progetto)

  • Feed contaminato → libreria fasulla (v2.0.0). Print fantasma testnet + Binance/USDT hanno prodotto edge inesistenti (+201%/+1238%/+16492% "OOS"). Tutti spariti sul feed reale. Lezione: il dato viene prima della strategia; certificare sempre.
  • Look-ahead squeeze (storico). L'intera famiglia squeeze-breakout aveva accuratezze 76-82% che erano artefatto: decideva la direzione con la candela di breakout i ma entrava a close[i-1]. Con ingresso onesto: lancio di moneta. (Dettagli nei diari in Old/.)
  • Entry sugli estremi di candela. Strategie che entrano a close quando close è all'estremo del range (≤0.1% o ≥99.9%) gonfiano i ritorni in modo irrealistico (ETH 2024: +30.848% → +2.725% rimuovendoli). Spesso è un artefatto di dato o di entry non eseguibile.
  • Mean-reversion vs breakout. Sui dati storici l'unica direzione che mostrava edge era la mean-reversion (i breakout rientrano) — MA anche quegli edge erano per lo più artefatto del feed: da riverificare da zero su dati certi.
  • Fee = vincolo di prim'ordine. 0.10% RT baseline. Molte operazioni = morte per fee.
  • Leva: testare 3x; 5x raddoppia il drawdown. I numeri a leva alta NON sono il caso base.
  • Data leakage con rendimenti log: returns[k] = log(close[k+1]/close[k]) usa close[k+1]. I feature devono fermarsi a returns[i-2] se il prezzo corrente è close[i-1]. Verificare SEMPRE.

Convenzioni

  • Strategie in scripts/strategies/ con codice univoco; scartate documentate nel diario.
  • Diario in docs/diary/YYYY-MM-DD.md, aggiornato dopo ogni esperimento significativo.
  • Nessun segreto nei commit (token/chiavi). .env e .env.mainnet sono gitignored.
  • Versionamento: VERSION (semver) + scripts/bump_version.py. src/version.py lo legge.

Archivio Old/

Tutto il lavoro pre-reset (preservato in git per consultazione storica): strategie (Old/scripts/strategies), stack live e portafogli (Old/src/live, Old/src/portfolio, Old/scripts/portfolios), ricerca/gate (Old/scripts/analysis), dati non certificati (Old/data), 60+ diari (Old/docs/diary), test (Old/tests). Consultabile come riferimento ("come facevamo X"), ma nessun edge lì dentro è fidato finché non è ri-validato su dati certi.