Files
PythagorasGoal/Old/docs/diary/2026-06-04-partial-tp-ladder.md
Adriano Dal Pastro 14522262e6 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>
2026-06-19 15:20:59 +00:00

3.3 KiB
Raw Permalink Blame History

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.