Kurslueckenerkennung: zwei Fehler behoben

User-Meldung "die Kurslueckenerkennung funktioniert nicht richtig". Zwei Fehler
gefunden:

1) Die groesste Luecke des Jahres wurde um 3 Cent verfehlt. Die Definition
   verlangte ein lueckenloses Vakuum zwischen den TAGESSPANNEN. Am Wochenende
   31.07.->03.08. fiel WTI von Schluss 86,33 auf Eroeffnung 79,76 = -6,57 $ -
   unsichtbar, weil Montags Hoch (81,67) das Freitags-Tief (81,64) um 0,03 $
   ueberlappte. In einem 24/5-Markt ueberlappen die Tagesspannen fast immer;
   die strenge Regel fand im ganzen Jahr nur 5 Gaps.

2) Alle Gap-Datumsangaben waren einen Tag zu frueh: int(b["time"]) minus
   _BROKER_OFFSET_S zog 3 h von einer Bar-Zeit ab, die MT5 bereits als naive
   Broker-Zeit liefert. Die gemeldete Luecke "2026-07-26" war real der 27.07.
   Am Jahreswechsel haette es zusaetzlich den year-Filter verschoben.

Fix: zwei getrennte Gap-Begriffe (kind).
- vacuum     = alte strenge Definition. NUR diese speisen zone_lines() ->
               _sr_levels -> Wellen-Konfidenz, denn nur auf ihnen wurde
               gemessen (backtest_gaps.py). Strategie-Eingang bitgenau
               unveraendert: zone_lines() liefert vorher wie nachher [88.288].
- close_open = Schluss->Eroeffnung, das was ein Mensch "Kurslucke" nennt.
               REINE ANZEIGE, ab 0,50 $, fuellt auch am selben Tag.

Live: 4 offene Luecken statt 1 (1 Vakuum + 3 Eroeffnungsluecken), darunter
endlich die -6,57-$-Wochenendluecke mit Fill bei 86,33. Frontend kennzeichnet
beide Arten mit Tooltip. v=133.

Bewusst NICHT getan: close_open in die Konfidenz einspeisen - das waere ein
ungemessener Strategie-Eingriff, und der vorhandene Befund beruht auf der
Vakuum-Definition.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-03 18:19:48 +02:00
co-authored by Claude Opus 5
parent 5f94917014
commit fe7a1acb97
4 changed files with 110 additions and 14 deletions
+27 -1
View File
@@ -2162,6 +2162,32 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
`_SR_BONUS`/`_SR_PENALTY`), Close-Alarme und Verdict-Kontext — und so indirekt in
den **Autotrader** (der auf die Welle hört). **Keine** eigene Handelsrichtung.
Snapshot `gaps`. Mess-/Einzeltool: `find_gaps.py`.
- **⚠⚠ ERKENNUNG WAR DEFEKT — zwei Fehler (Fix 2026-08-03, User-Meldung „die
Kurslückenerkennung funktioniert nicht richtig"):**
**(1) Die größte Lücke des Jahres wurde um 3 Cent verfehlt.** Die Definition
verlangte ein lückenloses **Vakuum zwischen den TAGESSPANNEN**. Am Wochenende
31.07.→03.08. fiel WTI von Schluss **86,33** auf Eröffnung **79,76** = **6,57 $** —
unsichtbar, weil Montags Hoch (81,67) das Freitags-Tief (81,64) um **0,03 $**
überlappte. In einem 24/5-Markt überlappen die Tagesspannen fast immer; die
strenge Regel fand im ganzen Jahr nur **5** Gaps.
**(2) Alle Gap-Datumsangaben waren einen Tag zu früh.** `int(b["time"])
_BROKER_OFFSET_S` zog 3 h von einer Bar-Zeit ab, die MT5 bereits als naive
Broker-Zeit liefert → jeder D1-Bar rutschte auf den Vortag (die gemeldete Lücke
„2026-07-26" war real der **27.07.**). Am Jahreswechsel hätte es zusätzlich den
`year`-Filter verschoben.
**Fix:** zwei getrennte Gap-Begriffe im Snapshot (`kind`):
· **`vacuum`** = die alte, strenge Definition — **NUR diese speisen `zone_lines()`
`_sr_levels` → Wellen-Konfidenz**, denn nur auf ihnen wurde gemessen. Der
Strategie-Eingang ist damit **bitgenau unverändert** (verifiziert: `zone_lines()`
liefert vorher wie nachher `[88.288]`).
· **`close_open`** = Schluss→Eröffnung, also das, was ein Mensch „Kurslücke" nennt.
**REINE ANZEIGE**, ab `min_close_open`=0,50 $, füllt auch am selben Tag.
Ergebnis live: 4 offene Lücken statt 1 (1 Vakuum + 3 Eröffnungslücken), darunter
endlich die **6,57-$-Wochenendlücke mit Fill bei 86,33**. Frontend kennzeichnet
beide Arten (`Vakuum` / `Eröffnung`) mit Tooltip, v=133.
**Bewusst NICHT getan:** die `close_open`-Lücken in die Konfidenz einzuspeisen.
Das wäre ein ungemessener Strategie-Eingriff — und der gemessene Befund unten
beruht auf der Vakuum-Definition. Wer sie einbeziehen will, misst vorher.
- **Gap-Magnet als Handelssignal = VERWORFEN (gemessen, `backtest_gaps.py`):**
Signale WEG vom nächsten offenen Gap haben **+0,094** Ø-Edge, ZUM Gap nur
**+0,014** — der Magnet zieht NICHT (das Gap blieb offen, weil der Trend von
@@ -2247,7 +2273,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
Signal → **Hinweis-Dialog „trotzdem eröffnen?"** (überschreibbar). CLOSE bei
**negativem** P&L → Sicherheitsabfrage; im Plus/Breakeven direkt. Sonst keine
Token-Dialoge (`require_token=false`). Audio braucht 1× Nutzer-Tap.
- Asset-Version aktuell **v=132** (in `web/index.html` hochzählen, siehe Workflows).
- Asset-Version aktuell **v=133** (in `web/index.html` hochzählen, siehe Workflows).
Schriftgrößen 2026-07-24 global **+4px** (2× je +2px auf User-Wunsch; Body-Basis
14→18px). ⚠ Betrifft in `style.css` sowohl `font-size:Npx` (71×) ALS AUCH die
`font:<weight> Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge`