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:
co-authored by
Claude Opus 5
parent
9b5b20e713
commit
f04ae4d9d9
+8
-4
@@ -550,6 +550,14 @@ class TradingEngine:
|
|||||||
self._runtime_state_path = _os2.path.join(
|
self._runtime_state_path = _os2.path.join(
|
||||||
_os2.path.dirname(_os2.path.dirname(_os2.path.abspath(__file__))),
|
_os2.path.dirname(_os2.path.dirname(_os2.path.abspath(__file__))),
|
||||||
"runtime_state.json")
|
"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._load_runtime_state()
|
||||||
self._mql5_files_dir = None # <terminal>\MQL5\Files (lazy, für den Indikator)
|
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"
|
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
|
self._cb_remember = self._cb_limit_pct or 8.0
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
self._cb_limit_pct = 0.0
|
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._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
|
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
|
# Gewinn-mitnehmen (Take-Profit) — symmetrisch zum Notfall-Stop: schließt
|
||||||
|
|||||||
Reference in New Issue
Block a user