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 <noreply@anthropic.com>
This commit is contained in:
@@ -66,6 +66,17 @@
|
|||||||
|
|
||||||
## Monitoraggio (osservare, non agire subito)
|
## 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
|
- [ ] **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
|
**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);
|
in variazione normale (19-28° pct). NESSUN ritocco parametri (= fit sul regime corrente);
|
||||||
|
|||||||
@@ -115,7 +115,11 @@ def collect():
|
|||||||
nr = ev.get("net_return", 0.0)
|
nr = ev.get("net_return", 0.0)
|
||||||
pnl = ev.get("pnl", 0.0)
|
pnl = ev.get("pnl", 0.0)
|
||||||
realized += pnl
|
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:
|
if "positions" in st or "weights" in st:
|
||||||
continue # multi-asset (TR01/ROT02/TSM01): sezione dedicata
|
continue # multi-asset (TR01/ROT02/TSM01): sezione dedicata
|
||||||
if st.get("in_position"):
|
if st.get("in_position"):
|
||||||
|
|||||||
Reference in New Issue
Block a user