Pending-Pfad fuer SIG: ruhende Stop-Order am Bestaetigungs-Level

SIG laeuft damit auf der gemessen positiven Variante (OeR +0,35/+0,32, PF 2,2)
statt auf der Market-Order (-0,09/-0,11).

Der heikelste Punkt war nicht die Order, sondern die Kollision beider Pfade:
trader.pending_orders() liefert ALLE magic-gleichen Orders, zwei getrennte
Manager haetten sich gegenseitig storniert - sporadisch und im Log kaum
erkennbar. Deshalb EIN gemeinsamer Ziel-Zustand (engine._pending_ziel), der
Manager gleicht nur noch ab. Vorrang Squeeze > Signal (unabhaengig validiert,
selten; das Signal feuert dauernd, es gibt einen Positions-Slot).

Zwei additive Ergaenzungen in wave_rec._confirm_breakout: das
Bestaetigungs-Level wird auch NACH der Bestaetigung veroeffentlicht (die
Nachjagd-Bremse braucht es genau dann; pending bleibt False, Frontend
unberuehrt), und conf = die Konfidenz VOR dem Stummschalten - sonst muesste
die ruhende Order blind platziert werden.

Nachjagd-Bremse jetzt auch fuer SIG (0,20 xATR, Haertetest-gedeckt).
12 Szenarien getestet, live am Snapshot verifiziert. Snapshot-Felder
squeeze_pending_levels -> pending_levels + pending_quelle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-05 11:43:04 +02:00
co-authored by Claude Opus 5
parent 12fb11fa44
commit 90d77a2305
3 changed files with 168 additions and 42 deletions
+35 -4
View File
@@ -1401,10 +1401,41 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
also im gemessen negativen Fall. Wie oft das passiert, ist ungemessen.
(4) `_pend` wird aktuell **nicht im Snapshot veröffentlicht** — das wäre die erste
Bauarbeit.
⚠⚠ **KONSEQUENZ FÜR DEN LAUFENDEN BETRIEB:** SIG steht seit dem 05.08. 08:13 auf
AN (User-Toggle) und läuft dabei über die **Market-Order — also Variante A, die in
beiden Halbjahren negativ ist.** Solange der Pending-Pfad nicht gebaut ist, ist der
Schalter die gemessen schlechte Variante.
✅✅ **PENDING-PFAD FÜR SIG GEBAUT & LIVE (2026-08-05, User-Vorgabe),
`[trading] signal_pending_entry=true`.** SIG läuft damit auf Variante B statt A.
⚠⚠ **Der heikelste Punkt war NICHT die Order, sondern die Kollision der beiden
Pfade.** `trader.pending_orders()` liefert ALLE magic-gleichen Orders — zwei
getrennte Manager (Squeeze/Signal) hätten sich **gegenseitig die Orders
storniert**, sporadisch und im Log kaum erkennbar. Deshalb **EIN gemeinsamer
Ziel-Zustand**: `engine._pending_ziel()` liefert `{order_type: preis}` + Quelle,
`_manage_squeeze_pending` gleicht nur noch ab. **VORRANG: Squeeze > Signal** — der
Squeeze ist unabhängig validiert und selten (~23×/Woche), das Signal feuert
dauernd; bei EINEM Positions-Slot ist die Reihenfolge damit eindeutig.
⚠ **Zwei additive Ergänzungen in `wave_rec._confirm_breakout` waren nötig:**
(1) Das Bestätigungs-Level wird jetzt **auch nach der Bestätigung** veröffentlicht
(`snap["breakout"]["level"]`, `confirmed=True`) — die Nachjagd-Bremse im
Market-Fallback braucht es genau dann. `pending` bleibt False, das Frontend rendert
nur bei `pending` und ist unberührt. (2) **`conf`** = die Konfidenz VOR dem
Stummschalten: der Rückgabewert setzt `conf_pct` auf 0 (das Signal gilt ja noch
nicht), die ruhende Order müsste sonst **blind** platziert werden. Damit wird die
Mindest-Konfidenz jeden Tick geprüft und die Order storniert, sobald sie fällt —
strenger als der Live-Check von vorher (der prüfte nur im Moment des Entries).
**Nachjagd-Bremse auch für SIG** (`squeeze_max_chase_atr`, 0,20): greift die
Pending nicht, wird nur noch bis 0,20×ATR über dem Bestätigungs-Level nachgekauft —
der Härtetest zeigt dort +0,148/+0,090, ab ~0,250,30 kippt es.
**Der wandernde Anker ist die operative Hauptlast:** `_pend` verankert sich bei
jeder k×ATR-Gegenbewegung, nach Timeout und bei Richtungswechsel neu — die Order
wird dann nachgezogen (Toleranz 0,02×ATR gegen Order-Churn). **Mit 12 Szenarien
getestet** (Vorrang · reiner Signal-Fall · SHORT · Konfidenz zu niedrig · Wechsel
Signal→Squeeze mit Storno · wanderndes Level · Toleranz · Gate · Fill · Feature aus
· Bestätigung eingetreten · Schonfrist). Live verifiziert am Snapshot:
`signal_pending=true`, `breakout` liefert `level`/`conf`/`confirmed`;
`pending_levels` leer, weil eine Position offen war = korrektes Verhalten.
Snapshot-Felder umbenannt: `squeeze_pending_levels`**`pending_levels`** +
**`pending_quelle`**. Zurück: `signal_pending_entry=false`.
**B4-Pflicht:** dieselbe Erfolgskontrolle wie beim Squeeze — der Abstand
Einstieg↔Level muss gegen 0 gehen. AUTOSIG-Trades sind über `setup=AUTOSIG_*`
separierbar.
**Methodik-Fehler beim Bau, gefunden und behoben:** der erste Entwurf liess
`pend["level"]` nach der Bestätigung über weitere Bars stehen — bei verzögertem
Einstieg (Slot belegt, Konfidenz zu niedrig) wäre er zu einem Preis eingestiegen,