Review-Durchlauf: Telemetrie-Epochen, doppeltes Verdict, Doku-Korrektur

Erster vollstaendiger Durchlauf von docs/review-prompt.md. KEINE
Strategie-Aenderung - alles Telemetrie, Doku und toter Code.

1) analyze_divergence.py kannte keine Epochen und war damit selbst
   driftanfaellig. D0 mischte Vorhersagen des alten und des am 31.07.
   nachtrainierten P(break)-Modells und meldete dessen Fehlkalibrierung als
   aktuellen Alarm (das neue Modell hat n=0, Markt seit Fr zu). B las die
   Prae-Migrations-NULLs von block_reason als blinden Fleck. C druckte bei
   0 Zeilen ein "OK", obwohl es fehlende Daten waren. Neu: _EPOCHS + _clamp().

2) Konsens-Pfeil AR;K: der MQL5-Export rechnete im ~5-s-Takt ein komplettes
   zweites _verdict(), obwohl der Indikator die Zeile seit v1.33 per Default
   verwirft. Neu [trading] export_consensus_arrow (Default false).
   Verifiziert ueber die exportierte CSV: AR;K weg, AR;L und AR;S bleiben.

3) /api/autosqueeze loggt jetzt die Herkunft ([WEB] ...) wie /api/autosignal.
   Vorher war ein Zustandswechsel nicht als Nutzeraktion belegbar.

4) CLAUDE.md: die Reversal-Kennzahl "OR +0,185 / PF 1,35 / 70 %" stand
   unkorrigiert an der Fundstelle, die Widerlegung 2000 Zeilen weiter im
   Legacy-Recheck. Korrektur an die Fundstelle geholt.

5) core/notify.py: zwei tote "import datetime" entfernt (beide Funktionen
   nutzen _time), funktional nachgetestet.

Geprueft und sauber: 0 fehlende Frontend-IDs von 86, nur 2 Config-Schluessel
ohne Leser (beide dokumentiert dormant), Snapshot-Median 13 ms und alle
DB-Abfragen <13 ms -> keine Performance-Massnahme, 124 Datei- und 83
Funktionsreferenzen in CLAUDE.md stimmen.

