3accc91f84
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>
64 lines
3.3 KiB
Markdown
64 lines
3.3 KiB
Markdown
# 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.
|