Kachel "Erwartete Spanne" entfernt, Kernwerte komprimiert in die Gesamtempfehlung
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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
516f1eaa7f
commit
e55b866f29
@@ -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
|
`recommendations.news_score` seit 2026-07-24 wieder BEFÜLLT (war auf None
|
||||||
degradiert) → in ein paar Monaten messbar.
|
degradiert) → in ein paar Monaten messbar.
|
||||||
- **Karten** (Dashboard, von oben): Gesamtempfehlung · **Meldungen** · Marktstruktur ·
|
- **Karten** (Dashboard, von oben): Gesamtempfehlung · **Meldungen** · Marktstruktur ·
|
||||||
Chartmuster · Kerzen-Anatomie · Erwartete Spanne · KI-Copilot ·
|
Chartmuster · Kerzen-Anatomie · KI-Copilot ·
|
||||||
**Statistik (live) ganz unten**.
|
**Statistik (live) ganz unten**.
|
||||||
⚠ **Drei Karten am 2026-08-05 in den Statistik-Tab verschoben (User-Vorgabe,
|
⚠ **Drei Karten am 2026-08-05 in den Statistik-Tab verschoben (User-Vorgabe,
|
||||||
v=138): „Manuelle Trades" (`#card-manual`), „Letzte Trades" (`#card-trades`) und
|
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
|
Schalter `InpShowArrows`, Farben einzeln. **Der Kegel bleibt im Code** und in der
|
||||||
Dashboard-Kachel; der Bot exportiert ihn nur nicht mehr ins Chart
|
Dashboard-Kachel; der Bot exportiert ihn nur nicht mehr ins Chart
|
||||||
(`[trading] export_cone=false`, `true` holt ihn zurück).
|
(`[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.**
|
+ 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".
|
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
|
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
|
Signal → **Hinweis-Dialog „trotzdem eröffnen?"** (überschreibbar). CLOSE bei
|
||||||
**negativem** P&L → Sicherheitsabfrage; im Plus/Breakeven direkt. Sonst keine
|
**negativem** P&L → Sicherheitsabfrage; im Plus/Breakeven direkt. Sonst keine
|
||||||
Token-Dialoge (`require_token=false`). Audio braucht 1× Nutzer-Tap.
|
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
|
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
|
14→18px). ⚠ Betrifft in `style.css` sowohl `font-size:Npx` (71×) ALS AUCH die
|
||||||
`font:<weight> Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge` —
|
`font:<weight> Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge` —
|
||||||
|
|||||||
+19
-23
@@ -383,31 +383,27 @@ function renderCandles(ca) {
|
|||||||
// mit der REAL gemessenen Abdeckung (~76 %), nicht mit dem Nennwert 80 %. Der Kegel
|
// 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
|
// 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.
|
// 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) {
|
function renderCone(cn) {
|
||||||
const el = $("cone-list");
|
const el = $("vd-cone");
|
||||||
if (!el) return;
|
if (!el) return; // null-sicher (Cache-Regel)
|
||||||
const lv = (cn && cn.levels) || [];
|
const lv = (cn && cn.levels) || [];
|
||||||
if (!lv.length) {
|
const b80 = lv.filter(x => x.band === 80)
|
||||||
el.innerHTML = `<span class="dim">—</span>`;
|
.sort((a, b) => a.minutes - b.minutes);
|
||||||
return;
|
if (!b80.length) { el.innerHTML = ""; return; }
|
||||||
}
|
const cov = b80[0].coverage != null ? `${fmt(b80[0].coverage, 0)} %` : "~";
|
||||||
const byMin = {};
|
el.innerHTML = `<span class="vd-cone-lbl">📐 erwartete Spanne</span>`
|
||||||
lv.forEach(x => { (byMin[x.minutes] = byMin[x.minutes] || {})[x.band] = x; });
|
+ b80.map(x => `<span class="vd-cone-item"><i>${x.minutes}′</i>`
|
||||||
el.innerHTML = Object.keys(byMin).sort((a, b) => a - b).map(mn => {
|
+ `${fmt(x.lo, 2)}–${fmt(x.hi, 2)}</span>`).join("")
|
||||||
const b80 = byMin[mn][80], b50 = byMin[mn][50];
|
+ `<span class="vd-cone-cov">trifft ${cov}</span>`;
|
||||||
const cov = b80 && b80.coverage != null ? `${fmt(b80.coverage, 0)}%` : "~";
|
// Die Einordnung gehört an die Zahl, nicht in einen Absatz darunter — sonst
|
||||||
return `<div class="cone-row">
|
// liest jemand die Spanne als Richtungsprognose.
|
||||||
<span class="cone-h">${mn} min</span>
|
el.title = "STREUUNG, nicht Richtung: wie WEIT der Kurs plausibel läuft, nicht "
|
||||||
<span class="cone-band">${b80 ? `${fmt(b80.lo, 2)} … ${fmt(b80.hi, 2)}` : "—"}
|
+ "wohin. 80 %-Band, out-of-sample geprüft (analyze_cone.py, Fit auf einem "
|
||||||
<i>trifft ${cov}</i></span>
|
+ "Halbjahr, Abdeckung im anderen gemessen) — es trifft real ~76 %, ist also "
|
||||||
<span class="cone-inner">${b50 ? `enger: ${fmt(b50.lo, 2)} … ${fmt(b50.hi, 2)}` : ""}</span>
|
+ "leicht zu eng. Kein Signal, kein Einfluss auf die Empfehlung.";
|
||||||
</div>`;
|
|
||||||
}).join("") +
|
|
||||||
`<div class="pt-disclaimer">📐 <b>Streuung, keine Richtung.</b> Die Spanne sagt, wie
|
|
||||||
WEIT der Kurs plausibel läuft — nicht wohin. Out-of-sample geprüft
|
|
||||||
(<code>analyze_cone.py</code>, 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.</div>`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderPatterns(pt) {
|
function renderPatterns(pt) {
|
||||||
|
|||||||
+11
-9
@@ -6,7 +6,7 @@
|
|||||||
<meta name="theme-color" content="#0d1117">
|
<meta name="theme-color" content="#0d1117">
|
||||||
<title>Oil · MT5</title>
|
<title>Oil · MT5</title>
|
||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
<link rel="stylesheet" href="style.css?v=139">
|
<link rel="stylesheet" href="style.css?v=140">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Modul-Menü (ganz oben) -->
|
<!-- Modul-Menü (ganz oben) -->
|
||||||
@@ -90,6 +90,12 @@
|
|||||||
<div class="vd-modules" id="vd-modules"></div>
|
<div class="vd-modules" id="vd-modules"></div>
|
||||||
<!-- Zeitebenen-Ampel (M1/M5/M15/M30/H1), aus der Welle hierher verschoben -->
|
<!-- Zeitebenen-Ampel (M1/M5/M15/M30/H1), aus der Welle hierher verschoben -->
|
||||||
<div class="tf-turns" id="wave-turns"></div>
|
<div class="tf-turns" id="wave-turns"></div>
|
||||||
|
<!-- Erwartete Spanne, komprimiert (User-Vorgabe 2026-08-05; die eigene Karte
|
||||||
|
`#card-cone` ist dafür entfallen). ⚠ STREUUNG, nicht Richtung — deshalb
|
||||||
|
bewusst UNTER der Bias-Nadel und neutral gefärbt, damit sie nicht als
|
||||||
|
Richtungsaussage gelesen wird. Beschriftet mit der REAL gemessenen
|
||||||
|
Abdeckung, nicht mit dem Nennwert 80 %. -->
|
||||||
|
<div class="vd-cone" id="vd-cone"></div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Meldungen (ex-Position + Wellen-Meldungen; Welle-Karte entfällt) -->
|
<!-- Meldungen (ex-Position + Wellen-Meldungen; Welle-Karte entfällt) -->
|
||||||
@@ -143,13 +149,9 @@
|
|||||||
<div class="ca-list" id="ca-list"><span class="dim">—</span></div>
|
<div class="ca-list" id="ca-list"><span class="dim">—</span></div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Wahrscheinlichkeits-Kegel — Streuung, NICHT Richtung. Out-of-sample
|
<!-- Karte „Erwartete Spanne" ENTFERNT 2026-08-05 (User-Vorgabe) — die Kernwerte
|
||||||
kalibriert (analyze_cone.py); die UI nennt die REAL gemessene Abdeckung -->
|
stehen jetzt komprimiert in der Gesamtempfehlung (`#vd-cone`). Backend
|
||||||
<section class="card wide" id="card-cone">
|
(`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`) ist unverändert aktiv. -->
|
||||||
<h2>Erwartete Spanne <span class="ca-tf">kalibriert · keine Richtung</span></h2>
|
|
||||||
<div class="cone-list" id="cone-list"><span class="dim">—</span></div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- KI-Agent -->
|
<!-- KI-Agent -->
|
||||||
<section class="card wide" id="card-agent">
|
<section class="card wide" id="card-agent">
|
||||||
<h2>KI-Copilot</h2>
|
<h2>KI-Copilot</h2>
|
||||||
@@ -287,6 +289,6 @@
|
|||||||
<div id="toast" class="toast hidden"></div>
|
<div id="toast" class="toast hidden"></div>
|
||||||
|
|
||||||
<script src="lightweight-charts.standalone.production.js?v=114"></script>
|
<script src="lightweight-charts.standalone.production.js?v=114"></script>
|
||||||
<script src="app.js?v=139"></script>
|
<script src="app.js?v=140"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+9
-8
@@ -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-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-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}
|
.ca-note{font-size:12px;color:var(--dim);margin-top:3px;line-height:1.4}
|
||||||
/* Erwartete Spanne — neutral, bewusst ohne Richtungsfarbe */
|
/* Erwartete Spanne — komprimiert in der Gesamtempfehlung (2026-08-05, die eigene
|
||||||
.cone-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
|
Karte ist entfallen). Bewusst OHNE Richtungsfarbe und ohne Rahmen: die Zeile
|
||||||
padding:6px 0;border-bottom:1px solid var(--border)}
|
zeigt Streuung, sie darf optisch nicht mit der Bias-Nadel darüber konkurrieren. */
|
||||||
.cone-row:last-of-type{border-bottom:none}
|
.vd-cone{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
|
||||||
.cone-h{font-weight:700;font-size:14px;color:var(--bright);min-width:64px}
|
margin:6px 0 0;padding-top:6px;border-top:1px solid var(--line)}
|
||||||
.cone-band{font-family:var(--mono);font-size:14px;color:var(--bright)}
|
.vd-cone-lbl{font-size:12px;color:var(--dim)}
|
||||||
.cone-band i{font-style:normal;font-size:11px;color:var(--dim);margin-left:6px}
|
.vd-cone-item{font-family:var(--mono);font-size:13px;color:var(--bright)}
|
||||||
.cone-inner{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--dim)}
|
.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)}
|
#card-verdict{border-color:var(--accent)}
|
||||||
.vd-head{display:flex;align-items:center;gap:14px;margin-bottom:10px}
|
.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;
|
.vd-ring{width:60px;height:60px;border-radius:50%;flex:0 0 auto;
|
||||||
|
|||||||
Reference in New Issue
Block a user