Fix: Einsatz je Pfad ueberlebte keinen Neustart (Reihenfolge-Fehler)

User: "Einsatz BRK % / Einsatz M15 % hat keine Auswirkung, die Eingabe bleibt
wirkungslos, in den Feldern erscheint 'global'".

URSACHE - mein Fehler beim Bau: die Default-Initialisierung
(self._margin_brk = 0.0) stand in Zeile 631, `_load_runtime_state()` laeuft aber
in Zeile 553. Der geladene Wert wurde also unmittelbar danach mit 0
ueberschrieben. Die Eingabe WIRKTE (POST kam an, Wert stand im Snapshot, wurde
auf Platte geschrieben) - sie war nach dem naechsten Neustart weg, und das Feld
zeigte wieder den Platzhalter "global". Real am 19.08.: BRK 10 / M15 85 gesetzt,
nach dem Deploy beide 0.

Behoben: Defaults stehen jetzt VOR dem Laden. Reihenfolge ist immer
Default setzen -> runtime_state laedt darueber.

⚠ EIGENER FEHLALARM beim Verifizieren, dokumentiert weil er lehrreich ist: mein
Persistenz-Test setzte 55/30, und nach dem Neustart standen 85/10 - ich habe das
als "VERLOREN" und sogar als Vertauschung gelesen. Die Logzeitstempel zeigen
etwas anderes: um 20:06:04 und 20:06:06 hat der Browser des Users zwei weitere
POSTs geschickt (85/30, dann 85/10), waehrend mein Test lief. Persistiert wurde
also korrekt der ZULETZT gesetzte Wert. Lehre: bei einer Live-Verifikation gegen
ein System, das der Nutzer gleichzeitig bedient, gehoert die Logspur mitgelesen
- sonst hält man fremde Eingaben fuer einen Defekt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 20:07:33 +02:00
co-authored by Claude Opus 5
parent 9b5b20e713
commit f04ae4d9d9
+8 -4
View File
@@ -550,6 +550,14 @@ class TradingEngine:
self._runtime_state_path = _os2.path.join(
_os2.path.dirname(_os2.path.dirname(_os2.path.abspath(__file__))),
"runtime_state.json")
# ⚠⚠ Einsatz je autonomem Pfad MUSS VOR `_load_runtime_state()` stehen.
# Der erste Bau setzte die Defaults DANACH (Z. 631 gegen Z. 553) und
# ueberschrieb damit jeden gespeicherten Wert mit 0 — die Eingabe im
# Dashboard wirkte, war aber nach dem naechsten Neustart weg (real am
# 19.08.: BRK 10 / M15 85 gesetzt, nach dem Deploy beide 0).
# Reihenfolge ist immer: Default setzen -> runtime_state laedt darueber.
self._margin_brk = 0.0
self._margin_m15 = 0.0
self._load_runtime_state()
self._mql5_files_dir = None # <terminal>\MQL5\Files (lazy, für den Indikator)
self._export_trade_marks = self.cfg["trading"].get("export_trade_marks", "false").lower() == "true"
@@ -626,10 +634,6 @@ class TradingEngine:
self._cb_remember = self._cb_limit_pct or 8.0
except (TypeError, ValueError):
self._cb_limit_pct = 0.0
# Einsatz je autonomem Pfad (0 = globaler `margin_buffer_pct`).
# Wird von `runtime_state.json` ueberschrieben, falls dort gesetzt.
self._margin_brk = 0.0
self._margin_m15 = 0.0
self._circuit_tripped_date = None # Berlin-Datum, an dem der Breaker griff
self._cb_realized = (0.0, 0.0) # (ts, realisierter Tages-P&L) gecacht ~30 s
# Gewinn-mitnehmen (Take-Profit) — symmetrisch zum Notfall-Stop: schließt