Chartmuster je Zeitebene als Bild + M1/M5 in der Meldungskarte (v=204)

User-Vorgabe: die hinterlegten Muster-Bilder sollen je Minuten-Chart das
gerade entstehende Muster zeigen, M1 und M5 zusaetzlich in der Meldungskarte.

BILDER: 15 Vorlagen aus /Chartmuster, 436-611 KB je Stueck (7,5 MB gesamt).
Das Dashboard uebertraegt ~14 KB je Snapshot ueber WireGuard - ein Originalbild
waere das 40-fache. Verkleinert auf 520 px / JPEG q80 nach web/muster/:
7,5 MB -> 379 KB (Faktor 20), im Frontend zusaetzlich loading="lazy".
Die Originale sind gitignored, nur die Web-Fassungen kommen ins Repo.

DETEKTOR: core/patterns.py bekommt die Zeitebene als PARAMETER. Der Default
bleibt M30 und damit bitgleich - `PatternDetector()` speist das Verdict-Gewicht
0,25, eine stille Verschiebung dort waere eine Strategie-Aenderung durch die
Hintertuer. Daneben laufen vier weitere Instanzen (M1/M5/M15/H1) mit
gestaffelten Refresh-Zeiten (20/25/35/60 s), damit sie den mt5_lock nicht im
Pulk belegen. Sie haben KEINE Stimme.

Neu Snapshot `patterns_tf`: je Zeitebene das STAERKSTE Muster (bestaetigte vor
sich bildenden, dann Symmetrie-Guete; ungueltige fallen raus) samt Bildnamen
ueber die Karte `patterns.BILD`.
Doppeltop/-boden, Dreifach-Top/-Boden und Flagge bull/baer teilen sich je ein
Bild (die Vorlagen zeigen beide Richtungen); `inv_cup` bekommt KEINS - lieber
kein Bild als ein falsches.

⚠⚠ REINE ANZEIGE, und das steht auch dran. Die Muster-Klasse ist als SIGNAL
gemessen und verworfen (Ziel-Trefferquote nur 13-38 %, backtest_patterns.py),
und auf M1 ist sie am schwaechsten: dort liegt der Spread bei 0,319xATR, ein
Muster ueber wenige Bars ist weitgehend Rauschen. Kein Verdict-Gewicht, kein
Trade-Trigger; die Tooltips nennen die Messung.

⚠ Beim Bau zwei eigene Fehler gefangen: (1) ich hatte die Feldnamen GERATEN -
es heisst `type`, nicht `typ`, und der Status ist "confirmed"/"forming"/
"invalidated". Ein falscher Schluessel haette still None geliefert, die Karte
waere leer geblieben ohne jede Fehlermeldung. (2) Der Emoji-Surrogat-Abbruch
zum sechsten Mal - die .tmp-Regel hat app.js erneut gerettet (0 Bytes verhindert),
danach mit literalen Zeichen statt \u-Escapes geschrieben.

Live verifiziert: M1 Doppelboden, M5 Tasse+Henkel, M15 aufsteigendes Dreieck,
M30 Doppeltop; alle Bilder HTTP 200 (22-28 KB). Pipeline A-G gruen, 97 Tests,
14 render*-Funktionen laufen durch.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-20 22:05:18 +02:00
co-authored by Claude Opus 5
parent fd2ca46dc0
commit 02bede7ef9
22 changed files with 798 additions and 11 deletions
+24
View File
@@ -710,3 +710,27 @@ main{padding-bottom:4.1111rem} /* Platz für die fixe Leiste */
/* ⚠ Blinken uebernommen vom entfernten CLOSE-Knopf — sonst haette der
Close-Alarm seine Sichtbarkeit verloren und nur noch gepiept. */
.px-close.blink{animation:blkClose .6s ease-in-out infinite}
/* ── Chartmuster je Zeitebene (User 2026-08-20) ────────────────────────────
⚠ Bilder sind 520×284 und werden auf die Zellbreite skaliert. Das Raster
passt sich selbst an (auto-fit), damit es am Handy einspaltig und am
Desktop mehrspaltig laeuft — ohne zweite Media-Query. */
.pt-tfgrid{
display:grid; gap:0.5556rem; margin:0 0 0.6667rem;
grid-template-columns:repeat(auto-fit, minmax(9.4444rem, 1fr));
}
.pt-tfcell{
display:flex; flex-direction:column; gap:0.1667rem;
background:var(--surface-2); border:1px solid var(--border);
border-radius:var(--r); padding:0.3889rem;
}
.pt-tfcell.best{border-color:#4a3600}
.pt-tfcell.leer{opacity:.55; justify-content:center; min-height:4.4444rem;
align-items:center; text-align:center}
.pt-tflbl{font:600 0.7222rem/1 var(--mono); color:var(--dim); letter-spacing:.04em}
.pt-img{width:100%; height:auto; border-radius:var(--r-sm); display:block;
background:#0d1117}
.pt-img.leer{height:3.3333rem; display:flex; align-items:center;
justify-content:center; font-size:0.6667rem; color:var(--dim)}
.pt-tfname{font-size:0.7778rem; font-weight:600; line-height:1.2}
.pt-tfst{font-size:0.6667rem; color:var(--dim); font-family:var(--mono)}