Reversal-Winkelbedingung gemessen: alle drei Varianten fallen durch

Anlass: User-Frage "warum SHORT im starken M5-Aufwaertstrend?". Antwort war ein
WAVE_REV_SHORT (3,25xATR ueberdehnt). Beim Nachrechnen kam heraus, dass die
Winkelbedingung gegen ihre eigene Dokumentation laeuft:

calc_trend_angle liefert 0 Grad = starker AUFWAERTStrend, 180 = ABWAERTS.
ad = angle-90 heisst also: ad<0 = STEIGEND. Der Code triggert
stretch>=+3.0 and ad<=-2 -> SHORT, kommentiert als "Winkel ab" - feuert also bei
ueberkauft UND WEITER STEIGENDEM Winkel, waehrend CLAUDE.md "Einstieg IN
Winkel-Richtung" beschreibt. Dasselbe Vorzeichen im Konfidenz-Block: ein SHORT
bekommt "Winkel bestaetigt" (+5), waehrend der Kurs steigt. Mit synthetischen
Reihen direkt nachgestellt.

Erklaert zwei dokumentierte Befunde: ~50 % Richtungstreffer der Bounce-Anzeige
und "blutet in starken Trends".

Statt das Vorzeichen blind zu drehen (alle Messungen beruhen auf dem
IST-Verhalten): backtest_reversal_angle.py, 80k M5, kanonischer Exit,
Echtkosten, 2 Halbjahre, drei Varianten.

  IST         -0,122 / -0,031  PF 0,79/0,94  n=1100/1615
  KORRIGIERT  -0,173 / -0,061  PF 0,68/0,89  n= 106/ 163
  KONTROLLE   -0,099 / -0,023  PF 0,82/0,96  n=1153/1693

(a) Die Vorzeichenkorrektur ist SCHLECHTER - gut, dass sie nicht blind eingebaut
    wurde. Sie feuert zudem kaum, weil bei 3xATR Ueberdehnung die 14-Bar-
    Regression fast immer noch steigt.
(b) Die Kontrolle OHNE Winkel ist die beste der drei - die Winkelbedingung
    entfernt Trades, die im Schnitt besser waren als die behaltenen.
(c) Der Trigger ist in jeder Variante beidhaelftig negativ.

Gemessen wurde der ROHE Trigger ohne Konfidenz-/Raum-Gate; der Legacy-Recheck
der gegateten Variante kam auf ~Breakeven (PF 0,93/1,06), dieselbe Richtung.
Keine Messung stuetzt die dokumentierten "+0,185 / PF 1,35" mehr.

Noch KEINE Strategieaenderung - das Abschalten ist eine User-Entscheidung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-04 11:15:21 +02:00
co-authored by Claude Opus 5
parent 94fbde1dba
commit d052905319
2 changed files with 189 additions and 0 deletions
+33
View File
@@ -441,6 +441,39 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
**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.
⚠⚠ **WINKEL-BEDINGUNG LÄUFT GEGEN IHRE EIGENE DOKUMENTATION (gefunden 2026-08-04,
User-Frage „warum SHORT im starken M5-Aufwärtstrend?").** `calc_trend_angle` liefert
laut Docstring **0° = starker AUFWÄRTStrend, 90° = flach, 180° = ABWÄRTStrend** —
also invertiert. Damit heißt `ad = angle90`: **ad < 0 = STEIGEND**, ad > 0 = fallend.
Der Code triggert aber `stretch >= +3.0 and ad <= -2` → SHORT, kommentiert als
„überkauft + Winkel ab". Tatsächlich feuert er bei überkauft **UND WEITER STEIGENDEM**
Winkel — also GEGEN den Winkel, während CLAUDE.md „Einstieg IN Winkel-Richtung"
beschreibt. Dasselbe Vorzeichen steckt im Konfidenz-Block (Zeile ~790): ein SHORT
bekommt „**Winkel bestätigt**" (+5), während der Kurs steigt. Mit synthetischen
Reihen direkt nachgestellt: überkauft + steigend → `WAVE_REV_SHORT`, Grund „Winkel
gedreht" + „Winkel bestätigt". **Erklärt zwei dokumentierte Befunde:** die ~50 %
Richtungstreffer der Bounce-Anzeige (`backtest_bounce_reliability.py`) und „blutet in
starken Trends".
⚠⚠ **GEMESSEN (`backtest_reversal_angle.py`, 80k M5, kanonischer Exit, Echtkosten,
2 Halbjahre) — ALLE drei Varianten fallen durch:**
| Variante | H1 ØR | H2 ØR | PF | n |
|---|---|---|---|---|
| **IST** (Live) überkauft + Winkel steigt → SHORT | 0,122 | 0,031 | 0,79/0,94 | 1100/1615 |
| **KORRIGIERT** (Doku-Absicht) Winkel fällt → SHORT | **0,173** | **0,061** | 0,68/0,89 | 106/163 |
| **KONTROLLE** ohne Winkelbedingung | **0,099** | **0,023** | 0,82/0,96 | 1153/1693 |
Drei Schlüsse: (a) **Die Vorzeichenkorrektur ist SCHLECHTER** — gut, dass sie nicht
blind eingebaut wurde; sie feuert zudem kaum (106 statt 1100 Trades, weil bei 3×ATR
Überdehnung die 14-Bar-Regression fast immer noch steigt). (b) **Die Kontrolle ohne
Winkel ist die BESTE der drei** — die Winkelbedingung entfernt Trades, die im Schnitt
besser waren als die behaltenen; sie trägt mit KEINEM Vorzeichen etwas bei.
(c) **Der Trigger ist in jeder Variante beidhälftig negativ.**
⚠ Gemessen wurde der ROHE Trigger (ohne Konfidenz-/Raum-Gate); der Legacy-Recheck der
gegateten Variante kam auf ~Breakeven (PF 0,93/1,06) — dieselbe Richtung. **Keine
Messung stützt die dokumentierten „+0,185 / PF 1,35" mehr.**
⚠ **Offene Entscheidung:** Das Setup hebelt zwei GEMESSEN POSITIVE Schutzmechanismen
aus (Anti-Überdehnung UND den M30-Gegen-Trend-Filter, Edge ×2). Ein Setup ohne eigenen
Edge, das validierte Filter umgeht, ist der schlechteste Fall — Abschalten liegt nahe,
ist aber eine Strategie-Entscheidung des Users.
⚠⚠ **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**