Slot-Pruefung 5. Durchgang: drei Luecken, eine davon gravierend

Diesmal systematisch statt punktuell: alle Methoden von TradingEngine per AST
klassifiziert, welche Slot-Objekte sie beruehren. 36 Funktionen fassen einen
Slot an, 20 davon NUR Slot 1.

⚠⚠⚠ LUECKE 1 (gravierend): EINE FRISCH GEFUELLTE BRK-POSITION HATTE KEIN
TRAILING. trail_brk.toggle() wurde an genau ZWEI Stellen gerufen - _rebind_brk
(nach Neustart) und toggle_trail (der Knopf). Der frische Pending-Fill kam in
keiner davon vor, und das ist der haeufigste Weg, auf dem eine BRK-Position
entsteht (7 von 8 Trades seit dem Pending-Umbau). Sie lief damit nur mit dem
Broker-SL - exakt die Variante, die backtest_brk_slonly.py verworfen hat (alle
zehn KI enthalten die Null, Trefferquote 40 -> 21 %).
Von aussen unsichtbar: die Position sieht in jeder Anzeige normal aus, ihr
fehlt nur der Schutz. Ironie: _rebind_brk loggt "Trailing wiederhergestellt" -
wiederhergestellt wurde etwas, das fuer einen frischen Fill nie an war.

⚠⚠ LUECKE 2: der Market-Fallback schaltete das FALSCHE Trailing ein. _open rief
pauschal self.trail.toggle(). Zwei Schaeden auf einmal: die BRK-Position bleibt
ungeschuetzt UND auf der manuellen Position wird das Trailing wieder
eingeschaltet, auch wenn der Nutzer es dort bewusst abgeschaltet hatte (nach
einer SL-Handeingabe). Sein handgesetzter Stop waere weitergezogen worden.
Noch nicht eingetreten, weil alle acht Fallback-Versuche des 20.08. schon an
der Order scheiterten.

⚠⚠ LUECKE 3: ein geschlossener BRK-Trade loeste KEINE Telegram-Meldung aus.
_close_notify_pending wird in _check_auto_close armiert, das self.trader liest.
Wiegt schwer, weil seit dem 19.08. NUR NOCH "Trade geschlossen" durch den
Telegram-Filter kommt - der autonome Pfad haette vollstaendig still gehandelt.
Behoben in _check_brk_close_cooldown, das den BRK-Flat-Uebergang ohnehin kennt.

Dazu die Reichweiten-Warnung korrigiert: sie sagte "Broker-SL, Trailing und
Circuit-Breaker greifen weiter" - das Trailing tat es eben NICHT.

ABGESICHERT auf zwei Ebenen, beide mutationsgeprueft:
  tests/test_pending_fill.py +2: der Fill MUSS trail_brk einschalten und DARF
    das Trailing von Slot 1 nicht anfassen. Mutation -> Test faellt.
  Pipeline-Stufe E, Regel E: jeder Pfad, der eine BRK-Position eroeffnet
    (_check_pending_fill, _open), MUSS trail_brk erwaehnen. Mutation -> Exit 1.
Die Test-Fixture bekam dafuer erstmals BEIDE Trailing-Attrappen - ohne die war
der gefaehrlichste Slot-Fehler ueberhaupt nicht pruefbar.

GEPRUEFT UND SAUBER: Circuit-Breaker, close(), _check_open_notify, _price_loop,
_write_levels_file, snapshot, die Fill-Bindung, die _pos_loop-Reihenfolge.

BEWUSST NICHT GEAENDERT (Slot-1-only, aber alle Features AUS): _check_auto_close,
_check_sr_close, _check_adverse15, _check_flip_close, _check_auto_m15, set_sltp,
_check_close_alert. _check_slot_reichweite meldet es, sobald eines eingeschaltet
wird. Zweislot-faehig waere ein Umbau der Notfall-Zustandsmaschine - offen.

⚠⚠ ZWEI CONFIG-WERTE SIND AUF 0 ZURUECKGEDRIFTET (nur berichtet):
  close_notify_min_eur      dokumentiert 50 -> ist 0 (Telegram ganz still)
  auto_emergency_margin_pct dokumentiert  8 -> ist 0
