chore(reset): v2.0.0 — storico certificato Deribit mainnet, ripartenza pulita

Reset del progetto su fondamenta verificate dopo la scoperta che l'intera
libreria "validata OOS" era artefatto di feed contaminato (print fantasma del
feed Cerbero TESTNET + storico Binance/USDT).

- Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e
  CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia
  (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample
  (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE
  50-82% barre flat; XRP/BNB non certificabili).
- Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni
  portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST
  con segnale residuo, da ri-validare in isolamento.
- Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio,
  runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/
  portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/
  (preservati, non cancellati). Diario consolidato in un unico documento.
- Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal +
  src/backtest/engine + load_data; tool dati certificati (rebuild_history,
  certify_feed, audit_feed, multi_source_check).
- Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico
  (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-06-19 15:16:03 +00:00
parent 8401a280b9
commit 14522262e6
383 changed files with 1971 additions and 779 deletions
@@ -0,0 +1,51 @@
# 2026-06-07 — SH01 punto-10: il regime live (train 365g) NON è robusto → bootstrap full-history
Punto 10 della roadmap sweep: ri-validare SH01 col train-window del regime live
(~8760 barre, il `_ML_LOOKBACK_DAYS=365` del runner) invece dell'expanding
full-history usato da tutta la validazione storica.
## Ri-validazione (`scripts/analysis/sh01_trainwindow_validate.py`)
`ml_wf_entries(train_window=...)` rolling su storia piena ≈ il regime live.
Protocollo explore_lab (FULL / OOS 30% / sweep fee / anni positivi), W24 H12 th0.58.
| BTC train | trade-rate | FULL / OOS | Sharpe | fee 0.2%: FULL/OOS | anni+ | robusto |
|---|---|---|---|---|---|---|
| 8760 (live) | **21.7%** | +82 / +74 | 1.31 | **42** / +20 | 6/9 | ❌ |
| 17520 (2y) | 15.4% | +166 / +96 | 2.05 | +9 / +47 | 6/9 | ❌ |
| 26280 (3y) | 11.8% | +348 / +95 | 3.09 | +109 / +61 | 7/9 | ❌ |
| EXPANDING | 9.8% | +219 / +42 | 2.72 | +60 / +26 | 8/9 | ✅ |
ETH a tw=8760: **FULL 33%, Sharpe 0.02** (lancio di moneta che paga fee).
Conferme: (a) la diagnosi del sweep era esatta (trade-rate 22-26% live vs 10%
validato — soglia inerte per over-confidence su train piccolo); (b) la
progressione è MONOTONA: l'edge di SH01 *è* la memoria lunga; (c) lo sweep della
soglia nel regime corto dà risultati instabili e incoerenti fra asset → ri-tunare
th sarebbe curve-fitting sul rumore di calibrazione (come da warning del piano).
## Decisione (utente): bootstrap full-history
Ripristinare in live ESATTAMENTE il regime validato (expanding full-history):
1. **`ml_wf_entries(last_block_only=True)`** — fitta/predice SOLO l'ultimo blocco
del walk-forward. I confini dei blocchi sono deterministici (start + k·retrain)
e al worker servono solo i segnali recenti → le entries dell'ultimo blocco sono
**identiche per costruzione** al tail del WF completo (parity test esatto in
`tests/portfolio/test_sh01_last_block.py`). Costo live: **0.6 s/tick** su 73k
barre (1 fit LogReg) vs ~140 fit del WF completo.
2. **Bootstrap storia nel runner**: per gli sleeve `ml` il tick riceve
`concat(parquet_locale < feed_start, feed_live)` (`runner._with_history`).
Gap-guard: se il parquet è stantio oltre il lookback del feed → solo feed +
WARN una-tantum (meglio il regime corto dichiarato che una serie col buco).
Manutenzione: tenere fresco il parquet con `download_all()` (oggi al 2026-05-28,
il feed copre 365g → margine ~11 mesi).
3. `_defs.py`: `params={"last_block_only": True}` sugli sleeve SHAPE (solo path
live; il backtest canonico resta WF completo).
Effetto atteso live: trade-rate SH01 da ~25% a ~10% delle barre, selettività
della soglia ripristinata, WR atteso ≈ validazione (acc OOS ~56% BTC).
Il monitor naturale è il report orario (SH01 farà MENO trade).
Nota: `_ML_LOOKBACK_DAYS` resta 365 (il feed serve comunque per le barre recenti
e come fallback se il parquet è stantio).