Vierter Slot-Durchgang: Chart-Marker deckte den BRK-Slot nicht ab

User-Auftrag (vierte Runde). Diesmal die Bereiche AUSSERHALB von engine.py
geprueft - core/trader.py, server.py, der MQL5-Export und die
Zustandspersistenz.

⑦ BEHOBEN - Trade-Marker im MT5-Chart (`TR;`-Zeilen) lasen nur
   `self.trader.snapshot()`. Eine offene BRK-Position blieb im Chart also
   UNMARKIERT: die hellgruene Umrandung der Einstiegskerze fehlte. Kosmetisch,
   aber dieselbe Klasse wie Deployment-Drift Fall 8 - nicht die Strategie
   driftet, sondern ihre Beobachtbarkeit. Wer den Chart ansieht, soll sehen,
   wo der Bot eingestiegen ist. Jetzt ueber beide Slots.

DREI ENTLASTUNGEN in diesem Durchgang (geprueft, NICHT vermutet):
  - core/trader.py hat als einzige Klassen-Variable `_STEUER_TTL_S` (eine
    Konstante); der Steuer-Cache liegt als `self._steuer_cache` INSTANZWEISE
    vor. Modul-Globale sind nur die zwei Logger. Die beiden TradeManager teilen
    also KEINEN veraenderlichen Zustand - zusammen mit dem Trailing-Befund aus
    Durchgang 3 ist damit beides sauber.
  - server.py routet ueber `eng.close` (deckt seit heute beide Slots),
    `eng.toggle_trail` (ebenfalls) und `eng.set_sltp`.
  - `emergency_state.json` ist per-Ticket und betrifft nur Slot 1 - die drei
    Notfall-Modi stehen ohnehin auf 0, und der Reichweiten-Waechter meldet es,
    falls einer eingeschaltet wird, waehrend BRK eine Position haelt.

⚠ WEITER OFFEN, unveraendert und bewusst: `set_sltp()` (nur Slot 1, braucht eine
UI-Entscheidung) und `_check_auto_m15`, das `_slot()` umgeht. Neu dazu:
`_check_close_alert` (Flip-Alarm) liest ebenfalls nur Slot 1 - das ist ein
Hinweis, keine Schutzhandlung, und der Flip-Close ist aus.

91 Tests gruen, Pipeline inkl. Stufe E gruen, Deploy verifiziert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-20 09:15:48 +02:00
co-authored by Claude Opus 5
parent fbc1e96b07
commit 14b3fd4f64
+8 -1
View File
@@ -3498,7 +3498,14 @@ class TradingEngine:
try:
boff = self.trader._broker_offset_s()
marks: list[tuple[str, int]] = []
ps = self.trader.snapshot()
# ⚠⚠ BEIDE Slots markieren (Fix 2026-08-20). Vorher nur
# `self.trader` — eine offene BRK-Position blieb im
# MT5-Chart UNMARKIERT. Dieselbe Klasse wie
# Deployment-Drift Fall 8: nicht die Strategie driftet,
# sondern ihre Beobachtbarkeit. Wer den Chart ansieht,
# soll sehen, wo der Bot eingestiegen ist.
for _tr in (self.trader, self.trader_brk):
ps = _tr.snapshot()
if ps.get("ticket") and ps.get("open_time"):
marks.append(("O", int(float(ps["open_time"]) + boff)))
for t in (self.history.last_closed_trades(_TRADE_MARKS) or []):