diff --git a/CLAUDE.md b/CLAUDE.md index 3231c88..b90d6b6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3773,7 +3773,32 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: GESAMTEN Render ab (s. Cache-Regel oben), das Dashboard wäre eingefroren. Gegenprobe eingebaut: alle `$("id")`-Zugriffe der `app.js` gegen die IDs der `index.html` geprüft — **0 verwaiste Referenzen**. -- Asset-Version aktuell **v=148** (in `web/index.html` hochzählen, siehe Workflows). +- **⚠⚠ „stark LONG" bei WARTEN — der scheinbare Widerspruch aufgelöst + (User-Fund 2026-08-07, v=149).** Reale Anzeige: Headline `◌ WARTEN · M30`, + darunter „Modul-Konsens: stark LONG · **2 von 2** stimmberechtigten für LONG + (7 ohne Aussage)". Beide Zahlen stimmten, die Kombination war trotzdem + irreführend. Zwei Ursachen, beide behoben: + **(1) Die Headline nannte den Grund nicht.** Der Block stand im Snapshot + (`wave_signal.block = min_conf`, conf 49 gegen die 55-%-Schwelle — die Welle + HATTE eine LONG-Richtung, ihr fehlten sechs Punkte), gerendert wurde er aber + **nur bei `breakout_pending`**. Bei jedem anderen Gate blieb ein nacktes + „WARTEN" stehen. ⚠ Das war meine Lücke vom 06.08.: ich habe die + **Tages-Verteilung** (`#vd-blocks`) gebaut und den **aktuellen** Grund + vergessen. Jetzt steht er an der Headline: „◌ WARTEN · M30 · Konfidenz 49 % < + 55 % — Setup zu schwach" (Mapping für alle neun Gate-Codes). + **(2) „2 von 2" las sich wie Einstimmigkeit.** Es waren **2 von 7** sichtbaren + Modulen — H1 (1,5) und Liq-Trend (0,5) — und die **Welle**, die als einzige die + Order steuert, war nicht dabei. `bias = 1,0` ist arithmetisch korrekt (das + gesamte *sprechende* Gewicht war einig), aber die Basis war winzig. Seit dem + Entmachten von Elliott und Orderbuch (06.08.) tritt das häufiger auf — die + Änderung hat das Problem nicht erzeugt, aber verschärft. + **Neu:** die Zeile führt mit der Basis („2 von 7 Modulen sprechen, alle für + LONG"), das Wort „stark/leicht" entfällt, solange **weniger als die Hälfte** + der Module spricht, und eine stumme Welle wird ausdrücklich genannt + („⚠ die Welle (steuert die Order) schweigt"). + Live gegengerechnet, beide Zeilen erscheinen wie beabsichtigt. + ⚠ Reine Anzeige — an Gewichten, Gates und Order-Logik ist nichts geändert. +- Asset-Version aktuell **v=149** (in `web/index.html` hochzählen, siehe Workflows). Schriftgrößen 2026-07-24 global **+4px** (2× je +2px auf User-Wunsch; Body-Basis 14→18px). ⚠ Betrifft in `style.css` sowohl `font-size:Npx` (71×) ALS AUCH die `font: Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge` — diff --git a/web/app.js b/web/app.js index b425f38..82a9981 100644 --- a/web/app.js +++ b/web/app.js @@ -107,8 +107,28 @@ function renderVerdict(v, snap) { // Stelle, an der der scheinbare Widerspruch entsteht. Jetzt steht er direkt an der // Headline: „◌ WARTEN · M15 · LONG, noch 0.11 bis zur Bestätigung". const bo = (snap && snap.wave && snap.wave.breakout) || null; + const wsig = (snap && snap.wave_signal) || {}; if (sig === "WARTEN" && bo && bo.pending && bo.dir) { head += ` · ${bo.dir}, noch ${fmt(bo.need, 2)} bis zur Bestätigung`; + } else if (sig === "WARTEN" && wsig.block) { + // ⚠ ERGÄNZUNG 2026-08-07: bisher stand der Grund NUR bei + // `breakout_pending` an der Headline — bei jedem anderen Gate blieb dort + // ein nacktes „WARTEN", während die Konsens-Zeile darunter „stark LONG" + // meldete. Genau dieser Widerspruch war der Anlass. Der Grund liegt im + // Snapshot (`wave_signal.block`), er wurde nur nie gezeigt. + const G = { + min_conf: `Konfidenz ${wsig.conf_pct || 0} % < 55 % — Setup zu schwach`, + entry_room: "kein Raum bis zum Gegenlevel", + htf_counter: "höhere Zeitebene steht dagegen", + stretch: "Kurs zu weit von der EMA entfernt", + deadband: "Totband — kein klarer Trend", + dead_hour: "gesperrte Handelsstunde", + eia: "EIA-Blackout", + stale: "Kursdaten veraltet", + no_data: "keine Daten", + }; + const g = G[wsig.block] || wsig.block; + if (g) head += ` · ${g}`; } $("vd-signal").textContent = head; @@ -144,15 +164,29 @@ function renderVerdict(v, snap) { // Module gerade nichts sagen. const refDir = v.ref_dir || null; const silent = typeof v.silent === "number" ? v.silent : null; + // ⚠⚠ KORREKTUR 2026-08-07. „stark LONG · 2 von 2 stimmberechtigten" las sich + // wie Einstimmigkeit — dabei sprachen nur 2 von 9 Modulen, und die WELLE, die + // als einzige die Order steuert, war nicht dabei. `bias` ist arithmetisch + // richtig (das gesamte sprechende Gewicht war einig), aber die BASIS war + // winzig. Seit dem Entmachten von Elliott und Orderbuch (06.08.) trat das + // häufiger auf. Jetzt führt die Zeile mit der Basis und nennt die stumme + // Welle ausdrücklich — das löst den scheinbaren Widerspruch zur Headline auf. + const welleStumm = (v.votes || []).some( + m => m.name === "Welle" && !Number(m.weight)); + const nMod = (v.votes || []).filter(m => m.used !== false).length; let consensus; if (sig === "—") { consensus = "keine Daten"; } else if (!refDir || !total) { - consensus = `Modul-Konsens: ${strength} ${dir} · kein Modul mit klarer Aussage`; + consensus = "Modul-Konsens: kein Modul mit klarer Aussage"; } else { - consensus = `Modul-Konsens: ${strength} ${dir} · ${agree} von ${total} ` - + `stimmberechtigten für ${refDir}` - + (silent ? ` (${silent} ohne Aussage)` : ""); + // „stark/leicht" nur noch, wenn ueberhaupt die Haelfte der Module spricht — + // sonst beschreibt das Wort die Einigkeit von zwei Nebenstimmen. + const dueneBasis = nMod && total < nMod / 2; + consensus = `Modul-Konsens: ${agree} von ${nMod} Modulen sprechen, ` + + `${agree === total ? "alle" : `${agree} davon`} für ${refDir}` + + (dueneBasis ? "" : ` · ${strength} ${dir}`); + if (welleStumm) consensus += " · ⚠ die Welle (steuert die Order) schweigt"; } $("vd-consensus").textContent = consensus + costTxt; $("vd-needle").style.left = ((bias + 1) / 2 * 100).toFixed(1) + "%"; diff --git a/web/index.html b/web/index.html index 422cd23..e509cc2 100644 --- a/web/index.html +++ b/web/index.html @@ -6,7 +6,7 @@ Oil · MT5 - + @@ -330,6 +330,6 @@ - +