Close-Knopf je Slot, direkt vor der jeweiligen G/V-Anzeige

User-Wunsch. Zwei Slots heissen zwei Close-Moeglichkeiten - bisher gab es nur
den grossen CLOSE-Knopf, und der schliesst seit heute BEIDE. Neu je ein kleines
✕ vor "G/V" (Slot 1) und vor "G/V · BRK", rechtsbuendig gespiegelt.

BACKEND: `engine.close(slot=None)` - None/"" = beide (Verhalten des grossen
Knopfs, unveraendert), "main" = nur Slot 1, "brk" = nur der Breakout-Autotrader.
`POST /api/order {"side":"close","slot":"brk"}` reicht ihn durch; ohne `slot`
ist das Verhalten bitgleich zu vorher.

⚠ Sicherheitsabfrage NUR im Minus - dieselbe Regel wie beim grossen Knopf: im
Plus direkt schliessen, im Minus nachfragen. Hartes Blockieren ist im Projekt
verworfen, aber ein versehentlicher Klick soll kein Geld kosten.

⚠⚠ EIGENER FEHLER auf dem Weg, gefunden bevor er live ging: mein erster Entwurf
las den P&L aus `_letzterSnap` - eine Variable, die es NICHT gab. Das ist exakt
der ReferenceError, der am 19.08. den halben Render abgeschossen hat, nur
diesmal im Klick-Pfad (er waere erst beim Druecken geknallt, also genau dann,
wenn man schliessen will). Behoben durch `letzterSnap`, das `_applySnapshot`
jetzt fuehrt - die Variable fehlte im Projekt tatsaechlich, Klick-Handler hatten
bisher keinen Zugriff auf den aktuellen Zustand.

Verifiziert: 2 Knoepfe im ausgelieferten HTML, span/div/button ausgeglichen,
keine doppelten IDs, node --check, Render-Probe, 91 Tests und die volle Pipeline
gruen. Deploy verifiziert (v=199).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-20 11:58:04 +02:00
co-authored by Claude Opus 5
parent 14b3fd4f64
commit d881636e1b
5 changed files with 73 additions and 7 deletions
+11 -2
View File
@@ -2960,7 +2960,7 @@ class TradingEngine:
self.trail.toggle(sym)
return None
def close(self) -> str | None:
def close(self, slot: str | None = None) -> str | None:
"""Schliesst die offene Position — BEIDE Slots (Fix 2026-08-20).
Bis heute lief das nur auf `self.trader`. Hielt der BRK-Slot eine
@@ -2973,7 +2973,16 @@ class TradingEngine:
Sind beide offen, werden beide geschlossen und Fehler gesammelt gemeldet.
"""
fehler = []
for tr, name in ((self.trader, "Slot 1"), (self.trader_brk, "BRK")):
# ⚠ `slot` waehlt gezielt: None/"" = BEIDE (Verhalten des CLOSE-Knopfs in
# der Aktionsleiste), "main" = nur Slot 1, "brk" = nur der
# Breakout-Autotrader. Die zwei kleinen Knoepfe an den G/V-Anzeigen
# nutzen die gezielte Form (User-Wunsch 2026-08-20).
paare = [(self.trader, "Slot 1"), (self.trader_brk, "BRK")]
if slot == "main":
paare = paare[:1]
elif slot == "brk":
paare = paare[1:]
for tr, name in paare:
try:
if not (tr.snapshot() or {}).get("ticket"):
continue