Bestaetigtes Chartmuster je Zeitebene ins MT5-Chart (Indikator v1.45)

User-Wunsch: das bestaetigte Muster in das jeweils passende Chart einzeichnen.

CSV: neue Zeile `PT;<TF>;<name>;<dir>;<trigger>;<ziel>` je Zeitebene.
INDIKATOR: zeichnet NUR die Zeile, deren <TF> zu SEINEM Chart passt
(`TFName(PERIOD_CURRENT)`). Ohne diesen Filter laegen alle Zeitebenen
uebereinander im selben Fenster und keine waere lesbar - so bekommt jedes
Chartfenster (M1/M5/M15/M30/H1) sein eigenes Muster.
Gezeichnet werden zwei waagerechte Linien: Trigger (Nackenlinie, durchgezogen,
Breite 2) und Ziel (gestrichelt), gruen bei bullisch, rot bei baerisch, dazu ein
Label an der Triggerlinie.

⚠⚠ NUR `confirmed`. "Bildet sich" ist genau der Zustand, in dem noch nichts
gebrochen ist - ihn zu zeichnen waere eine Vorhersage. Live gegengeprueft:
M30 "Tasse+Henkel" und H1 "Aufsteigendes Dreieck" stehen auf confirmed und sind
in der CSV; der M5-"Steigende Keil" ist nur forming und wird korrekt NICHT
exportiert.

⚠⚠ EHRLICHKEIT IM LABEL: die Muster-Klasse ist als SIGNAL gemessen und
VERWORFEN - die Ziel-Trefferquote liegt bei nur 13-38 % (backtest_patterns.py).
Deshalb steht "(trifft 13-38 %)" im Chart-Label. Eine gezeichnete Ziellinie ohne
diesen Zusatz liest sich wie eine Prognose, und genau das ist sie nicht.
Kein Verdict-Gewicht, kein Trade-Trigger.

⚠ Nur ZUSAMMENGESETZT aus `patterns_tf`, das der Snapshot ohnehin baut - kein
zweiter Rechenweg (der Konsens-Pfeil-Fehler).

⚠ Der dokumentierte Fallstrick beachtet: kompiliert wurde ins RICHTIGE Terminal
(D0E8209F..., das einzige mit sr_levels.csv), mit EIGENEM Logpfad, und geprueft
wurde auf "Result: 0 errors, 0 warnings" PLUS frischen .ex5-Zeitstempel - nicht
auf den Default-Log. Der erste Versuch lief ins Leere, weil der Editor-Pfad
falsch war (Pepperstone-Ordner existiert nicht, es ist "MetaTrader 5"); das
leere Log und die unveraenderte .ex5 haben es verraten.
Quelle ins Repo gespiegelt (mql5/SR_Levels.mq5), Backup daneben.

Abschaltbar: InpShowMuster=false; Farben ueber InpMusterBullColor/-BearColor.
Pipeline A-G gruen, 97 Tests, deployt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-21 13:02:58 +02:00
co-authored by Claude Opus 5
parent db0de81ef6
commit 263ec9f9a5
3 changed files with 1317 additions and 1 deletions
+27
View File
@@ -3601,6 +3601,33 @@ class TradingEngine:
lines.append(f"{_tag};{round(_lo2, 3)};{round(_hi2, 3)}")
except Exception:
pass
# ── BESTAETIGTES CHARTMUSTER je Zeitebene (User-Wunsch 2026-08-21)
# PT;<TF>;<name>;<dir>;<trigger>;<ziel>
# Der Indikator zeichnet NUR die Zeile, deren <TF> zu SEINEM Chart
# passt — so bekommt jedes Fenster (M1/M5/M15/H1) sein eigenes
# Muster, ohne dass fuenf Linien uebereinander liegen.
# ⚠⚠ NUR `confirmed`. "Bildet sich" ist genau der Zustand, in dem noch
# nichts gebrochen ist; ihn zu zeichnen waere eine Vorhersage.
# ⚠⚠ EHRLICHKEIT IM LABEL: die Muster-Klasse ist als SIGNAL gemessen
# und VERWORFEN — die Ziel-Trefferquote liegt bei nur 13-38 %
# (`backtest_patterns.py`). Deshalb steht die Zahl im Chart mit
# dran. Eine gezeichnete Ziellinie ohne diesen Hinweis liest sich
# wie eine Prognose, und genau das ist sie nicht.
# ⚠ Nur zusammengesetzt aus `patterns_tf`, das der Snapshot ohnehin
# baut — kein zweiter Rechenweg (der Konsens-Pfeil-Fehler).
try:
for _tf, _m in (self._patterns_tf() or {}).items():
if not _m or _m.get("status") != "confirmed":
continue
_trg, _zl = _m.get("trigger"), _m.get("target")
if not _trg or not _zl:
continue
_nm = str(_m.get("name") or "").replace(";", ",")[:28]
lines.append(f"PT;{_tf};{_nm};{_m.get('dir') or ''};"
f"{float(_trg):.3f};{float(_zl):.3f}")
except Exception as _pe:
log.debug(f"PT-Export: {_pe}")
# ── MELDUNGEN oben links (MS;<text>) — User-Wunsch 2026-08-17 ────
# Dieselben Zeilen wie die Dashboard-Karte „Meldungen" (`#card-pos`).
# ⚠⚠ NUR ZUSAMMENSETZEN, NICHT NEU RECHNEN. Der Konsens-Pfeil hat im