Muster als gefuellte geometrische Formen im MT5-Chart (v1.47)
User-Vorgabe: Dreiecke/Rechtecke/Ellipsen ueber OBJ_* an den berechneten Swings verankern, mit leichtem Grauton gefuellt. PT-Zeile traegt jetzt die Geometrie: PT;<TF>;<name>;<dir>;<trigger>;<ziel>;<form>;<t1>;<p1>;<t2>;<p2>;... dreieck (3 Anker) -> OBJ_TRIANGLE Doppeltop/-boden, Dreiecke, Keile, Wimpel dreieck2 (5 Anker) -> 2x OBJ_TRIANGLE SKS, inv. SKS, Dreifach-Top/-Boden rechteck (2 Anker) -> OBJ_RECTANGLE Rechteck (Range), Flagge ellipse (3 Anker) -> OBJ_ELLIPSE Tasse+Henkel, inverse Tasse dreieck2 braucht ZWEI Objekte, weil OBJ_TRIANGLE nur drei Punkte kennt; die beiden Dreiecke (Schulter-Kopf, Kopf-Schulter) kacheln die Silhouette exakt. OBJPROP_FILL faerbt mit OBJPROP_COLOR - ein Objekt kann keine graue Flaeche UND einen farbigen Rand haben. Deshalb Flaeche neutral grau (InpMusterFill) und OBJPROP_BACK (hinter den Kerzen); die Richtungsaussage tragen Trigger- und Ziellinie darueber. Inhaltlich richtig: die Form ist eine Beobachtung, keine Richtungsprognose. Python (core/patterns.py): add() nimmt form + punkte, legt sie als form/anker in den Muster-dict. REIN ADDITIV - kein bestehender Schluessel aendert sich. Neuer Helfer _keil(): schneidet die beiden Linien und DECKELT den Apex auf last_idx+40 (ein fast paralleles Paar schneidet sich im Unendlichen); nach links begrenzt, damit der Apex nicht im Muster liegt. _anker() rechnet einen Index jenseits des letzten Bars ueber die Bar-Dauer hoch - sonst waere der Apex auf den letzten Bar geklemmt und jedes Dreieck haette einen senkrechten rechten Rand. Bar-Dauer aus den DATEN, nicht aus der TF-Konstante. Zeitstempel sind ROHE Broker-Zeit (rates["time"]) - genau das, was iTime() liefert. Keine Offset-Rechnung, gleiche Konvention wie EQ; und TR;. Vor dem Export wird geprueft, dass Form und Punktzahl zueinander passen - ein Dreieck mit zwei Punkten wuerde der Indikator still verwerfen. Abwaertsvertraeglich in beide Richtungen. Verifiziert: 6 synthetische Muster (Form, Punktzahl, aufsteigende Zeitstempel, Apex in der Zukunft) + live Snapshot patterns_tf.M5 form=dreieck anker=3 + CSV-Zeile mit Geometrie. Compile 0 errors, Pipeline gruen, deployt.
This commit is contained in:
@@ -9504,3 +9504,63 @@ Zeitebene.
|
||||
`.ex5` frisch, `0 errors`. **Nur das Ergebnis fehlte** — dieselbe Klasse wie die
|
||||
vier dokumentierten Fälle „Erfolg melden, wo nichts geprüft wurde".
|
||||
Abschaltbar: `InpShowMuster=false`; Farben `InpMusterBullColor`/`…BearColor`.
|
||||
|
||||
## ✅ MUSTER ALS GEFÜLLTE GEOMETRISCHE FORMEN IM MT5-CHART (2026-08-21, v1.47)
|
||||
|
||||
User-Vorgabe: Dreiecke/Rechtecke/Ellipsen über `OBJ_*` an den berechneten
|
||||
Swings verankern, **„mit leichtem Grauton gefüllt"**.
|
||||
|
||||
**Die `PT;`-Zeile trägt jetzt die Geometrie mit:**
|
||||
```
|
||||
PT;<TF>;<name>;<dir>;<trigger>;<ziel>;<form>;<t1>;<p1>;<t2>;<p2>;…
|
||||
```
|
||||
| `form` | Anker | MT5-Objekt | Muster |
|
||||
|---|---|---|---|
|
||||
| `dreieck` | 3 | `OBJ_TRIANGLE` | Doppeltop/-boden, Dreiecke, Keile, Wimpel |
|
||||
| `dreieck2` | 5 | **2×** `OBJ_TRIANGLE` | SKS, inverse SKS, Dreifach-Top/-Boden |
|
||||
| `rechteck` | 2 | `OBJ_RECTANGLE` | Rechteck (Range), Flagge |
|
||||
| `ellipse` | 3 | `OBJ_ELLIPSE` | Tasse+Henkel, inverse Tasse |
|
||||
|
||||
⚠ **`dreieck2` braucht ZWEI Objekte**, weil `OBJ_TRIANGLE` nur drei Punkte
|
||||
kennt. Die Dreiecke (Schulter–Kopf und Kopf–Schulter) kacheln die Silhouette
|
||||
exakt — kein Annähern, keine Überdeckung.
|
||||
|
||||
⚠⚠ **Die Füllung kann KEINEN andersfarbigen Rand haben:** `OBJPROP_FILL`
|
||||
färbt mit `OBJPROP_COLOR`. Deshalb ist die Fläche neutral grau
|
||||
(`InpMusterFill`, `C'205,205,205'`) **und `OBJPROP_BACK`** — sie liegt hinter
|
||||
den Kerzen; die Richtungsaussage tragen die farbige Trigger- und Ziellinie
|
||||
darüber. Das ist auch inhaltlich richtig: die **Form** ist eine Beobachtung,
|
||||
keine Richtungsprognose.
|
||||
|
||||
**Umsetzung Python** (`core/patterns.py`): `add()` nimmt `form` und `punkte`
|
||||
(Bar-Index + Preis) und legt sie als `form`/`anker` in den Muster-dict — **rein
|
||||
additiv**, kein bestehender Schlüssel ändert sich (das Verdict-Gewicht liest
|
||||
ohnehin nur `type`/`dir`/`status`/`quality`).
|
||||
⚠ Neuer Helfer **`_keil()`** für die konvergierenden Muster: er schneidet die
|
||||
beiden Linien und **deckelt den Apex** auf `last_idx + 40` — ein fast
|
||||
paralleles Linienpaar schneidet sich sonst im Unendlichen und spännte ein
|
||||
Dreieck über den halben Chart. Nach links begrenzt auf einen Bar hinter dem
|
||||
letzten Stützpunkt, sonst läge der Apex INNERHALB des Musters und die Form
|
||||
würde sich selbst durchdringen.
|
||||
⚠ `_anker()` rechnet einen Index **jenseits des letzten Bars** über die
|
||||
Bar-Dauer hoch (`T` hat dafür keinen Eintrag). Ohne das wäre der Apex auf den
|
||||
letzten Bar geklemmt und **jedes Dreieck hätte einen senkrechten rechten Rand**.
|
||||
Die Bar-Dauer kommt aus den DATEN (`T[-1]-T[-2]`), nicht aus der TF-Konstante —
|
||||
so stimmt sie auch, wenn der Broker Bars auslässt.
|
||||
⚠ Die Zeitstempel sind **rohe Broker-Zeit** aus `rates["time"]` — genau das,
|
||||
was `iTime()` liefert und was ein `OBJ_*`-Anker erwartet. **Keine
|
||||
Offset-Rechnung**, gleiche Konvention wie `EQ;` und `TR;`.
|
||||
|
||||
✅ **Vor dem Export geprüft, dass Form und Punktzahl zueinander passen** — ein
|
||||
Dreieck mit zwei Punkten würde der Indikator still verwerfen, und der Fehler
|
||||
wäre von außen unsichtbar (dieselbe Klasse wie der `PERIOD_CURRENT`-Fall).
|
||||
✅ **Abwärtsverträglich in beide Richtungen:** eine alte CSV ohne Geometrie
|
||||
fällt still auf „nur Linien" zurück, ein alter Indikator ignoriert die
|
||||
Zusatzfelder.
|
||||
✅ **Gegenprobe an sechs synthetischen Mustern** (Doppeltop, Doppelboden, SKS,
|
||||
Tasse, auf-/absteigendes Dreieck): Form, Punktzahl und aufsteigende Zeitstempel
|
||||
stimmen; der Dreiecks-Apex landet korrekt in der Zukunft.
|
||||
✅ **Live verifiziert:** Snapshot `patterns_tf.M5 = {form: dreieck, anker: 3}`,
|
||||
CSV-Zeile
|
||||
`PT;M5;Doppeltop;bear;87.384;86.814;dreieck;1787327400;87.954;1787328000;87.384;1787330100;87.914`.
|
||||
Abschaltbar wie bisher `InpShowMuster=false`; Füllfarbe `InpMusterFill`.
|
||||
|
||||
Reference in New Issue
Block a user