From df092674cb8b72e3dafdee42e231e01e10bffde6 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Fri, 31 Jul 2026 15:37:37 +0200 Subject: [PATCH] Konsens-Zeile korrigiert: falscher Bezug + Nenner passte nicht zu den Chips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Fund: "Modul-Konsens: stark LONG · 4/4 Module fuer WARTEN" - dabei sind 9 Module sichtbar. Zwei echte Fehler. (a) FALSCHER BEZUG: der Text lautete "... Module fuer ${sig}" mit der HEADLINE als Bezug. Seit dem ref-Fix vom 30.07. zaehlt `agree` bei WARTEN aber die Uebereinstimmung mit der BIAS-Richtung - deshalb stand dort "stark LONG ... fuer WARTEN". Die Richtung kommt jetzt als verdict.ref_dir vom Backend, statt im Frontend aus `bias` nachgebaut zu werden (dort galt ein +-0,05-Totband, im Backend `bias > 0` - die Nachbildung waere am Rand auseinandergelaufen; dieselbe Sorte Divergenz wie die fuenf Deployment-Drift-Faelle desselben Tages). (b) ANDERER NENNER ALS DIE CHIPS: `total` zaehlt nur Module MIT Aussage (Gewicht>0, ohne die Welle). Nach den Gewichts-Fixes des Tages schweigen deutlich mehr Module -> "4/4" bei 9 sichtbaren Chips. Neu ist verdict.silent (Module mit Gewicht 0) dabei, sodass die Summe aufgeht. Live verifiziert: "Modul-Konsens: leicht LONG · 3 von 5 stimmberechtigten fuer LONG (4 ohne Aussage)" - 5 + 4 = 9. Sonderfall "kein Modul mit klarer Aussage" abgedeckt. v=125. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 17 ++++++++++++++++- core/engine.py | 12 ++++++++++++ web/app.js | 26 ++++++++++++++++++++++---- web/index.html | 4 ++-- 4 files changed, 52 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 007295c..1155569 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1417,6 +1417,21 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: sobald dort jemand Logging ergänzt (Phantom-Fehler im ~5-s-Takt). ✅ **Sauber:** Frontend↔Backend (0 verwaiste Element-IDs), alle übrigen Verdict-Gewichte, alle anderen Config-Schlüssel. + ⚠ **KONSENS-ZEILE korrigiert (2026-07-31, User-Fund „4/4 Module — dabei haben wir + doch 9"):** In `vd-consensus` steckten ZWEI Fehler. + **(a) Falscher Bezug:** der Text lautete `… Module für ${sig}` mit der HEADLINE als + Bezug. Seit dem `ref`-Fix vom 30.07. zählt `agree` bei WARTEN aber die Übereinstimmung + mit der **Bias-Richtung** — deshalb stand real dort „stark LONG · 4/4 Module für + **WARTEN**". Die Richtung kommt jetzt als **`verdict.ref_dir`** vom Backend, statt im + Frontend aus `bias` nachgebaut zu werden (dort galt ein ±0,05-Totband, im Backend + `bias > 0` — die Nachbildung wäre am Rand auseinandergelaufen; dieselbe Sorte + Divergenz wie die fünf Deployment-Drift-Fälle desselben Tages). + **(b) Anderer Nenner als die sichtbaren Chips:** `total` zählt nur Module MIT Aussage + (Gewicht > 0, ohne die Welle). Nach den Gewichts-Fixes des Tages schweigen deutlich + mehr Module → „4/4" bei 9 sichtbaren Chips. Neu ist **`verdict.silent`** (Module mit + Gewicht 0) dabei, sodass die Summe aufgeht. Live: „**3 von 5 stimmberechtigten für + LONG (4 ohne Aussage)**" — 5 + 4 = 9 ✅. Bei gar keiner Aussage: „kein Modul mit + klarer Aussage". v=125. ⚠ **Offen (dokumentiert, nicht geändert):** (0) **Wellen-Konfidenz aus `_draw_levels` speisen** statt aus dem Misch-Set — würde den −12-Abzug tatsächlich auslösen, also Konfidenz senken und das 55%-Gate @@ -1951,7 +1966,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: Signal → **Hinweis-Dialog „trotzdem eröffnen?"** (überschreibbar). CLOSE bei **negativem** P&L → Sicherheitsabfrage; im Plus/Breakeven direkt. Sonst keine Token-Dialoge (`require_token=false`). Audio braucht 1× Nutzer-Tap. -- Asset-Version aktuell **v=124** (in `web/index.html` hochzählen, siehe Workflows). +- Asset-Version aktuell **v=125** (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/core/engine.py b/core/engine.py index b9e22db..a460c28 100644 --- a/core/engine.py +++ b/core/engine.py @@ -2390,6 +2390,18 @@ class TradingEngine: "headline": wsig, "conf": (wave_signal or {}).get("conf_pct", 0), "tf": (wave_snap or {}).get("tf"), # Zeitebene, für die die Empfehlung gilt "bias": round(bias, 3), "agree": agree, "total": len(others), + # ⚠ `ref_dir` = WORAUF sich `agree` bezieht (Fix 2026-07-31). Bei WARTEN + # ist das NICHT die Headline, sondern die Bias-Richtung — das Frontend + # beschriftete es vorher mit der Headline und schrieb dadurch + # „stark LONG · 4/4 Module für WARTEN". Die Richtung kommt jetzt VON HIER, + # statt im Frontend aus `bias` nachgebaut zu werden (dort galt ein + # ±0,05-Totband, hier `bias > 0` — die Nachbildung wäre am Rand + # auseinandergelaufen; genau die Sorte Divergenz, die heute mehrfach + # aufgefallen ist). + "ref_dir": "LONG" if ref > 0 else "SHORT" if ref < 0 else None, + # Wie viele Module HABEN gerade keine Aussage (Gewicht 0)? Ohne diese Zahl + # las sich „4/4" widersprüchlich zu den 9 sichtbaren Chips. + "silent": sum(1 for v in votes if not v["weight"]), "votes": votes, } diff --git a/web/app.js b/web/app.js index def5ac4..f28159a 100644 --- a/web/app.js +++ b/web/app.js @@ -121,10 +121,28 @@ function renderVerdict(v, snap) { const tag = cr < 0.20 ? "✅ günstig" : cr <= 0.32 ? "· normal" : "⚠ teuer"; costTxt = ` · Kosten ${fmt(cr, 2)}×ATR ${tag}`; } - $("vd-consensus").textContent = - (sig === "—" ? "keine Daten" - : `Modul-Konsens: ${strength} ${dir} · ${agree}/${total} Module für ${sig}`) - + costTxt; + // ⚠ Konsens-Zeile korrigiert (2026-07-31). Zwei Fehler waren drin: + // (1) „… Module für ${sig}" nahm die HEADLINE als Bezug. Seit dem Fix vom 30.07. + // zählt `agree` bei WARTEN aber die Übereinstimmung mit der BIAS-Richtung → + // es stand „stark LONG · 4/4 Module für WARTEN". Die Richtung kommt jetzt als + // `ref_dir` vom Backend, statt hier aus `bias` nachgebaut zu werden. + // (2) `total` zählt nur Module MIT Aussage (Gewicht>0, ohne die Welle) — nach den + // Gewichts-Fixes schweigen mehr Module, während 9 Chips sichtbar bleiben. + // „4/4" las sich dadurch widersprüchlich. Jetzt steht dabei, wie viele + // Module gerade nichts sagen. + const refDir = v.ref_dir || null; + const silent = typeof v.silent === "number" ? v.silent : null; + let consensus; + if (sig === "—") { + consensus = "keine Daten"; + } else if (!refDir || !total) { + consensus = `Modul-Konsens: ${strength} ${dir} · kein Modul mit klarer Aussage`; + } else { + consensus = `Modul-Konsens: ${strength} ${dir} · ${agree} von ${total} ` + + `stimmberechtigten für ${refDir}` + + (silent ? ` (${silent} ohne Aussage)` : ""); + } + $("vd-consensus").textContent = consensus + costTxt; $("vd-needle").style.left = ((bias + 1) / 2 * 100).toFixed(1) + "%"; // Modul-Chips diff --git a/web/index.html b/web/index.html index e491aaf..8223ede 100644 --- a/web/index.html +++ b/web/index.html @@ -6,7 +6,7 @@ Oil · MT5 - + @@ -244,6 +244,6 @@ - +