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,63 @@
# 2026-06-04 — Exit ladder (80% del TP → esci 80%, runner con stop dinamico): SCARTATO
## La proposta
"E se all'80% del TP usciamo con l'80% della posizione, mettiamo uno SL dinamico
su quella soglia (profitto lockato) e lasciamo correre il 20% restante?"
Idea: uscita scalare — bancare prima la maggior parte del profitto (la soglia
all'80% viene toccata più spesso del TP pieno) e tenere un runner free-ride con
worst-case alla soglia, best-case oltre il TP.
## Il test (onesto, stessi segnali)
`scripts/analysis/partial_tp_ladder.py`: replay intrabar degli STESSI segnali
delle 3 fade (params live: `trend_max=3.0, ema_long=200, hurst_max=0.55,
min_tp_frac=0.0015`), engine identico a `fade_base` (ingresso a `close[i]`,
SL pieno prioritario nello stesso bar, fee 0.10% RT × leva 3 — il ladder NON
paga fee extra: due uscite ma stesso notional). Convenzioni conservative: se il
bar che tocca la soglia chiude oltre (rientro), il runner è stoppato subito.
Griglia: base vs ladder (f=0.8 q=0.8 — la proposta —, f=0.8 q=0.5, f=0.5 q=0.5),
FULL + OOS (nov 2023→), BTC+ETH.
## Risultati (proposta f0.8 q0.8)
| Sleeve | ret% FULL base→ladder | DD% | ret% OOS | win% OOS |
|---|---|---|---|---|
| MR01 BTC | 92 → 92 | 13.8 → 10.0 | 41 → 39 | 60 → 65 |
| MR01 ETH | 194 → 195 | 16.5 → 15.3 | 134 → 147 | 70 → 75 |
| MR02 BTC | 129 → 112 | 19.0 → 17.2 | 66 → 54 | 55 → 59 |
| **MR02 ETH** | **2135 → 1319** | 16.2 → 12.7 | **893 → 651** | 75 → 80 |
| MR07 BTC | 78 → 78 | 6.8 → 5.2 | 43 → 40 | 64 → 66 |
| MR07 ETH | 115 → 96 | 10.6 → 10.6 | 68 → 64 | 66 → 70 |
## Verdetto: NO-GO (gate fallito)
1. **Il runner non corre.** Su centinaia di trade finisce oltre il TP quasi mai
(~3% dei partial; 0-15 casi per sleeve) e viene **stoppato alla soglia nel
~60% dei tocchi**. È la fisica mean-reversion: il TP delle fade sta ALLA
MEDIA — lì il movimento è esaurito per costruzione. Il runner è un
trend-follow della coda, e i breakout rientrano (lezione squeeze).
2. **Il costo è concentrato sui winner migliori**: ogni TP pieno ora esce
all'80% della strada sulla quota grossa → MR02 ETH (lo sleeve più forte)
38% ret FULL / 27% OOS. Sharpe per-trade ~piatto: non migliora il
rischio/rendimento, scambia ritorno con DD.
3. **Quello che compra** (win-rate +4-5pp, DD 1-4pp) è lo stesso profilo del
**vol-target sizing già scartato** ("abbassa il DD ma sacrifica ritorno");
il lavoro anti-DD lo fa già il loss-guard Hurst, che il gate l'ha passato
perché taglia SOLO i loser.
Nota dal grid: `f0.5 q0.5` su MR07 ETH fa Sharpe OOS 6.58 / win 82%, ma
distrugge MR02 (2135→531) → nessuna variante robusta su tutti gli sleeve,
niente cherry-picking per-sleeve.
Argomento esecutivo in più: il ladder raddoppierebbe la complessità dello
shadow appena deployato (v1.0.7: limit reduce-only al TP) — due resting order
per posizione, due riconciliazioni, e lo stop dinamico avrebbe il problema dei
trigger Deribit (nuovo order_id al trigger → fill non verificabile per
order_id).
**Conferma della lezione di famiglia:** i tweak d'exit che toccano i winner
falliscono il gate (time-stop, vol-target, ADX, vratio… e ora il ladder);
l'unico anti-perdite che passa resta il loss-guard Hurst, che riduce
l'esposizione nel regime tossico senza toccare le uscite.