14522262e6
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>
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.
|