Files
PythagorasGoal/docs/diary/2026-06-04-partial-tp-ladder.md
T
Adriano Dal Pastro 3accc91f84 docs(diary): exit ladder 80/20 con runner+stop dinamico SCARTATO (il runner non corre: TP=media, ~3% oltre TP, −38% ret su MR02 ETH)
Test onesto scripts/analysis/partial_tp_ladder.py: stessi segnali, engine
intrabar fade_base, fee identiche. Il ladder compra win-rate/DD pagando i
winner migliori — stesso profilo del vol-target gia' scartato.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 19:48:45 +00:00

3.3 KiB
Raw 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.