feat(live): MR02/ETH stop-largo sl_atr 3.0 (miglioria gated, regola sl=0 rispettata)

Esito ricerca sostituto/miglioria MR02/ETH: nessun sostituto batte il live
EXIT-16; la miglioria deployabile e' allargare lo stop close-confirm da
sl_atr 2.0->3.0 sul solo MR02_ETH. Gate PORT06 (swap MR02_ETH): FULL Sh
6.73->6.77 DD 3.67->3.30, OOS 8.80->8.82 DD 1.23 (domina il live). Cattura
il beneficio del no-SL tenendo lo stop di catastrofe: worst-trade -50% vs
-65% del no-SL -> regola "mai sl=0" rispettata. Override scoped a MR02/ETH
(_fade_params); altri 5 fade invariati. 93/93 test ok.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-06-09 07:31:55 +00:00
parent c997bce00e
commit aa4361ddde
2 changed files with 37 additions and 2 deletions
@@ -107,6 +107,21 @@ Gate PORT06 (`eth_collar_gate.py`, BS calibrato skew_put 1.12 / skew_call 1.0, s
4% aggregato). La cap auto-finanziata era giusta sul *costo* (~break-even) ma la protezione non
vale il costo Sharpe/OOS-DD. Le opzioni si chiudono come **NO-GO empirico su prezzi reali**.
## Deploy della miglioria (2026-06-09): MR02/ETH stop-largo sl_atr 3.0
Nessun SOSTITUTO batte il live; la MIGLIORIA deployabile e' allargare lo stop EXIT-16.
Gate stop-width (EXIT-16 close-confirm, swap solo MR02_ETH):
| sl_atr | FULL Sh | FULL DD | OOS Sh | OOS DD | worst-trade |
|---|---|---|---|---|---|
| 2.0 (LIVE) | 6.73 | 3.67 | 8.80 | 1.23 | -48% |
| **3.0** | **6.77** | **3.30** | **8.82** | 1.23 | **-50%** |
| 4.0 | 6.78 | 3.49 | 8.82 | 1.23 | -62% |
| no-SL (sl=0) | 6.76 | 3.68 | 8.87 | 1.23 | -65% (vietato) |
`sl_atr=3.0` domina il live (FULL DD -0.37pp, Sh +0.04/+0.02) e cattura il beneficio del no-SL
(gli stop di meta'-discesa sono falsi negativi) MANTENENDO lo stop di catastrofe (worst -50%, non
-65%) -> regola "mai sl=0" rispettata; 4.0 inizia a perdere la coda. Plateau 2.5-4.0 (tutti > live
su Sharpe). Override SCOPED a MR02/ETH in `_defs.py` (`_fade_params`); gli altri 5 fade non
ri-gateati -> invariati. 93/93 test passano. Deploy: `./scripts/deploy.sh` (cambio live).
## Artefatti riusabili
- `scripts/analysis/option_overlay_lab.py` — overlay opzioni (pricing BS sintetico su DVOL).
- `scripts/analysis/options_fetcher.py` — import storico opzioni reale da cerbero-bite → data/options/.
+22 -2
View File
@@ -40,9 +40,29 @@ EMA_LONG = 200
# esce nei crash veri tipo FTX). Vedi docs/diary/2026-06-04-exit-lab.md.
SL_CONFIRM_ATR = 0.5
# Override stop-largo su MR02/ETH (2026-06-09). Lo sleeve a DD piu' alto e peggior performer reale
# (whipsaw: fada un downtrend in long, poi shorta il rimbalzo). Ricerca 127 strategie + verifica
# avversariale + gate PORT06: nessun SOSTITUTO batte il live EXIT-16; la miglioria e' ALLARGARE lo
# stop (sl_atr 2.0->3.0) mantenendo il close-confirm. Cattura il beneficio del no-SL (gli stop di
# meta'-discesa sono falsi negativi) SENZA la coda da sl=0 (worst-trade -50% vs -65% del no-SL; la
# rete di catastrofe resta -> regola "mai sl=0" rispettata). Gate PORT06 (swap del solo MR02_ETH):
# FULL Sh 6.73->6.77 DD 3.67->3.30, OOS Sh 8.80->8.82 DD 1.23 (domina il live, FULL DD -0.37pp).
# Scoped a MR02/ETH: gli altri 5 fade (logica diversa) NON sono stati ri-gateati -> invariati.
# Diario docs/diary/2026-06-08-mr02eth-replace-search.md (addendum 2026-06-09).
SL_ATR_WIDE_MR02ETH = 3.0
def _fade_params(c: str, a: str) -> dict:
p = {"min_tp_frac": MIN_TP_FRAC, "trend_max": TREND_MAX,
"ema_long": EMA_LONG, "sl_confirm_atr": SL_CONFIRM_ATR}
if (c, a) == ("MR02", "ETH"):
p["sl_atr"] = SL_ATR_WIDE_MR02ETH
return p
FADE = [SleeveSpec(kind="single", name=c, sid=f"{c}_{a}", asset=a, cluster=f"{a}-rev",
params={"min_tp_frac": MIN_TP_FRAC, "trend_max": TREND_MAX,
"ema_long": EMA_LONG, "sl_confirm_atr": SL_CONFIRM_ATR})
params=_fade_params(c, a))
for a in ("BTC", "ETH") for c in ("MR01", "MR02", "MR07")]
HONEST = [
# DIP01: single-asset 1h -> StrategyWorker (Strategy DIP01_dip_buy). TR01/ROT02: multi-asset.