Zwischenverdacht zurueckgezogen: "block_reason erklaert nur 33 % der WARTEN"
war ein Migrations-Artefakt; seit 01.08. 100 % Abdeckung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-02 23:29:58 +02:00
co-authored by Claude Opus 5
parent 3124fe5b4f
commit 20cd04caa7
5 changed files with 149 additions and 18 deletions
+60 -4
View File
@@ -439,10 +439,18 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
**Winkel-Richtung, gegen die EMA** (überverkauft + Winkel auf → LONG; überkauft +
Winkel ab → SHORT). Setup `WAVE_REV_*`, Grund „🔄 Reversal"; hebt Anti-Überdehnung
**und** M30-Filter bewusst auf. **Schwelle 3,5→3,0 gesenkt** (User wollte mehr
Bounces; `backtest_bounce.py`): Ø-R **+0,185**, PF 1,35, Treffer 70 %, Worst 2×ATR
(SL-gedeckelt), ~1,5× mehr Bounces als 3,5 — profitabel, aber **schwächer als
Trend** & **regime-anfällig** (trägt in Seitwärts/Mean-Reversion, blutet in starken
Trends). Nachrangiges, markiertes Setup. **Bounce-Status — Multi-TF** im Wave-
Bounces; `backtest_bounce.py`): Ø-R +0,185, PF 1,35, Treffer 70 %, Worst 2×ATR
(SL-gedeckelt), ~1,5× mehr Bounces als 3,5.
⚠⚠ **DIESE ZAHLEN GELTEN NICHT MEHR** (Legacy-Recheck 2026-07-31, hier eingetragen
am 2026-08-02): `backtest_bounce.py` nutzt den **vereinfachten Exit OHNE Kosten**
(`LEGACY_SIMPLE`: kein Breakeven, kein Lock, kein Time-Stop). Mit dem **echten**
Exit + Echtkosten liegt das Setup bei ~**Breakeven** (PF 0,93/1,06) — es ist
**kein +0,185-Ertragsbringer**. Was HÄLT, ist die *relative* Aussage: Reversal
schlägt Trend in beiden Hälften (+0,140/+0,102). Deshalb bleibt es ein sinnvolles
**nachrangiges, markiertes Zweitsignal** (so ist es live auch eingebaut), aber
nicht mehr als das. Details im Abschnitt „LEGACY-RECHECK".
Weiterhin gültig: **schwächer als Trend** & **regime-anfällig** (trägt in
Seitwärts/Mean-Reversion, blutet in starken Trends). Nachrangiges, markiertes Setup. **Bounce-Status — Multi-TF** im Wave-
Snapshot (`wave.bounce = {state, dir, tf}`): scannt **M1/M5/M15/M30** (`_bounce_one`,
Aggregat in `refresh_market`, ~15 s-Throttle via TF-Ampel-Fetch), nimmt den
**stärksten** (aktiv>erwartet, dann größte Überdehnung). **`expected`** = überdehnt
@@ -2531,6 +2539,54 @@ konstant; (d) es gab **keine Telemetrie über die Entscheidung selbst**.
in ~20 min gefunden; die Trefferquote spricht für weitere. `analyze_divergence.py`
regelmäßig laufen lassen (Kandidat für den Wochenreport).
## Gesamtprüfung 2026-08-02 (nach `docs/review-prompt.md`)
Erster vollständiger Durchlauf des Review-Prompts. **Keine Strategie-Änderung** — alle
Fixes betreffen Telemetrie, Doku und toten Code.
**Behoben:**
1. **`analyze_divergence.py` kannte keine Epochen** — und war damit selbst
driftanfällig. D0 mischte Vorhersagen des ALTEN und des am 31.07. nachtrainierten
P(break)-Modells und meldete dessen Fehlkalibrierung als aktuellen Alarm (das neue
Modell hatte **n=0**, weil der Markt seit Fr 22:55 zu ist); B las die
Prä-Migrations-`NULL`s von `block_reason` als blinden Fleck („None 66,8 %"); C
druckte bei 0 Zeilen ein „OK", obwohl es fehlende Daten waren. Neu: `_EPOCHS` +
`_clamp()` schneiden jede Auswertung auf den Beginn ihrer eigenen Datenlage.
⚠ **Beim Nachtrainieren eines Modells das Datum in `_EPOCHS` mitziehen** — sonst
schlägt der Wächter wochenlang Fehlalarm, und ein Wächter, der immer warnt, wird
ignoriert.
2. **Konsens-Pfeil: doppelte Arbeit für eine unsichtbare Linie.** Der MQL5-Export
rechnete im ~5-s-Takt ein **komplettes zweites `_verdict()`** für `AR;K` — der
Indikator verwirft die Zeile aber seit v1.33 per Default (`InpShowConsensus=false`).
Neu `[trading] export_consensus_arrow` (Default **false**, spiegelt den Indikator).
Nebeneffekt beseitigt: das zweite Verdict konnte vom Verdict im Snapshot abweichen.
3. **`/api/autosqueeze` loggt jetzt die Herkunft** (`[WEB] …`) wie `/api/autosignal`.
Vorher war bei einem Zustandswechsel nicht belegbar, ob Dashboard oder Code —
bei einem Schalter für autonome Echtgeld-Einstiege zu wenig.
4. **Reversal-Kennzahl an der Fundstelle korrigiert.** „ØR +0,185 · PF 1,35 · 70 %
Treffer" stand unverändert in der Reversal-Sektion, die Widerlegung 2 000 Zeilen
später im Legacy-Recheck. Wer die Sektion liest, sah die Korrektur nie.
5. Zwei tote `import datetime` in `core/notify.py` entfernt (beide Funktionen nutzen
`_time`), funktional nachgetestet.
**Geprüft und sauber:** 0 fehlende Frontend-IDs (von 86) · nur 2 Config-Schlüssel ohne
Leser (beide dokumentiert dormant) · Snapshot-Median **13 ms**, alle DB-Abfragen <13 ms,
Indizes vorhanden → **keine Performance-Maßnahme nötig** · 124 Datei- und 83
Funktionsreferenzen in CLAUDE.md stimmen · Asset- und Indikator-Version konsistent.
**Zwischenverdacht zurückgezogen:** „`block_reason` erklärt nur 33 % der WARTEN" war
ein reines Migrations-Artefakt (Spalte kam am 31.07.); seit 01.08. **100 % Abdeckung**.
**Offen (nicht behoben, bewusst):**
- **`auto_flip_close=true` läuft ohne jede UI-Anzeige.** Ein Exit, der gemessen in
BEIDEN Hälften Geld kostet (92/160 R), schließt echte Trades; `flip_close`,
`flip_close_min_r` und `flip_close_count` haben keinen Frontend-Konsumenten. Nur
Log + Telegram. Entweder anzeigen oder abschalten — Entscheidung des Users.
- **`breakout_k=0,3` ruht weiter auf dem `LEGACY_BE10`-Exit** (Breakeven 1,0 statt
live 1,3). Der Legacy-Recheck hat EIA und Dead-Hours nachgerechnet, `breakout_k`
nicht. Kandidat für den nächsten Recheck.
- Die 5 Zähler-Snapshot-Felder (`close_alert_count` usw.) werden von nichts abgefragt.
## Ausstehende Messungen — Erinnerung per Timer
`measurement_reminder.py` + Windows-Task **`OilMeasurementReminder`** (täglich 18:00)