Muster-Bilder ins Dashboard hinter die Meldungen + M15-Karte sagt jetzt, WARUM kein Setup (v=205)

(1) BILDER INS DASHBOARD (User-Vorgabe). Das Raster `#pt-tfgrid` sitzt jetzt in
einer eigenen Karte `#card-muster` direkt hinter der Meldungen-Karte, vor der
Breakout-Karte. VERSCHOBEN, nicht kopiert: eine zweite Kopie haette eine
doppelte Element-ID erzeugt, und getElementById liefert dann immer nur die
erste - die zweite Karte waere still leer geblieben. Im Tab "SIG Live" bleibt
die M30-Detailliste mit Trigger und Kursziel (sie traegt das Verdict-Gewicht
0,25; die Bilder tragen keins).
Geprueft am ausgelieferten HTML: 0 doppelte IDs, pt-tfgrid genau 1x, Reihenfolge
Meldungen -> Muster -> BRK, Tag-Balance 20/20.

(2) "DIE TP IN DER M15 KARTE SIND NICHT MEHR SICHTBAR" - kein Fehler, aber die
Anzeige war schuld. Der Setup-Block verlangt `sb && erl && nah && atr>0`, und
`erl` (die erlaubte Richtung) kommt aus dem VETO. Live steht bias.verboten auf
None, weil M30 flach ist (m30=0) - also gibt es keine erlaubte Richtung, und
ohne Richtung sind Entry Zone, Stop und TP1-3 nicht bestimmbar. Genau so ist es
am 10.08. entschieden worden ("kein Veto - Richtung offen, kein Ziel
bestimmbar").
Der Block verschwand dabei aber KOMMENTARLOS. Ein leeres und ein blockiertes
Feld sahen identisch aus - dieselbe Klasse wie "Slot frei" beim Breakout und wie
das schweigende Trailing, beide heute aus demselben Grund repariert. Jetzt steht
dort: "Kein Setup: kein Trend-Veto (M30 flach) - ohne erlaubte Richtung sind
Entry Zone, Stop und TP nicht bestimmbar." Die beiden anderen Abbruchgruende
(kein Level in Reichweite / ATR fehlt) werden ebenfalls benannt.

Pipeline A-G gruen, 97 Tests, 14 render*-Funktionen laufen durch (Fixture und
leerer Snapshot), deployt und am ausgelieferten HTML verifiziert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-20 22:11:59 +02:00
co-authored by Claude Opus 5
parent 02bede7ef9
commit 06024dd0c1
2 changed files with 34 additions and 10 deletions
+14 -2
View File
@@ -469,7 +469,19 @@ function renderM15(s, snap) {
sb.innerHTML = zl2.join("<br>");
sb.hidden = false;
} else if (sb) {
sb.hidden = true;
// ⚠⚠ NICHT einfach verstecken — sagen, WARUM (User-Meldung 2026-08-20:
// "die TP in der M15 Karte sind nicht mehr sichtbar"). Es war kein
// Fehler: ohne Veto gibt es keine erlaubte Richtung, und ohne Richtung
// sind Entry Zone, Stop und TP1-3 nicht bestimmbar. Ein leeres und ein
// blockiertes Feld sahen bis hierher identisch aus — dieselbe Klasse
// wie "Slot frei" beim Breakout und wie das schweigende Trailing,
// beide am selben Tag aus demselben Grund repariert.
const g = !erl
? "kein Trend-Veto (M30 flach) — ohne erlaubte Richtung sind Entry Zone, "
+ "Stop und TP nicht bestimmbar"
: (!nah ? "kein Level in Reichweite" : "ATR_M15 fehlt noch");
sb.innerHTML = `<span class="dim">Kein Setup: ${g}.</span>`;
sb.hidden = false;
}
}
@@ -2447,7 +2459,7 @@ async function closeSlot(slot, label, pnl) {
// und der Browser zeigte Altes. Statt das jedes Mal von Hand zu diagnostizieren,
// sagt die Seite es jetzt selbst.
// ⚠ Bewusst SICHTBAR statt nur Konsole: die Konsole sieht am Handy niemand.
const _JS_V = "204";
const _JS_V = "205";
{
const htmlV = document.body && document.body.dataset
? document.body.dataset.htmlV : null;
+20 -8
View File
@@ -12,9 +12,9 @@
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
und muss offline funktionieren. -->
<link rel="stylesheet" href="pico.min.css?v=1">
<link rel="stylesheet" href="style.css?v=204">
<link rel="stylesheet" href="style.css?v=205">
</head>
<body data-html-v="204">
<body data-html-v="205">
<!-- Modul-Menü (ganz oben) -->
<nav id="tabs">
<button class="tab active" data-view="dash">Dashboard</button>
@@ -191,6 +191,17 @@
<div class="reasons" id="wave-reasons" title="Die Begründungen, aus denen sich Richtung und Konfidenz zusammensetzen."></div>
</section>
<!-- Chartmuster je Zeitebene als Bild — direkt hinter den Meldungen
(User-Vorgabe 2026-08-20). ⚠ REINE ANZEIGE: die Muster-Klasse ist als
SIGNAL gemessen und verworfen (Ziel-Trefferquote nur 1338 %,
`backtest_patterns.py`), auf M1 am schwaechsten (Spread 0,319×ATR).
Kein Verdict-Gewicht, kein Trade-Trigger — die 0,25 der Gesamtempfehlung
haengen unveraendert allein am M30-Detektor im Tab "SIG Live". -->
<section class="card wide" id="card-muster">
<h2 title="Das jeweils staerkste gerade entstehende Muster je Zeitebene, als Bild. Bestaetigte gehen vor sich bildenden; bei gleichem Status entscheidet die Symmetrie-Guete. Reine Anzeige — als Signal ist die Muster-Klasse gemessen und verworfen (Ziel-Trefferquote 1338 %).">Chartmuster je Zeitebene <span class="pt-tf">reine Anzeige</span></h2>
<div class="pt-tfgrid" id="pt-tfgrid" title="Das jeweils staerkste Muster je Zeitebene, mit Bild. Bestaetigte gehen vor sich bildenden; bei gleichem Status entscheidet die Symmetrie-Guete."></div>
</section>
<!-- Breakout-Autotrader (User-Wunsch 2026-08-19). ⚠ Der autonome Pfad handelt
echtes Geld, seine Abbruchregel (B5) stand bisher NUR im taeglichen
Report. Diese Karte macht ihn sichtbar — Zustand, liegende Orders und
@@ -280,11 +291,12 @@
`forming` zählt halb. Deshalb LIVE, nicht Anzeige. -->
<section class="card wide" id="card-patterns">
<h2 title="Mechanisch erkannte Chartmuster auf M30 mit Trigger und Kursziel. Gewicht 0,25. Die Ziel-Trefferquote liegt gemessen nur bei 1338 % — Kontext, keine Vorhersage.">Chartmuster <span class="pt-tf">M30 · Gewicht 0,25</span></h2>
<!-- Je Zeitebene das gerade entstehende Muster als BILD (User 2026-08-20).
⚠ REINE ANZEIGE: die Muster-Klasse ist als Signal gemessen und
verworfen (Ziel-Trefferquote 1338 %); auf M1 ist sie am schwaechsten,
dort liegt der Spread bei 0,319×ATR. -->
<div class="pt-tfgrid" id="pt-tfgrid" title="Das jeweils staerkste Muster je Zeitebene, mit Bild. Bestaetigte gehen vor sich bildenden; bei gleichem Status entscheidet die Symmetrie-Guete."></div>
<!-- ⚠ Das BILDER-Raster (`#pt-tfgrid`) sitzt seit dem 2026-08-20 im
DASHBOARD, direkt hinter den Meldungen (User-Wunsch). Es steht dort
NUR EINMAL — eine zweite Kopie haette eine doppelte Element-ID
erzeugt, und `getElementById` liefert dann immer nur die erste:
die zweite Karte waere still leer geblieben. Hier bleibt die
M30-Detailliste mit Trigger und Kursziel. -->
<div class="pt-list" id="pt-list" title="Erkannte Muster mit Skizze, Trigger und Kursziel."><span class="dim"></span></div>
</section>
</section>
@@ -433,6 +445,6 @@
</div>
<div id="toast" class="toast hidden"></div>
<script src="app.js?v=204"></script>
<script src="app.js?v=205"></script>
</body>
</html>