rec_outcomes: Fix hat nicht gewirkt - jetzt instrumentiert

Korrektur meiner Behauptung vom 11.08. Nach dem Neustart um 22:45 gab
es bis 09:00 mindestens 10 gerichtete Episoden, und rec_outcomes stand
weiter bei 0 Zeilen. Die Praemisse (falsches dict: s.get("pb_feats")
auf dem MT5Data- statt dem Wave-Snapshot) ist live belegt - die
WIRKUNG des Fixes war es nicht. Ich habe "behoben" geschrieben, ohne
sie zu pruefen.

Warum es von aussen nicht feststellbar war: der except-Zweig loggte
auf DEBUG, der Logger steht auf INFO. Genau die Blindheit, die den
Ausfall fuenf Tage getragen hat.

Jetzt melden sich BEIDE Zweige sichtbar:
- Erfolg: "rec_outcome #<id>: LONG @ <px> atr=<atr>" (INFO)
- Fehlschlag: "rec_outcome NICHT geschrieben: atr=.. px=.. pb_feats=.."
- Exception: WARNING statt DEBUG, mit repr

Es feuert nur bei einem echten Richtungswechsel, also selten - kein
Laerm. Ursache offen bis zur naechsten Episode.

Der Telemetrie-Puls ist der Grund, dass die ausbleibende Wirkung
ueberhaupt auffiel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-12 09:21:50 +02:00
co-authored by Claude Opus 5
parent b18b594639
commit b2a1e35f5e
2 changed files with 28 additions and 2 deletions
+16 -2
View File
@@ -1762,16 +1762,30 @@ class TradingEngine:
_ws = self.wave.snapshot() or {}
_atr = float((_ws.get("pb_feats") or {}).get("atr") or 0.0)
_px = float(s.get("bid") or 0.0)
# ⚠⚠ DIAGNOSE (2026-08-12): der Fix vom 11.08. hat NICHT gewirkt —
# nach 10 Episoden standen weiter 0 Zeilen. Warum, war von
# aussen nicht feststellbar, weil der Fehlschlag NUR auf DEBUG
# ging und der Logger auf INFO steht. Genau die Blindheit, die
# den Ausfall fuenf Tage getragen hat. Beide Zweige melden
# sich jetzt auf INFO — es feuert nur bei einem echten
# Richtungswechsel, also selten.
if not (_atr > 0 and _px > 0):
log.info(f"rec_outcome NICHT geschrieben: atr={_atr} px={_px} "
f"sig={_sig} (pb_feats={'da' if _ws.get('pb_feats') else 'FEHLT'})")
if _atr > 0 and _px > 0 and self.history:
self.history.log_rec_outcome(
_rid = self.history.log_rec_outcome(
signal=_sig, conf_pct=int(rec.get("conf_pct") or 0),
tf=str(rec.get("tf") or self.wave.timeframe_name or ""),
price=_px, atr=_atr)
log.info(f"rec_outcome #{_rid}: {_sig} @ {_px} atr={_atr}")
if _sig in ("LONG", "SHORT", "WARTEN"):
# WARTEN re-armt: die naechste Richtung ist eine NEUE Episode.
self._rec_epi_sig = _sig if _sig != "WARTEN" else None
except Exception as e:
log.debug(f"log_rec_outcome: {e}")
# ⚠ war `log.debug` — damit blieb ein Fehlschlag unsichtbar, obwohl
# der Logger auf INFO steht. Die Ausnahme feuert nur bei einem
# Richtungswechsel, also selten; WARNING ist hier kein Lärm.
log.warning(f"log_rec_outcome: {e!r}")
# Verdict-Stimmen-Logging (2026-07-24, Idee 2b): Modul-Votes 1×/min in die
# DB (`verdict_votes`), damit die UNBELEGTEN Stimmen (KI-Copilot, Elliott)