rec_outcomes: zweiter Bug gefunden und behoben (timeframe_name)

Der Log verriet die wahre Ursache: 'WaveRecommender' object has no
attribute 'timeframe_name'. rec["tf"] ist leer, also lief der Aufruf
immer in diesen Fallback - AttributeError, im except auf DEBUG
verschluckt.

Der pb_feats-Fix vom 11.08. war damit RICHTIG: er kam an der ersten
Sperre vorbei und legte diese zweite frei. Vorher wurde log_rec_outcome
nie aufgerufen (atr immer 0), deshalb konnte der zweite Bug gar nicht
auftreten.

Richtig ist self._wave_tf_label (die Engine haelt das Label).

Lehre: nach einem Fix nicht nur pruefen, ob die Tabelle jetzt schreibt,
sondern das LOG lesen. Die Zeilen standen seit Stunden da - ich hatte
nur auf INFO gefiltert und daraus geschlossen, es gaebe keine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-12 20:17:12 +02:00
co-authored by Claude Opus 5
parent bf7e382818
commit 19ee379f20
+10 -1
View File
@@ -1669,9 +1669,18 @@ class TradingEngine:
log.info(f"rec_outcome NICHT geschrieben: atr={_atr} px={_px} " log.info(f"rec_outcome NICHT geschrieben: atr={_atr} px={_px} "
f"sig={_sig} (pb_feats={'da' if _ws.get('pb_feats') else 'FEHLT'})") f"sig={_sig} (pb_feats={'da' if _ws.get('pb_feats') else 'FEHLT'})")
if _atr > 0 and _px > 0 and self.history: if _atr > 0 and _px > 0 and self.history:
# ⚠⚠ ZWEITER BUG, gefunden 2026-08-12 im Log: hier stand
# `self.wave.timeframe_name` — das Attribut gibt es NICHT
# (`AttributeError`, im `except` auf DEBUG verschluckt).
# `rec["tf"]` ist leer, also lief es IMMER in den Fallback.
# Der `pb_feats`-Fix vom 11.08. war also richtig — er kam
# an der ersten Sperre vorbei und legte diese zweite frei.
# ⚠ Lehre: nach einem Fix nicht nur „schreibt es jetzt?"
# pruefen, sondern das LOG lesen. Die Zeilen standen seit
# Stunden da; ich hatte nur auf INFO gefiltert.
_rid = self.history.log_rec_outcome( _rid = self.history.log_rec_outcome(
signal=_sig, conf_pct=int(rec.get("conf_pct") or 0), signal=_sig, conf_pct=int(rec.get("conf_pct") or 0),
tf=str(rec.get("tf") or self.wave.timeframe_name or ""), tf=str(rec.get("tf") or self._wave_tf_label or ""),
price=_px, atr=_atr) price=_px, atr=_atr)
log.info(f"rec_outcome #{_rid}: {_sig} @ {_px} atr={_atr}") log.info(f"rec_outcome #{_rid}: {_sig} @ {_px} atr={_atr}")
if _sig in ("LONG", "SHORT", "WARTEN"): if _sig in ("LONG", "SHORT", "WARTEN"):