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:
@@ -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).
|
||||
Reference in New Issue
Block a user