Bei close_notify_min_eur = 0 nuetzt auch Luecke 3 nichts - die Vormerkung haengt
an _close_notify_min > 0. Der Bot meldet derzeit gar keinen Trade-Abschluss.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-20 19:45:05 +02:00
co-authored by Claude Opus 5
parent 437ab56598
commit 0386497a79
5 changed files with 219 additions and 6 deletions
+78
View File
@@ -9106,6 +9106,84 @@ drosselt, ist schlimmer als keine — sie verdeckt genau die Meldung, die zählt
| offene Position kleiner halten | die einzige Variante, die BRK sofort Luft gibt |
⚠ **Nichts davon wurde eigenmächtig gesetzt.**
## ⚠⚠⚠ SLOT-PRÜFUNG, FÜNFTER DURCHGANG — drei Lücken, eine davon gravierend (2026-08-20)
User-Auftrag (zum fünften Mal). Diesmal **systematisch statt punktuell**: alle
Methoden von `TradingEngine` per AST danach klassifiziert, welche Slot-Objekte
sie berühren. **36 Funktionen** fassen einen Slot an; 20 davon **nur Slot 1**.
⚠⚠⚠ **LÜCKE 1 — DIE GRAVIERENDSTE: EINE FRISCH GEFÜLLTE BRK-POSITION HATTE
KEIN TRAILING.** `trail_brk.toggle()` wurde an genau **zwei** Stellen gerufen —
`_rebind_brk` (nach einem Neustart) und `toggle_trail` (der TRAIL-Knopf). Der
**frische Pending-Fill kam in keiner davon vor** — und das ist der häufigste
Weg, auf dem eine BRK-Position überhaupt entsteht (**7 von 8** Trades seit dem
Pending-Umbau vom 05.08.).
Eine so gefüllte Position lief damit **nur mit dem Broker-SL**, also exakt in
der Variante, die `backtest_brk_slonly.py` am 19.08. **verworfen** hat: alle
zehn Konfidenzintervalle enthalten die Null, die Trefferquote fällt **40 →
21 %**, vier von fünf Trades laufen in den vollen 2R-Stop.
**Von aussen unsichtbar** — die Position sieht in jeder Anzeige normal aus,
ihr fehlt nur der Schutz. ⚠ Ironie: `_rebind_brk` loggt „Trailing des BRK-Slots
wiederhergestellt"; wiederhergestellt wurde etwas, das für einen frischen Fill
**nie an war**.
⚠⚠ **LÜCKE 2 — der Market-Fallback schaltete das FALSCHE Trailing ein.** `_open`
rief pauschal `self.trail.toggle(sym)`. Bei `source == "auto_squeeze"` heisst
das: **zwei Schäden auf einmal** — (a) die BRK-Position bleibt ungeschützt und
(b) auf der **manuellen** Position wird das Trailing wieder **eingeschaltet**,
auch wenn der Nutzer es dort gerade bewusst abgeschaltet hatte (etwa nach einer
SL-Handeingabe, die `deactivate()` auslöst). Sein handgesetzter Stop wäre danach
vom Trailing weitergezogen worden.
⚠ Noch nicht eingetreten, weil alle acht Market-Fallback-Versuche des 20.08.
schon an der Order scheiterten (`Lot-Fehler`) — der Pfad bricht davor ab.
⚠⚠ **LÜCKE 3 — ein geschlossener BRK-Trade löste KEINE Telegram-Meldung aus.**
`_close_notify_pending` wird in `_check_auto_close` armiert, und das liest
`self.trader.snapshot()`. Das wiegt schwer, weil seit dem 19.08. **nur noch
„Trade geschlossen"** durch den Telegram-Filter kommt: der autonome Pfad hätte
also **vollständig still** gehandelt — genau der Zustand, den der Befund vom
11.08. („alle neun Auslöser waren aus") beseitigen sollte.
✅ Behoben in `_check_brk_close_cooldown`, das den BRK-Flat-Übergang ohnehin
schon erkennt.
**ALLE DREI BEHOBEN**, dazu die **Reichweiten-Warnung korrigiert**: sie sagte
„Broker-SL, **Trailing** und Circuit-Breaker greifen weiter" — das Trailing tat
es eben NICHT. Die Warnung selbst war also irreführend.
**ABGESICHERT — zwei Ebenen, beide mutationsgeprüft:**
· **`tests/test_pending_fill.py`** + 2 Tests: der Fill **muss** `trail_brk`
einschalten, und er **darf** das Trailing von Slot 1 **nicht** anfassen.
Mutation (Fix zurückgebaut) → Test fällt.
· **Pipeline-Stufe E** (`tools/check_slots.py`, Regel **E**): jeder Pfad, der
eine BRK-Position eröffnet (`_check_pending_fill`, `_open`), **muss**
`trail_brk` erwähnen. Mutation → **Exit 1**.
⚠ Dafür bekam die Test-Fixture erstmals **beide** Trailing-Attrappen — ohne die
war der gefährlichste Slot-Fehler überhaupt nicht prüfbar.
**GEPRÜFT UND SAUBER:** Circuit-Breaker (schliesst beide), `close()` (beide),
`_check_open_notify` (beide), `_price_loop` (füttert beide), `_write_levels_file`
(Marker beider Slots), `snapshot` (beide), `_check_pending_fill` (Bindung
korrekt), `_pos_loop`-Reihenfolge (Fill **vor** Pending-Manager).
⚠ **BEWUSST NICHT GEÄNDERT — Slot-1-only, aber alle Features AUS:**
`_check_auto_close` (Notfall-Stop · Gewinn-Ziel · Trail-Restore),
`_check_sr_close`, `_check_adverse15`, `_check_flip_close`, `_check_auto_m15`,
`set_sltp` (die SL/TP-Felder der Trade-Leiste wirken nur auf Slot 1),
`_check_close_alert`. `_check_slot_reichweite` meldet das im Log, sobald eines
davon eingeschaltet wird und gleichzeitig eine BRK-Position läuft. Sie
zweislot-fähig zu machen ist ein Umbau der Notfall-Zustandsmaschine
(`_emergency_*_ticket`), kein Einzeiler — **offen, benannt**.
⚠⚠ **ZWEI CONFIG-WERTE SIND AUF 0 ZURÜCKGEDRIFTET** (nur berichtet, nicht
geändert — Sizing/Alarm sind User-Entscheidungen):
| Schlüssel | dokumentiert | ist |
|---|---|---|
| `close_notify_min_eur` | **50** (11.08.) | **0 = Telegram ganz still** |
| `auto_emergency_margin_pct` | **8** (07.08.) | **0** |
⚠ Bei `close_notify_min_eur = 0` nützt auch die soeben geschlossene Lücke 3
nichts: die Vormerkung hängt an `_close_notify_min > 0`. **Der Bot meldet
derzeit gar keinen Trade-Abschluss.**
## ⚠⚠⚠ P(break) IST LIVE **INVERTIERT** — und es steuert echtes Geld (2026-08-19)
Die fällige Messung ist entscheidbar geworden: **n=530 entkoppelt** gegen die