P(break) Live-Auswertung: Modell haelt nicht - das Gate gatet nicht (B5)

analyze_pbreak_live.py, 2275 ausgewertete Vorhersagen seit 23.07.

  AUC 0,539 (Backtest-Erwartung 0,71) · entkoppelt 0,443 · M30-Teil 0,399
  Trefferquote 58,5 % vs 59,0 % fuer "immer Abprall" -> Ueberschuss -0,5 Pp
  Kalibrierung: Bucket 0-19 % sagt 8 % voraus, real 39,1 % (Faktor 5);
  Bucket 65-100 % sagt 74,5 %, real 48,0 % (invertiert)

KERNBEFUND: die Bruchrate der GESCHLOSSENEN Gruppe ist bei JEDER Schwelle
38-40 %, identisch zur Basisrate. Es findet live keine Auswahl statt. Bei
der ini-Schwelle 0,55 werden 91,2 % aller Beruehrungen geschlossen -> der
"P(break)-gegatete Close" ist faktisch der pauschale S/R-Close, und DER ist
2x gemessen und verworfen (backtest_srclose.py). Erklaert die
kontrafaktische Messung vom Vortag (-8 EUR/Trade, 43 % zu frueh).

Pipeline gegen das Training geprueft, KEIN Bug: dist in beiden
entry-basiert, mom6/mom3 in beiden am Touch-Bar, confirm/reject dieselbe
+-0,5xATR-Definition, Timeout zaehlt in beiden als Abprall. Plausibelste
Ursache: andere Stichproben-Population (2275 roh -> 307 entkoppelt, live
dominieren Chop-am-Level-Faelle). Entlastet das Modell aber nicht -
entkoppelt ist die AUC sogar schlechter.

TOUCH-ZAHL (User-Idee): auf Live-Daten in BEIDEN Haelften bestaetigt, aber
mit Umkehr - 1. Beruehrung 38,3/41,7 %, 4. 45,1/47,4 % (monoton, +6/+4 Pp),
aber 5.+ faellt auf 37,8/41,8 % zurueck (unter Basis, groesste Gruppe).
Umgekehrtes U: 2-4 Beruehrungen machen das Level muerbe, ab 5 in 30 min ist
es eine Range und haelt. Das Modell sieht davon nichts (~23 % konstant) ->
echte orthogonale Information. Belastbarkeit begrenzt (Haelften nur 4 Tage
auseinander, n=82-139). Naechster Schritt: als 5. Merkmal in
backtest_srclose_prob.py aufnehmen, ueber 34.771 Touches / 2 Halbjahre
neu fitten.

Empfehlung: auto_sr_close=false. Eine reine Schwellensenkung repariert es
nicht (aendert die Anzahl, nicht die Auswahl).

