From 2ae6d7afe6a9eb2d331effaf409f1eace32b62b8 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Thu, 11 Jun 2026 19:18:55 +0000 Subject: [PATCH] fix(report): conta i CHIUSI col flag win del worker (PnL REALE), non col net_return sim Col real-truth ledger net_return resta il numero SIM diagnostico: sui TP fantasma da spike-print testnet (ETH, bars_held=0: lo spike genera il segnale E tocca il TP intrabar; il reale chiude a mercato pagando fee/spread) il report Telegram diceva 26 positivi / 0 negativi mentre il reale era 11/15. Ora collect() usa ev.win (real-truth-aware, fallback nr>0 per eventi storici); i PnL per-motivo erano gia' reali. TODO: nota monitor sul churn da spike (niente filtri anti-spike nei segnali: artefatto testnet, real-truth gia' contabilizza giusto). Co-Authored-By: Claude Fable 5 --- docs/TODO.md | 11 +++++++++++ scripts/portfolios/hourly_report.py | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/TODO.md b/docs/TODO.md index 7ecb140..18b61cc 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -66,6 +66,17 @@ ## Monitoraggio (osservare, non agire subito) +- [ ] **Churn da spike-print testnet su ETH (2026-06-11)**: il feed testnet stampa wick + anomali sulla barra 1h ETH che (a) generano segnali short MR01/MR07 (lo spike È lo + z-score estremo) e (b) "toccano" il TP intrabar della stessa barra → il sim booka + +4% fantasma a bars_held=0, il reale apre+chiude pagando solo fee/spread (~−0.17€ + a giro, 14 giri oggi ≈ −2.3€). Il real-truth ledger contabilizza GIUSTO (per questo + esiste) e il report orario ora conta i win dal flag reale. NON aggiungere filtri + anti-spike ai segnali (= fit su un artefatto del testnet, divergenza dal backtest); + su feed mainnet il fenomeno non esiste. Osservare la frequenza: se il churn cresce, + valutare un gate di QUALITÀ FEED a monte (validazione barre nel data layer, non + nella strategia). + - [ ] **FADE in coda storica (2026-06-11)**: il rolling 120g equal-weight delle 6 fade è al **2° percentile** della propria storia (−1.0% vs p5 +0.4%); il PORT06 complessivo resta in variazione normale (19-28° pct). NESSUN ritocco parametri (= fit sul regime corrente); diff --git a/scripts/portfolios/hourly_report.py b/scripts/portfolios/hourly_report.py index 00ef0bf..709528a 100644 --- a/scripts/portfolios/hourly_report.py +++ b/scripts/portfolios/hourly_report.py @@ -115,7 +115,11 @@ def collect(): nr = ev.get("net_return", 0.0) pnl = ev.get("pnl", 0.0) realized += pnl - closed.append((_short(wid), ev.get("reason", "?"), nr, pnl, nr > 0)) + # win = flag del worker (col real-truth segue il PnL REALE; net_return + # resta il sim diagnostico: sui TP fantasma da spike testnet diceva + # 26/0 mentre il reale era 11/15). Fallback nr>0 per eventi storici. + closed.append((_short(wid), ev.get("reason", "?"), nr, pnl, + bool(ev.get("win", nr > 0)))) if "positions" in st or "weights" in st: continue # multi-asset (TR01/ROT02/TSM01): sezione dedicata if st.get("in_position"):