From e55b866f2951f08b64dc6ec07bd874261cdee609 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Wed, 5 Aug 2026 13:17:18 +0200 Subject: [PATCH] Kachel "Erwartete Spanne" entfernt, Kernwerte komprimiert in die Gesamtempfehlung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Vorgabe. #card-cone/#cone-list raus; neu die einzeilige #vd-cone unter der Bias-Nadel: "erwartete Spanne · 30' 75,99-76,77 · 60' ... · trifft 77 %". Gezeigt wird nur noch das 80-%-Band je Horizont; das enge 50-%-Band und der Erklaer-Absatz stecken im title. Platzierung und Farbe sind Absicht: die Zeile steht UNTER der Nadel und ist neutral/randlos - sie zeigt Streuung, nicht Richtung, und darf optisch nicht mit dem Bias konkurrieren. Beschriftet bleibt sie mit der REAL gemessenen Abdeckung (~77 %), nicht mit dem Nennwert 80 %. Backend unveraendert aktiv (core/cone.py, Snapshot cone, MT5-Export CN;...). Verifiziert am ausgelieferten HTML: card-cone weg, vd-cone da, keine verwaisten JS-Referenzen, Klammern-Balance ok. v=140. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 19 ++++++++++++++++--- web/app.js | 42 +++++++++++++++++++----------------------- web/index.html | 20 +++++++++++--------- web/style.css | 17 +++++++++-------- 4 files changed, 55 insertions(+), 43 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 6de6edf..95c3380 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2377,7 +2377,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: `recommendations.news_score` seit 2026-07-24 wieder BEFÜLLT (war auf None degradiert) → in ein paar Monaten messbar. - **Karten** (Dashboard, von oben): Gesamtempfehlung · **Meldungen** · Marktstruktur · - Chartmuster · Kerzen-Anatomie · Erwartete Spanne · KI-Copilot · + Chartmuster · Kerzen-Anatomie · KI-Copilot · **Statistik (live) ganz unten**. ⚠ **Drei Karten am 2026-08-05 in den Statistik-Tab verschoben (User-Vorgabe, v=138): „Manuelle Trades" (`#card-manual`), „Letzte Trades" (`#card-trades`) und @@ -2664,7 +2664,20 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: Schalter `InpShowArrows`, Farben einzeln. **Der Kegel bleibt im Code** und in der Dashboard-Kachel; der Bot exportiert ihn nur nicht mehr ins Chart (`[trading] export_cone=false`, `true` holt ihn zurück). -- **Wahrscheinlichkeits-Kegel „Erwartete Spanne" (`core/cone.py` + Kachel `#card-cone` +- ⚠ **KACHEL „Erwartete Spanne" ENTFERNT, Kernwerte in die Gesamtempfehlung + gezogen (User-Vorgabe 2026-08-05, v=140).** `#card-cone`/`#cone-list` sind raus; + neu ist die einzeilige `#vd-cone` **unter der Bias-Nadel** in `#card-verdict`: + „📐 erwartete Spanne · 30′ 75,99–76,77 · 60′ 75,82–76,94 · 120′ 75,55–77,21 · + trifft 77 %". Gezeigt wird nur noch das **80 %-Band** je Horizont; das enge + 50 %-Band und der Erklär-Absatz sind entfallen und stecken im `title`. + ⚠ **Platzierung und Farbe sind Absicht:** die Zeile steht UNTER der Nadel und ist + neutral/randlos — sie zeigt **Streuung, nicht Richtung**, und darf optisch nicht + mit dem Bias konkurrieren. Beschriftet bleibt sie mit der **real gemessenen** + Abdeckung (~77 %), nicht mit dem Nennwert 80 %. + **Backend unverändert aktiv** (`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`). + Verifiziert am ausgelieferten HTML (`card-cone` weg, `vd-cone` da, keine verwaisten + JS-Referenzen). +- **Wahrscheinlichkeits-Kegel „Erwartete Spanne" (`core/cone.py` + ehem. Kachel `#card-cone` + MT5 `CN;…`, 2026-07-31): STREUUNG, NICHT RICHTUNG — und out-of-sample kalibriert.** Der User wollte ein „Kursvorhersagemodul, das mögliche Verläufe in MT5 einzeichnet". Eingezeichnete PFADE wurden bewusst NICHT gebaut (suggerieren eine Präzision, die es @@ -2971,7 +2984,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=139** (in `web/index.html` hochzählen, siehe Workflows). +- Asset-Version aktuell **v=140** (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 d72d678..f5546c4 100644 --- a/web/app.js +++ b/web/app.js @@ -383,31 +383,27 @@ function renderCandles(ca) { // mit der REAL gemessenen Abdeckung (~76 %), nicht mit dem Nennwert 80 %. Der Kegel // ist out-of-sample geprüft (analyze_cone.py, Fit H1 → Abdeckung H2) und damit nach // dem P(break)-Modell die zweite kalibrierte Komponente im Projekt. +// ⚠ Seit 2026-08-05 KOMPRIMIERT in der Gesamtempfehlung (`#vd-cone`) statt in einer +// eigenen Karte (User-Vorgabe). Gezeigt wird nur noch das 80 %-Band je Horizont — +// das enge 50 %-Band und der Fließtext sind entfallen und stecken im `title`. function renderCone(cn) { - const el = $("cone-list"); - if (!el) return; + const el = $("vd-cone"); + if (!el) return; // null-sicher (Cache-Regel) const lv = (cn && cn.levels) || []; - if (!lv.length) { - el.innerHTML = ``; - return; - } - const byMin = {}; - lv.forEach(x => { (byMin[x.minutes] = byMin[x.minutes] || {})[x.band] = x; }); - el.innerHTML = Object.keys(byMin).sort((a, b) => a - b).map(mn => { - const b80 = byMin[mn][80], b50 = byMin[mn][50]; - const cov = b80 && b80.coverage != null ? `${fmt(b80.coverage, 0)}%` : "~"; - return `
- ${mn} min - ${b80 ? `${fmt(b80.lo, 2)} … ${fmt(b80.hi, 2)}` : "—"} - trifft ${cov} - ${b50 ? `enger: ${fmt(b50.lo, 2)} … ${fmt(b50.hi, 2)}` : ""} -
`; - }).join("") + - `
📐 Streuung, keine Richtung. Die Spanne sagt, wie - WEIT der Kurs plausibel läuft — nicht wohin. Out-of-sample geprüft - (analyze_cone.py, Fit auf einem Halbjahr, Abdeckung im anderen - gemessen): das nominale 80 %-Band trifft real ~76 %, ist also leicht zu eng. - Kein Signal, kein Einfluss auf die Empfehlung.
`; + const b80 = lv.filter(x => x.band === 80) + .sort((a, b) => a.minutes - b.minutes); + if (!b80.length) { el.innerHTML = ""; return; } + const cov = b80[0].coverage != null ? `${fmt(b80[0].coverage, 0)} %` : "~"; + el.innerHTML = `📐 erwartete Spanne` + + b80.map(x => `${x.minutes}′` + + `${fmt(x.lo, 2)}–${fmt(x.hi, 2)}`).join("") + + `trifft ${cov}`; + // Die Einordnung gehört an die Zahl, nicht in einen Absatz darunter — sonst + // liest jemand die Spanne als Richtungsprognose. + el.title = "STREUUNG, nicht Richtung: wie WEIT der Kurs plausibel läuft, nicht " + + "wohin. 80 %-Band, out-of-sample geprüft (analyze_cone.py, Fit auf einem " + + "Halbjahr, Abdeckung im anderen gemessen) — es trifft real ~76 %, ist also " + + "leicht zu eng. Kein Signal, kein Einfluss auf die Empfehlung."; } function renderPatterns(pt) { diff --git a/web/index.html b/web/index.html index 8d473d6..0faaf70 100644 --- a/web/index.html +++ b/web/index.html @@ -6,7 +6,7 @@ Oil · MT5 - + @@ -90,6 +90,12 @@
+ +
@@ -143,13 +149,9 @@
- -
-

Erwartete Spanne kalibriert · keine Richtung

-
-
- +

KI-Copilot

@@ -287,6 +289,6 @@ - + diff --git a/web/style.css b/web/style.css index 83b6d4e..ea7f469 100644 --- a/web/style.css +++ b/web/style.css @@ -186,14 +186,15 @@ main{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px} .ca-ago{margin-left:auto;font-size:12px;color:var(--dim);font-family:var(--mono)} .ca-bars{font-size:12px;margin-top:3px;font-family:var(--mono);color:var(--dim)} .ca-note{font-size:12px;color:var(--dim);margin-top:3px;line-height:1.4} -/* Erwartete Spanne — neutral, bewusst ohne Richtungsfarbe */ -.cone-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap; - padding:6px 0;border-bottom:1px solid var(--border)} -.cone-row:last-of-type{border-bottom:none} -.cone-h{font-weight:700;font-size:14px;color:var(--bright);min-width:64px} -.cone-band{font-family:var(--mono);font-size:14px;color:var(--bright)} -.cone-band i{font-style:normal;font-size:11px;color:var(--dim);margin-left:6px} -.cone-inner{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--dim)} +/* Erwartete Spanne — komprimiert in der Gesamtempfehlung (2026-08-05, die eigene + Karte ist entfallen). Bewusst OHNE Richtungsfarbe und ohne Rahmen: die Zeile + zeigt Streuung, sie darf optisch nicht mit der Bias-Nadel darüber konkurrieren. */ +.vd-cone{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap; + margin:6px 0 0;padding-top:6px;border-top:1px solid var(--line)} +.vd-cone-lbl{font-size:12px;color:var(--dim)} +.vd-cone-item{font-family:var(--mono);font-size:13px;color:var(--bright)} +.vd-cone-item i{font-style:normal;font-size:11px;color:var(--dim);margin-right:3px} +.vd-cone-cov{margin-left:auto;font-size:11px;color:var(--dim)} #card-verdict{border-color:var(--accent)} .vd-head{display:flex;align-items:center;gap:14px;margin-bottom:10px} .vd-ring{width:60px;height:60px;border-radius:50%;flex:0 0 auto;