Gesamtpruefung 2026-08-11: drei Defekte behoben
Zweiter vollstaendiger Durchlauf nach docs/review-prompt.md.
BEFUND 1: rec_outcomes war seit dem Einbau (06.08.) still tot - 0
Zeilen in 5 Tagen. _run_analysis las s.get("pb_feats"), aber s ist der
MT5Data-Snapshot; pb_feats lebt im Wave-Snapshot. _atr also immer 0,0
und die Schreibbedingung nie erfuellt. Kein NameError (ruff sieht
nichts), und das umgebende except loggt auf DEBUG. Aufgefallen nur,
weil die Tabelle mit 0 Zeilen neben ihren Schwestern stand.
Generalisiert als measurement_reminder.telemetrie_puls(): jede
Telemetrie-Tabelle muss einen Puls haben. Erster Lauf meldet genau
diesen Fund, alle uebrigen gruen.
BEFUND 2: der Divergenz-Waechter war selbst driftend. Abschnitt A
verglich gegen 43 % WARTEN - seit 05.08. ausdruecklich ungueltig (das
misst _build allein); richtig sind 80,5 %. Und entry_room galt als
"live-only", obwohl es seit 04./05.08. modelliert wird.
A: +50,8 Pp Warnung -> +13,3 Pp OK. B: 63,9 % -> 5,0 %.
BEFUND 3: P(break) ist wieder kalibriert (Delta -1,7 Pp nach +14,3 Pp
am 07.08.) - stuetzt den Schluss, dass die gewanderte Basisrate ein
Zeitraum-Effekt war.
Sauber: alle Standardpruefungen, 0 fehlende Frontend-IDs, mt5_lock,
Broker-Zeit, Race-Klasse. Performance: Snapshot-Median 15,9 ms, alle
heissen Abfragen ueber Index - keine Optimierung noetig.
Kein toter Code geloescht: die vermeintlich verwaisten Snapshot-Felder
sind Diagnose-Oberflaeche (vier davon heute zur Deploy-Verifikation
benutzt).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a866c9cec7
commit
dca3c11bbd
+19
-2
@@ -1743,8 +1743,25 @@ class TradingEngine:
|
||||
try:
|
||||
_sig = rec.get("signal")
|
||||
if _sig in ("LONG", "SHORT") and _sig != getattr(self, "_rec_epi_sig", None):
|
||||
_atr = float((s.get("pb_feats") or {}).get("atr") or 0.0)
|
||||
_px = float((self.data.snapshot() or {}).get("bid") or 0.0)
|
||||
# ⚠⚠ BUG BEHOBEN 2026-08-11 (Review-Durchgang 4): hier stand
|
||||
# `s.get("pb_feats")`. `s` ist aber der **MT5Data**-Snapshot
|
||||
# (Preis/Trend/Konto) — `pb_feats` lebt im **Wave**-Snapshot.
|
||||
# `s.get(...)` lieferte damit IMMER None → `_atr = 0.0` → die
|
||||
# Bedingung `_atr > 0` war NIE erfüllt → `rec_outcomes` blieb
|
||||
# seit dem Einbau (06.08.) bei **0 Zeilen**, also 5 Tage lang
|
||||
# still tot. Die Selbst-Kalibrierung der Empfehlung hat in
|
||||
# dieser Zeit nichts gemessen.
|
||||
# ⚠ Warum es keine Prüfung fing: es ist KEIN NameError (ruff F821
|
||||
# sieht nichts), sondern ein falsches dict — syntaktisch
|
||||
# einwandfrei. Und das umgebende `except` loggt nur auf DEBUG,
|
||||
# der Logger steht auf INFO. Genau die Fehlerklasse, vor der
|
||||
# der `wave_snap`-Fallstrick vom 04.08. schon einmal warnte.
|
||||
# ✅ Aufgefallen ist es NUR, weil die Tabelle in Durchgang 4 mit
|
||||
# 0 Zeilen neben ihren Schwestern stand (m15_states 3.143,
|
||||
# cone_checks 263, pbreak_predictions 3.775).
|
||||
_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)
|
||||
if _atr > 0 and _px > 0 and self.history:
|
||||
self.history.log_rec_outcome(
|
||||
signal=_sig, conf_pct=int(rec.get("conf_pct") or 0),
|
||||
|
||||
Reference in New Issue
Block a user