Telegram bei gruener M15-Karte (m15_alert) + Tests verschmutzen nicht mehr das Log

User: "wenn es eine Empfehlung gibt (gruen), schicke eine Telegram-Nachricht."
engine._check_m15_alert, direkt hinter _log_m15_state -- dieselbe Quelle wie
Anzeige und Selbstmessung, damit die drei nicht auseinanderlaufen koennen.

DIE ENTPRELLUNG IST DER GANZE BAU. Roh springt die Karte 85x/Tag auf gruen
(m15_states, 3 Tage nach der Hysterese vom 12.08.) -- das waere Spam. Alle
Stufen an den echten Daten kalibriert, nicht geraten:

  nur Flanke                          85,0/Tag
  + Level & Richtung als Schluessel   23,7/Tag
  + 30 min Mindestabstand             13,3/Tag
  + Fenster 8-20 Uhr (Default)         7,7/Tag
  (Vergleich: Close-Meldung ab 50 EUR  2,4-6,1/Tag)

Nach 4 h darf dasselbe Level erneut melden, sonst verschweigt der Alert ein
Setup, das den ganzen Tag wiederkommt.

Der Text sagt ausdruecklich, dass es KEINE Prognose ist: die Karte automatisch
zu handeln faellt gemessen durch (backtest_m15_auto.py: OeR -0,162/-0,094). Die
Meldung ist ein Hinweis zum Hinsehen fuer den Menschen (+3,20 EUR/Lot ueber 146
Trades). Die P(break)-Formulierung ist wortgleich zu Karte und Chart (v1.35).

13 Tests, Schwerpunkt auf dem was NICHT gesendet werden darf. Mutationsprobe in
vier Zweige, alle gefangen.
DIE PROBE HAT EIN TESTLOCH AUFGEDECKT: das Entfernen der Flankenerkennung liess
zunaechst ALLE Tests gruen, weil Cooldown und 4-h-Schluessel dasselbe abfangen.
Zwei Schutzschichten, die sich maskieren -- dasselbe Muster wie beim Fill-Dedup.
Geschlossen durch test_flankenerkennung_ISOLIERT.

NEBENBEFUND, behoben: Tests schrieben ins Produktions-Log (ueber 150
M15-Alert-Zeilen + Close-Push #4711 aus test_close_buchung). Ich hielt die
Entprellung deshalb zuerst fuer live defekt. conftest.py entfernt den
FileHandler des oil-Loggers jetzt fuer die Sitzung -- vierte Grundregel der
Suite. Verifiziert: Log-Groesse vor und nach einem Komplettlauf identisch.

Live verifiziert: seit dem Serverstart genau 1 Alert trotz mehrfachem
gruen/gelb-Wechsel. 85 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-14 08:37:53 +02:00
co-authored by Claude Opus 5
parent c251652d33
commit 44191947ac
4 changed files with 353 additions and 0 deletions
+50
View File
@@ -5730,6 +5730,56 @@ je anfasst, gehört diese Zelle nachgemessen, nicht die gestaffelte.
dokumentierten Squeeze-Kontrollwert (+0,124/+0,292) nicht. Belastbar ist allein
der **relative** Vergleich — alle Varianten laufen auf derselben Entry-Liste.
### ✅ TELEGRAM BEI GRÜNER M15-KARTE (2026-08-14, `[telegram] m15_alert`)
User: „wenn es eine Empfehlung gibt (grün), schicke eine Telegram-Nachricht."
`engine._check_m15_alert`, aufgerufen direkt hinter `_log_m15_state` — **dieselbe
Quelle** wie Anzeige und Selbstmessung, damit die drei nicht auseinanderlaufen
können (die Divergenz-Falle, die am 12.08. schon einmal zugeschlagen hat).
⚠⚠ **DIE ENTPRELLUNG IST DER GANZE BAU, nicht ein Detail.** Roh springt die
Karte **85× am Tag** auf grün (`m15_states`, 3 Tage nach der Hysterese vom
12.08.) — das wäre Spam und damit nach zwei Tagen stummgeschaltet. Alle Stufen
sind an den echten Daten kalibriert, nicht geraten:
| Stufe | Meldungen/Tag |
|---|---|
| nur Flanke | **85,0** |
| + Level & Richtung als Schlüssel | 23,7 |
| + 30 min Mindestabstand | 13,3 |
| **+ Fenster 820 Uhr (Default)** | **7,7** |
| *(Vergleich: Close-Meldung ab 50 €)* | *2,46,1* |
⚠ Nach 4 h (`_ALERT_NEU_S`) darf dasselbe Level erneut melden — sonst
verschweigt der Alert ein Setup, das den ganzen Tag wiederkommt.
Schalter: `m15_alert` (true) · `m15_alert_cooldown_min` (30) ·
`m15_alert_hours` (8-20). Backup `oil_widget_config.ini.bak-2026-08-14-m15alert`.
⚠⚠ **DER TEXT SAGT AUSDRÜCKLICH, DASS ES KEINE PROGNOSE IST.** Die Karte
automatisch zu handeln fällt gemessen durch (`backtest_m15_auto.py`, 13.08.:
ØR 0,162/0,094, KI ohne Null, schlechter als die HTF-Richtung UND als ihr
eigenes Gegenteil). Die Meldung ist ein **Hinweis zum Hinsehen** für den
Menschen, dessen Auswahl-Vorteil unabhängig belegt ist (+3,20 €/Lot über 146
Trades) — und sie schreibt das in die Nachricht. Die P(break)-Formulierung ist
**wortgleich** zu Karte und Chart (v1.35-Fix).
**13 Tests** (`tests/test_m15_alert.py`), Schwerpunkt auf dem, was NICHT
gesendet werden darf. **Mutationsprobe in vier Zweige** — alle gefangen.
⚠⚠ **Die Probe hat ein echtes TESTLOCH aufgedeckt:** das Entfernen der
Flankenerkennung liess zunächst **alle** Tests grün, weil Cooldown und
4-h-Schlüssel dasselbe mit abfangen. Zwei Schutzschichten, die sich gegenseitig
maskieren — dasselbe Muster wie beim Fill-Dedup. Geschlossen durch
`test_flankenerkennung_ISOLIERT` (Cooldown aus, Level wandert je Tick).
✅ Live verifiziert: seit dem Serverstart **genau 1 Alert**, obwohl die Karte
seitdem mehrfach grün↔gelb gewechselt hat.
**⚠⚠ NEBENBEFUND — TESTS SCHRIEBEN INS PRODUKTIONS-LOG (behoben).** Nach den
Testläufen standen **über 150** `📨 M15-Alert`-Zeilen in `oil_widget.log`, dazu
`Close-Push #4711` mit dem synthetischen Ticket aus `test_close_buchung.py`. Ich
habe daraufhin zuerst geglaubt, die Entprellung sei live defekt, und musste die
Herkunft an der Level-Folge (82.00, 82.01, …) nachweisen. In einem Projekt,
dessen Forensik am Log hängt (18-h-Copilot-Ausfall, stille Fehlbuchung), sind
erfundene Zeilen ein echtes Risiko. `tests/conftest.py` entfernt den
`FileHandler` des `oil`-Loggers jetzt für die Sitzung — **vierte Grundregel der
Suite.** Verifiziert: Log-Größe vor und nach einem Komplettlauf **identisch**.
### ✅ S/R-AUTO-CLOSE WIEDER AN (User-Entscheidung 2026-08-11)
Frage war: „sollten wir Trades bei einem S/R-Bounce automatisch schliessen?"