Reminder: Punkt erledigt, Wiedervorlage als pbreak_accuracy_v2 (800
Vorhersagen ab 01.08., nach einem Nachtraining).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-31 08:39:31 +02:00
co-authored by Claude Opus 5
parent f81cc63dc7
commit 92995b08d7
3 changed files with 212 additions and 8 deletions
+51
View File
@@ -1426,6 +1426,57 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
Continuation = breakeven-negativ (0,011/0,005, Momentum-Klasse). Damit ist auch
die Struktur-Idee empirisch durch — die Kachel bleibt Ist-Zustand-Anzeige (wie
TF-Ampel/Squeeze), steuert nichts.
- **⚠⚠ P(break) LIVE-AUSWERTUNG (`analyze_pbreak_live.py`, 2026-07-31, 2275 ausgewertete
Vorhersagen seit 23.07.): DAS MODELL HÄLT LIVE NICHT, WAS DER BACKTEST VERSPRACH —
B5-Fall.** Fällige Messung aus dem Reminder, jetzt erledigt.
| | Gesamt | M5-Level (bis 29.07.) | M30-Level (ab 30.07.) | entkoppelt |
|---|---|---|---|---|
| n | 2275 | 1850 | 425 | 307 |
| **AUC** | **0,539** | 0,570 | **0,399** | **0,443** |
| Treffer Modell | 58,5 % | 58,7 % | 57,6 % | 56,7 % |
| „immer Abprall" | 59,0 % | 57,7 % | 64,7 % | 59,9 % |
| Überschuss | 0,5 Pp | +1,0 Pp | 7,1 Pp | 3,3 Pp |
Backtest-Erwartung war **AUC 0,71**. **Kalibrierung systematisch nach unten verzerrt:**
Bucket 019 % (n=1234, über die Hälfte!) sagt **8 % voraus, real 39,1 %**; Bucket
65100 % sagt 74,5 %, real 48,0 % (invertiert). Im Mittel prognostiziert das Modell
**23 % Durchbruch, real sind es 41 %**, und es sagt nur in **8 % der Fälle „break"**.
**DER KERNBEFUND — das Gate gatet nicht:** die **Bruchrate der GESCHLOSSENEN Gruppe
ist bei JEDER Schwelle 3840 %**, also identisch zur Basisrate (thr 20 → 39,1 % ·
thr 35 → 37,8 % · thr 55 → 40,5 %). Es findet live keinerlei Auswahl statt. Bei der
ini-Schwelle 0,55 werden **91,2 % aller Level-Berührungen geschlossen** → der
„P(break)-gegatete Close" ist faktisch zum **pauschalen S/R-Close** degeneriert, und
DER ist 2× gemessen und verworfen (`backtest_srclose.py`: WR verdoppelt, PF/ΣR in
beiden Hälften schlechter = Gewinner-Kappen). **Das erklärt die kontrafaktische
Live-Messung vom Vortag** (`analyze_srclose_live.py`: 8 €/Trade, 43 % klar zu früh
geschlossen, nur 26 % klar richtig) — Symptom und Ursache passen zusammen.
**Pipeline gegen das Training geprüft, KEIN Bug gefunden:** `dist` ist in beiden
entry-basiert (`abs(levelentry)/atr`, `backtest_srclose_prob.py:86`), `mom6`/`mom3`
in beiden am Touch-Bar `jt`, `confirm`/`reject` dieselbe ±0,5×ATR-Definition, Timeout
zählt in beiden als Abprall. Plausibelste Ursache = **andere Stichproben-Population**:
live werden 2275 Berührungen geloggt, entkoppelt (max. 1 je Level und Stunde) bleiben
nur **307** — dieselbe Position pendelt vielfach um dasselbe Level, live dominieren
also Chop-am-Level-Fälle. ⚠ Das entlastet das Modell NICHT: entkoppelt ist die AUC mit
0,443 sogar schlechter. ⚠ Der M30-Teil (AUC 0,399) ist mit n=425 über 2 Tage zu klein,
um die Umstellung als Ursache zu belegen — die Wiedervorlage (≥30 S/R-Closes auf
M30-Leveln) läuft weiter.
**TOUCH-ZAHL als fehlendes Merkmal (User-Idee 2026-07-31 „je öfter der Kurs die Linie
berührt, desto wahrscheinlicher der Durchbruch") — auf den Live-Daten BESTÄTIGT, aber
mit Umkehr:** Bruchrate nach n-ter Berührung desselben Levels im 30-min-Fenster, in
BEIDEN Live-Hälften dasselbe Muster — 1. Berührung 38,3/41,7 % · 2. 40,8/45,6 % ·
3. 43,2/45,1 % · **4. 45,1/47,4 %** (monoton, +6/+4 Pp über Basis) · **5.+ fällt
zurück auf 37,8/41,8 %** (UNTER Basis, und mit n≈1400 die größte Gruppe). Also ein
**umgekehrtes U**, kein monotoner Anstieg: 24 Berührungen = Level wird mürbe, ab 5 in
30 min = Range, das Level HÄLT. ⚠ Das Modell sieht davon **nichts** (sagt über alle
Berührungszahlen konstant ~23 % voraus) → echte orthogonale Information. ⚠ Belastbarkeit
begrenzt: die beiden „Hälften" liegen nur 4 Tage auseinander (kein Regimewechsel),
Buckets n=82139; und `backtest_srbreak.py` fand die Touch-Zahl früher „nicht robust"
(allerdings ohne Fenster-Definition und ohne die 5+-Umkehr). **Nächster Schritt: als
5. Merkmal in `backtest_srclose_prob.py` aufnehmen und über die 34.771 Touches / 2
echten Halbjahre neu fitten** — dort ist messbar, ob die AUC steigt.
**Empfehlung: `auto_sr_close=false`** (zurück auf reines
Trailing = der gemessene Vergleichsmaßstab). Eine reine Schwellensenkung repariert es
NICHT (sie ändert die Anzahl, nicht die Auswahl); 0,250,35 wäre nur ein Kompromiss,
falls die Mechanik erhalten bleiben soll.
- **P(Trendumkehr) = GEMESSEN, NICHT BERECHENBAR (`analyze_reversal.py`, 2026-07-31,
User-Frage „können wir die Trendumkehr-Wahrscheinlichkeit berechnen?"):** Aufgebaut
exakt wie das erfolgreiche P(break)-Modell — mechanisch scharfes **Barriere-Rennen**