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
+6 -4
View File
@@ -12,7 +12,7 @@
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
und muss offline funktionieren. -->
<link rel="stylesheet" href="pico.min.css?v=1">
<link rel="stylesheet" href="style.css?v=198">
<link rel="stylesheet" href="style.css?v=199">
</head>
<body>
<!-- Modul-Menü (ganz oben) -->
@@ -53,10 +53,12 @@
<div class="px" id="px-hl"><label title="Roher Kurs des Hyperliquid-Öl-Perps — läuft 24/7, auch wenn Pepperstone geschlossen ist. Anderer Kontrakt, deshalb nicht identisch; der Tooltip am Wert nennt die umgerechnete Entsprechung.">HYPERLIQUID KURS</label><span id="hdr-hl"></span></div>
<div class="px px-split" title="Links: Gewinn/Verlust der Position in Slot 1 (manuelle und M15-Trades). Rechts: die Position des Breakout-Autotraders, der seit dem Zwei-Slot-Umbau vom 19.08. einen EIGENEN Slot hat. Beide NETTO nach Quellensteuer; bei geschlossenem Markt eine Schaetzung auf Basis des Hyperliquid-Kurses (mit ≈ markiert). Die SUMME beider Slots steht im TAG P/L oben.">
<div class="px-half">
<label>G/V</label><span id="hdr-pnl"></span>
<label>G/V</label>
<span class="px-line"><button class="px-close" id="close-main" title="Nur die Position in Slot 1 schliessen (manuelle und M15-Trades). ⚠ Der grosse CLOSE-Knopf unten schliesst BEIDE Slots."></button><span id="hdr-pnl"></span></span>
</div>
<div class="px-half rechts">
<label>G/V · BRK</label><span id="hdr-pnl-brk"></span>
<label>G/V · BRK</label>
<span class="px-line"><button class="px-close" id="close-brk" title="Nur die Position des Breakout-Autotraders schliessen. ⚠ Der grosse CLOSE-Knopf unten schliesst BEIDE Slots."></button><span id="hdr-pnl-brk"></span></span>
</div>
</div>
</div>
@@ -416,6 +418,6 @@
</div>
<div id="toast" class="toast hidden"></div>
<script src="app.js?v=198"></script>
<script src="app.js?v=199"></script>
</body>
</html>