diff --git a/CLAUDE.md b/CLAUDE.md index eb0ed93..5621c83 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7434,6 +7434,51 @@ vollständig. ⚠ **Verifikation der Zustellung steht aus** — sie erfolgt mit dem Report am nächsten Morgen um 07:30. Die Bausteine sind einzeln live gegengeprüft. +## ✅ UI AUFGERÄUMT, TELEGRAM AUF CLOSES, ZWEI SCHALTER (User 2026-08-19, v=178) + +**(1) Einsatz-Felder entfernt.** ⚠ Backend bleibt vollständig; die Werte leben +in `runtime_state.json` UND der ini (40 %). **Folge: ohne UI ändert man den +Prozentsatz nur über die ini + Neustart.** + +**(2) BRK-Schalter raus, STOPP (Circuit-Breaker) rein.** +⚠⚠ **Bewusster Tausch mit Konsequenz:** der An/Aus-Schalter des **autonomen** +Pfads ist aus der App verschwunden — BRK läuft, stoppen lässt er sich nur noch +per `POST /api/autosqueeze` oder ini+Neustart. Sein **Zustand** bleibt in der +Breakout-Karte sichtbar. Dafür ist die **Notbremse** bedienbar, die am 17.08. +real ausgelöst hat. `set_circuit_breaker` + `POST /api/circuit` + Persistenz +(`cb_limit_pct`/`cb_remember`) — ⚠ der Breaker hat keinen eigenen Bool, er lebt +in `_cb_limit_pct` (0 = aus); **ohne das Gedächtnis wäre die Prozentzahl nach +einmal Ausschalten für immer weg.** + +**(3) S/R-Auto-Close jetzt auch in der Aktionsleiste** (`#btn-sr`). Den Schalter +gab es nur in der **Trade-Leiste** — die ist aber nur bei OFFENER Position +sichtbar, also genau dann nicht, wenn man ihn **vor** einem Trade setzen will. +Der alte Knopf bleibt; beide lesen `auto_sr_close` aus demselben Snapshot und +können nicht auseinanderlaufen. + +**(4) Telegram nur noch bei geschlossenen Trades.** +✅ **EINE Filterstelle statt 17 Einzeleingriffe:** `send_telegram` ist jetzt ein +Filter vor `_send_telegram_roh`, `_TG_ERLAUBT = ("Trade geschlossen",)`. Alle +Sender bleiben stehen. **Umkehren = Liste erweitern.** Rückgabe `False` für +Unterdrücktes, damit der Report-Marker nichts fälschlich als zugestellt bucht. +⚠ **Tages-/Wochenreport werden nur auf dem TELEGRAM-Weg still — die E-Mail +läuft weiter.** +⚠⚠ **Eine Ausnahme mit Bypass:** „ FEHLGESCHLAGEN“ beim Notfall-Close +geht am Gate vorbei — dort ist die Position **NICHT** zu und es braucht eine +Handeingabe. Die erfolgreichen Closes von Breaker, Notfall-Stop und S/R meldet +ohnehin `_check_close_notify`; es geht also keine *Schliessung* verloren. + +⚠⚠ **ZWEITER TOTALVERLUST DERSELBEN URSACHE AM SELBEN TAG — diesmal CLAUDE.md.** +Ein Emoji, geschrieben als ZWEI getrennte \u-Escapes, erzeugt in Python +**lone surrogates**, die sich nicht nach UTF-8 kodieren lassen — und +`io.open(p,"w")` kürzt die Datei **vor** dem Schreiben. Ergebnis: **0 Bytes**, +und der Commit ging **grün durch** (der Hook prüft Python und JS, nicht die +Doku) und wurde gepusht. Wiederhergestellt aus `HEAD~1`. +**Regel, ab hier ausnahmslos:** (a) Emoji nie als getrennte \u-Surrogate — +Zeichen direkt oder gar nicht; (b) IMMER erst nach `.tmp`, Grösse gegen das +Original prüfen, dann `os.replace`; (c) **eine Syntaxprüfung ersetzt die +Grössenprüfung nicht** — eine LEERE Datei besteht `node --check` und jeden Hook. + ## ✅✅ EINSATZ 95 % → 40 % + BREAKOUT-KARTE AKTIV (User 2026-08-19, v=176) Nach dem Schliessen der offenen Position ausgeführt (User: „trade is closed“). diff --git a/web/app.js b/web/app.js index 7353808..329ce6a 100644 --- a/web/app.js +++ b/web/app.js @@ -1148,6 +1148,13 @@ function render(d) { // Auto-Squeeze-ZUSTAND bleibt in der Breakout-Karte sichtbar -- nur sein // Schalter ist weg (jetzt POST-Endpunkt bzw. ini). const cb = d.circuit_breaker || {}; + const srb = $streng("btn-sr"); + if (srb) { + srb.classList.toggle("on", !!d.auto_sr_close); + srb.title = d.auto_sr_close + ? "S/R-Auto-Close AN: schliesst am Level, wenn P(break) unter der Schwelle liegt." + : "S/R-Auto-Close AUS -- der Bot schliesst nicht mehr selbst am Level."; + } const cbb = $streng("btn-cb"); if (cbb) { cbb.classList.toggle("on", !!cb.enabled); @@ -1730,6 +1737,7 @@ _updateMuteBtn(); // Toggle-Buttons (AUTO/TRAIL/S-R-Close) — ohne Bestätigung $("btn-cb").onclick = () => toggle("api/circuit", "Tagesverlust-Stopp"); +$("btn-sr").onclick = () => toggle("api/srclose", "S/R-Auto-Close"); // (🎯 SIG entfernt 2026-08-12 — s. renderOrderButtons oben) $("btn-trail").onclick = () => toggle("api/trail", "Trailing"); $("srclose-btn").onclick = () => toggle("api/srclose", "Auto-S/R-Close"); diff --git a/web/index.html b/web/index.html index 6e91eb0..876fdd0 100644 --- a/web/index.html +++ b/web/index.html @@ -12,7 +12,7 @@ ⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard und muss offline funktionieren. --> - + @@ -348,6 +348,13 @@ + + @@ -369,6 +376,6 @@ - +