Files
PythagorasGoal/docs/diary/2026-06-07-dip01-exit16.md
T
Adriano Dal Pastro ed2a9013aa feat(DIP01): EXIT-16 close-confirm SL (gate gap-aware 36/36 BTC, PORT06 promosso)
Punto 9 roadmap sweep. DIP01 era l'unico sleeve BTC con esecuzione reale
round-trip ancora sul branch SL intrabar wick-sensitive.

Gate dip01_exit16_impact.py (parita' canonica 1.00000; engine GAP-AWARE: orig
filla lo SL a worse(livello, open) per rimuovere il bias pro-stop-intrabar
dell'engine canonico sui gap-through):
- grid 3x3x2 BTC: EXIT-16 >= orig in 36/36 (train E oos), OOS Sharpe ~2-4x
  (canonica 1.47->3.48); ETH 35/36 (robustezza).
- plateau buffer piatto 0.4-1.0 (OOS DD 6.4% identico) -> 0.5 come le fade.
- PORT06: FULL Sh 6.43->6.61 DD 3.96->3.58 | OOS Sh 8.58->8.77 DD 1.36->1.34.
5a conferma del principio EXIT-16 (wick-stop = falsi negativi per mean-reversion).
hurst_max non valutato (ridondante-dannoso post-EXIT-16, gate trendmax).

Deploy: "sl_confirm_atr": 0.5 nei params DIP01_BTC (il worker legge gia').

Trappola di metodo documentata: la prima parita' falliva per l'ancora bfill di
_daily_equity (la serie a punti-trade reindexata su IDX aggancia il primo valore
al PRIMO trade in finestra, non al capitale portato avanti) — replicata per
parita'; finding aperto perche' tocca le metriche canoniche di tutti gli sleeve
a punti-trade. Diario docs/diary/2026-06-07-dip01-exit16.md.

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

2.8 KiB
Raw Blame History

2026-06-07 — DIP01 EXIT-16: PROMOSSO (gate gap-aware, il più netto della serie)

Punto 9 della roadmap sweep: DIP01 era l'unico sleeve BTC con esecuzione REALE round-trip e girava ancora sul branch SL intrabar wick-sensitive. EXIT-16 era validato SOLO sulle fade: estensione a una strategia honest dietro doppio gate (grid proprio di DIP01 + PORT06), con engine GAP-AWARE come da lezione exit-lab.

Metodo (scripts/analysis/dip01_exit16_impact.py)

  • Parità con la equity canonica: corr 1.00000, ret +322% identico.
  • Engine gap-aware: nel ramo orig lo SL filla a worse(livello, open[j]) — l'engine canonico filla "al livello" anche su gap-through (54% dei casi per stop tight) e regalerebbe al ramo intrabar un vantaggio fittizio.
  • Grid 3×3×2 (z_in × sl_atr × max_bars) su BTC (deployato) ed ETH (robustezza); train (pre 2024-10-12) e OOS separati. Buffer plateau {0.4, 0.5, 0.75, 1.0}.
  • NB hurst_max NON valutato su DIP01: il gate trendmax dello stesso giorno ha mostrato che è ridondante-dannoso post-EXIT-16.

Trappola di metodo trovata: l'ancora bfill di _daily_equity

La prima parità falliva (corr 0.9956, 16pp) con engine identici (662 trade, stessi return, stesso capitale finale). Causa: la convenzione canonica _daily_equity (serie a punti trade-exit → reindex(IDX).ffill().bfill()) ancora il primo valore della finestra al PRIMO trade dentro IDX (es. 942.54 dopo le perdite di gennaio 2021), non al capitale portato avanti dall'ultimo trade del 2020 (979.23). Il mio replay hourly era più "corretto" ma per parità va replicata la convenzione. Finding aperto: questo bias tocca le metriche canoniche di TUTTI gli sleeve a punti-trade (honest/pairs/tsm) — l'ancoraggio distorce leggermente il punto di partenza della finestra. Da valutare a parte se correggerlo OVUNQUE in un colpo solo (cambierebbe i numeri canonici di riferimento).

Risultati

  • Grid BTC: 36/36 (EXIT-16 ≥ orig gap-aware in train E OOS in tutte le 18 celle). OOS Sharpe ~2-4x (cella canonica 1.47→3.48), DD giù in 14/18 celle.
  • Grid ETH: 35/36 (unica eccezione la cella estrema z3.0/sl3.0/mb48, marginale).
  • Plateau buffer piatto: OOS DD 6.4% identico da 0.4 a 1.0; scelto 0.5 (== fade).
  • PORT06: FULL Sharpe 6.43→6.61, DD 3.96→3.58 | OOS Sharpe 8.58→8.77, DD 1.36→1.34. Migliora tutto. PROMOSSO.

È la 5ª conferma indipendente del principio EXIT-16: gli stop intrabar da wick sono falsi negativi per le strategie mean-reversion — l'overshoot che buca lo stop è il movimento che si sta comprando.

Deploy

_defs.py: "sl_confirm_atr": 0.5 nei params DIP01_BTC (il worker legge già il param — zero codice). Live path: TP intrabar invariato, SL solo su close confermato, disaster-bracket on-book già attivo per gli outage.