Telegram: Close-Benachrichtigung ab Schwelle + Auto-Squeeze wieder an

Diagnose zu "ich bekomme keine Telegram-Nachrichten mehr": der Kanal
war intakt (getMe/getChat ok, Testnachricht zugestellt, keine einzige
Fehlermeldung im Log, Tagesreport kam taeglich). Ursache war, dass
ALLE NEUN sendenden Ausloeser aus waren - Auto-Squeeze (ueber
runtime_state.json, unbemerkt), Auto-Signal, S/R-Close, Flip-Close,
15-Minuten-Regel, Circuit-Breaker und die drei Notfall-Stop-Modi.
Jede Abschaltung war fuer sich begruendet; zusammen ergaben sie eine
Stille, die niemand beschlossen hatte.

Gebaut: engine._check_close_notify - Telegram bei JEDEM geschlossenen
Trade ab close_notify_min_eur (50, 0 = aus). Haengt an keiner
Automatik, feuert also auch bei manuellem Close und Broker-SL. Der
-87-EUR-SL vom 10.08. kam bisher wortlos.

Schwelle aus den Daten: bei ~17 Trades/Tag rund 2,4-6,1 Meldungen/Tag,
erfasst 54-80 % des bewegten Geldes. Absolute Euro-Schwelle altert mit
der Positionsgroesse - bewusst so, ein Mensch denkt in Euro.

Der Unterschied zum frueher entfernten Push ist die Schwelle, und sie
liegt in der Engine statt in der DB-Schicht. Vorgemerkt statt sofort
gesendet, weil der Flat-Zustand dem DB-Schreiber einen Tick voraus
sein kann (exit_time IS NULL heisst "noch nicht fertig").

- tests/test_close_notify.py: 7 Tests, Netz abgefangen
- Mutationsprobe in beide kritischen Zweige, beide gefangen
- Snapshot-Feld close_notify_min (belegt die Schwelle im Prozess)
- Auto-Squeeze wieder AN ueber /api/autosqueeze (ini + runtime_state)
- v=161

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-11 09:22:41 +02:00
co-authored by Claude Opus 5
parent 35e91474e8
commit 4eb92bf192
5 changed files with 278 additions and 2 deletions
+45
View File
@@ -3139,6 +3139,51 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
nächster Tick versucht erneut). Eigener `send_telegram`, **nicht** vom
`pnl>0`-Gate (`history`) noch vom 5-Min-Cooldown betroffen.
## ⚠⚠ TELEGRAM WAR NICHT KAPUTT — ES SENDETE NUR NICHTS MEHR (2026-08-11)
User: „ich bekomme keine Telegram-Nachrichten mehr."
**Kanal nachweislich intakt:** `getMe``@AH_Oiltrader_bot`, `getChat` → privat
„Axel", **Testnachricht zugestellt** (message_id 1764). Im gesamten Log **keine
einzige** Fehlermeldung; der Tagesreport kam täglich (08.11.08. je 07:3x, alle
`ok`). Letzte Nicht-Report-Nachricht **07.08. 22:49**, davor am 06.08. 19:3319:58
im 5-Minuten-Takt = die Close-Alarm-Sperre.
⚠⚠ **DIE URSACHE: ALLE NEUN AUSLÖSER WAREN AUS** — Auto-Squeeze (über
`runtime_state.json`, unbemerkt), Auto-Signal, S/R-Auto-Close, Flip-Close,
15-Minuten-Regel, Circuit-Breaker und die **drei** Notfall-Stop-Modi. **Jede
Abschaltung war für sich begründet und gemessen; zusammen ergaben sie eine
Stille, die niemand beschlossen hatte.** Übrig blieb genau ein Live-Trigger, der
🔔 Close-Alarm — und der braucht eine **gerichtete** Empfehlung, die es nur in
**5 %** der Zeit gibt (letzte 7 Tage: 508 von 9.976 Zeilen).
⚠ Dazu kam: der Trade-Abschluss-Push war früher bewusst entfernt worden. Deshalb
kam auch der **87-€-SL vom 10.08. wortlos**.
✅ **GEBAUT: Close-Benachrichtigung `engine._check_close_notify`**
(`[telegram] close_notify_min_eur = 50`, 0 = aus; Backup
`oil_widget_config.ini.bak-2026-08-11-closenotify`). Feuert bei **jedem**
geschlossenen Trade ab der Schwelle — **hängt an KEINER Automatik**, also auch
bei manuellem Close und Broker-SL. Meldet Betrag, Richtung, Lots, Ein-/Ausstieg,
**Schließgrund** und Dauer. Snapshot-Feld `close_notify_min`.
**Schwelle aus den Daten gewählt, nicht geraten:** bei ~17 Trades/Tag liefert
50 € rund **2,46,1 Meldungen/Tag** und erfasst **5480 %** des bewegten Geldes.
**Eine absolute Euro-Schwelle altert mit der Positionsgröße** — Median |P&L|
über 30 Tage 14,65 €, über die letzten 7 Tage 35,80 €. Bei wachsendem Konto
kommen mehr Meldungen. Bewusst so: ein Mensch denkt in Euro.
⚠⚠ **Der Unterschied zum entfernten Push ist die SCHWELLE** (der alte feuerte bei
jedem Close), und sie liegt in der **Engine**, nicht in der DB-Schicht.
**Vorgemerkt statt sofort gesendet:** der Flat-Zustand kommt aus
`trader.snapshot()` und ist dem DB-Schreiber gelegentlich einen Tick voraus —
`exit_time IS NULL` heisst „noch nicht fertig", NICHT „kein Trade". Ohne diese
Unterscheidung meldete es einen Close **ohne P&L**. Aufgabe nach ~30 s.
**7 Tests** (`tests/test_close_notify.py`, Netz abgefangen) + **Mutationsprobe
in beide kritischen Zweige**: Schwelle entfernt → `test_unter_schwelle` fällt ·
Retry-Fall als „kein Trade" behandelt → `test_db_noch_nicht_fertig` fällt.
**AUTO-SQUEEZE WIEDER AN** (User-Entscheidung 2026-08-11) — über den offiziellen
Toggle `POST /api/autosqueeze`, damit ini UND `runtime_state.json` übereinstimmen
(`{"ok":true,"enabled":true}`). Der Config-Wächter meldet ihn seitdem nicht mehr.
⚠ Damit läuft die **B5-Abbruchregel** weiter (11/20 Trades) — ohne laufenden
Trader wäre sie nie abgelaufen. Latte unverändert: Verhältnis < 1,0 ODER PF < 1.
## Mobile-UI (web/) & Alarme
- Aufbau: **Tab-Navigation ganz oben** (sticky: Dashboard/**SIG Live**/**SIG Anzeige**/Logs/Statistik/News),
darunter Header.