Files
PythagorasGoal/docs/diary/2026-06-07-trendmax-gate.md
T
Adriano Dal Pastro e3bb622b90 feat(fade): swap filtro live hurst->trend_max 3.0 (gate PORT06 sul path live)
Punto 7 roadmap sweep. Gate trendmax_port06_impact.py (engine exit16_port06_impact
riusato, parita' canonica 1.00000; maschera hurst IDENTICA al live via
fade_base.hurst_skip_mask; PORT06 pesi cap, path live EXIT-16):

- CANDIDATO (hurst+trend) BOCCIATO: over-filtering (FULL Sharpe 7.23->7.11,
  meta' dei trade) nonostante DD 2.68->2.06.
- SCOPERTA: il loss-guard Hurst e' ridondante-DANNOSO post-EXIT-16 (NESSUNO
  batte LIVE: FULL Sh 8.07 vs 7.23). EXIT-16 ha eliminato i wick-stop che hurst
  evitava -> gli ingressi saltati (66% delle barre) sono tornati vincenti.
  Il test che promosse hurst (2026-06-02) era sull'engine PRE-EXIT-16.
- TREND-ONLY domina LIVE su tutte le metriche (FULL Sh 7.89 DD 2.46, OOS Sh 9.91
  DD 1.20) ed e' la config che la ricerca EXIT-16 aveva davvero promosso (entries
  trend-filtrate, no hurst) mai eseguita dal live. Plateau 2.5/3.0/3.5 robusto.

Decisione (utente): SWAP. _defs.py: trend_max=3.0 + ema_long=200 nelle 6 fade,
hurst_max rimosso (hurst_skip_mask resta in fade_base). hourly_report: monitor
stop-rate per epoca PRE->HURST->TREND (verdetto a n>=30). CLAUDE.md aggiornato
(paragrafo hurst marcato storico). Diario docs/diary/2026-06-07-trendmax-gate.md.

Lezione: ri-gateare ogni filtro quando cambia l'exit engine.

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

3.6 KiB
Raw Blame History

2026-06-07 — Gate trend_max sulle fade live: BOCCIATA l'aggiunta, PROMOSSO lo swap hurst→trend

Punto 7 della roadmap improvement-sweep: ripristinare trend_max=3.0/ema_long=200 sulle 6 fade live (ON nel backtest canonico, OFF in produzione). Il piano imponeva il gate PORT06 perché hurst e trend si sovrappongono. Esito sorprendente ma coerente.

Metodo

scripts/analysis/trendmax_port06_impact.py — engine riusato da exit16_port06_impact (replay esatto del path canonico, parità verificata: corr 1.00000 e diff 0.00% su tutte e 6 le fade) + maschera Hurst IDENTICA al live (fade_base.hurst_skip_mask, close-only, w=100 step=6 — non la cache regime_lab). Tutte le varianti girano sul path live (EXIT-16 close-confirm 0.5 attivo); PORT06 con pesi cap canonici (PAIRS 0.33, SHAPE 0.0588), OOS da 2024-10-12.

Nota di metodo: il test PORT06 del loss-guard Hurst (fade_lossguard_port_test, 2026-06-02) era su entries GIÀ trend-filtrate E sull'engine PRE-EXIT-16 (SL intrabar). La config live reale (hurst senza trend, con EXIT-16) non era MAI stata gateata.

Risultati (PORT06, fade in path live EXIT-16)

Variante FULL Sh FULL DD FULL CAGR OOS Sh OOS DD OOS CAGR
LIVE (hurst, no trend) 7.23 2.68% 68% 9.35 1.68% 92%
CANDIDATO (hurst+trend) 7.11 2.06% 59% 9.36 1.62% 83%
TREND-ONLY 3.0 7.89 2.46% 82% 9.91 1.20% 103%
NESSUNO (solo EXIT-16) 8.07 3.35% 105% 9.72 1.38% 119%
TREND-2.5 7.75 2.46% 76% 9.76 1.20% 96%
TREND-3.5 7.87 2.46% 84% 9.64 1.20% 103%

Letture

  1. CANDIDATO BOCCIATO (gate formale): il DD scende (2.68→2.06) ma FULL Sharpe 0.12 e CAGR 9pp — over-filtering, i due filtri tagliano lo stesso regime (n trade 50%, es. MR02_ETH 911→436).
  2. Il loss-guard Hurst è ridondante-dannoso post-EXIT-16: NESSUNO batte LIVE su Sharpe e ritorno ovunque. Spiegazione meccanica: hurst evitava i regimi stop-heavy saltando gli ingressi; EXIT-16 ha eliminato i wick-stop alla radice → gli ingressi che hurst salta sono in maggioranza tornati vincenti. Il 66% delle barre è oltre soglia hurst → il filtro toglieva metà dell'esposizione per un beneficio che ormai non c'è.
  3. TREND-ONLY domina LIVE su tutte e 4 le metriche ed è ESATTAMENTE la config che la ricerca EXIT-16 del 2026-06-04 aveva promosso (entries trend-filtrate, no hurst: FULL 7.84/2.60, OOS 10.06/1.15 — i 7.89/2.46 e 9.91/1.20 di oggi combaciano al netto di refresh dati e cap SHAPE). Il live non aveva mai eseguito quella config.
  4. Plateau robusto: trend_max 2.5/3.0/3.5 quasi indistinguibili (OOS DD 1.20 identico su tutte) → non è una soglia tunata.
  5. Il trend filter vs NESSUNO è un trade-off deliberato: 23pp CAGR FULL per FULL DD 3.35→2.46 e OOS Sharpe 9.72→9.91. Coerente con la filosofia del progetto (DD control > ritorno marginale).

Decisione (utente, 2026-06-07)

SWAP hurst→trend nelle 6 fade live (_defs.py): trend_max=3.0, ema_long=200, hurst_max rimosso. hurst_skip_mask resta in fade_base (param opzionale). Monitor live aggiornato: hourly_report ora traccia lo stop-rate per epoca PRE (nessun filtro) → HURST → TREND, verdetto a n≥30 nell'epoca TREND.

Lezione

Ogni meccanismo anti-perdite va RI-gateato quando cambia l'exit engine: hurst era genuinamente il migliore sull'engine a SL intrabar (unico su ~10 candidati), ma EXIT-16 ne ha assorbito il lavoro. I filtri si valutano sul path live corrente, non sui numeri storici di promozione.