Zwei neue Tabs: "SIG Live" und "SIG Anzeige", Module nach WIRKUNG sortiert
User-Vorgabe. Sortiert wird nicht nach Thema, sondern danach, ob ein Modul die Empfehlung bewegt - und das ist am Code pruefbar: engine._verdict ruft add(name, vote, gewicht, ...); Gewicht > 0 heisst Einfluss auf die Bias-Nadel. SIG Live <- KI-Copilot (Gewicht 1,0) · Chartmuster (_PAT_W = 0,25) SIG Anzeige <- Marktstruktur · Kerzen-Anatomie (gemessen ohne Einfluss) Chartmuster landet damit bewusst in "Live", obwohl die Klasse als Signal verworfen wurde - seit 01.08. hat sie 5 % Stimmanteil. "Gewicht" heisst nicht "belegt"; genau deshalb ist die Trennung nach Wirkung sinnvoll: sie zeigt, was die Empfehlung TATSAECHLICH bewegt, unabhaengig von der Beleglage. Auf dem Dashboard bleiben Trade-Leiste, Gesamtempfehlung, Meldungen und Statistik (live). Die Meldungen-Karte enthaelt zwar einflussreiche Teile (Squeeze-Stimme, S/R-Close-Hinweis, Flip-Close), ist aber der Live-Meldungsstrom zum laufenden Trade und gehoert dorthin, wo gehandelt wird. Reiner Markup-Umzug: showView bildet data-view="siglive" auf #view-siglive ab, keine JS-Aenderung noetig. CSS-Regel analog zum Statistik-Tab, weil beide Views ausserhalb des <main>-Grids liegen. Die verschobenen Bloecke wurden aus git zurueckgeholt statt nachgetippt. Verifiziert am ausgelieferten HTML: 7 Tabs, 7 Views, keine doppelten IDs, keine verwaisten JS-Referenzen, section-Tags balanciert. v=141. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
65e12ab264
commit
a13adb891b
@@ -2037,7 +2037,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
|||||||
`pnl>0`-Gate (`history`) noch vom 5-Min-Cooldown betroffen.
|
`pnl>0`-Gate (`history`) noch vom 5-Min-Cooldown betroffen.
|
||||||
|
|
||||||
## Mobile-UI (web/) & Alarme
|
## Mobile-UI (web/) & Alarme
|
||||||
- Aufbau: **Tab-Navigation ganz oben** (sticky: Dashboard/Logs/Statistik/**Charts**/News),
|
- Aufbau: **Tab-Navigation ganz oben** (sticky: Dashboard/**SIG Live**/**SIG Anzeige**/Logs/Statistik/**Charts**/News),
|
||||||
darunter Header.
|
darunter Header.
|
||||||
- **Design-System (`style.css`, Pass 2026-07-15, KEIN Framework — Tailwind bewusst
|
- **Design-System (`style.css`, Pass 2026-07-15, KEIN Framework — Tailwind bewusst
|
||||||
verworfen wegen WireGuard/Offline + kein Node):** Tokens in `:root` — Flächen-Leiter
|
verworfen wegen WireGuard/Offline + kein Node):** Tokens in `:root` — Flächen-Leiter
|
||||||
@@ -2376,8 +2376,32 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
|||||||
Prädiktivität unbelegt (Kalibrier-Messung: H2 nur n=4/6); dafür wird
|
Prädiktivität unbelegt (Kalibrier-Messung: H2 nur n=4/6); dafür wird
|
||||||
`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.
|
||||||
|
- ⚠⚠ **ZWEI NEUE TABS: „SIG Live" und „SIG Anzeige" (User-Vorgabe 2026-08-05,
|
||||||
|
v=141).** Sortiert wird nach **WIRKUNG, nicht nach Thema** — und die Zuordnung ist
|
||||||
|
**am Code prüfbar**, nicht Geschmackssache: `engine._verdict` ruft
|
||||||
|
`add(name, vote, gewicht, …)`; wer ein Gewicht > 0 bekommt, verschiebt die
|
||||||
|
Bias-Nadel und gehört nach „SIG Live".
|
||||||
|
| Tab | Karten | Begründung |
|
||||||
|
|---|---|---|
|
||||||
|
| **SIG Live** | KI-Copilot · Chartmuster | Verdict-Gewicht **1,0** bzw. **0,25** (`_PAT_W`) |
|
||||||
|
| **SIG Anzeige** | Marktstruktur · Kerzen-Anatomie | gemessen **ohne** Einfluss, als Signal verworfen |
|
||||||
|
⚠ **„Gewicht" heißt NICHT „belegt".** Der KI-Copilot hat Stimmrecht, ist aber
|
||||||
|
gemessen nicht robust prädiktiv — genau deshalb ist die Trennung nach Wirkung
|
||||||
|
sinnvoll: sie zeigt, was die Empfehlung TATSÄCHLICH bewegt, unabhängig davon, wie
|
||||||
|
gut es belegt ist. Chartmuster steht aus demselben Grund in „Live", obwohl die
|
||||||
|
Klasse als Signal verworfen wurde — seit dem 2026-08-01 hat sie 5 % Stimmanteil.
|
||||||
|
⚠ **Auf dem Dashboard BLEIBEN** Trade-Leiste, Gesamtempfehlung, Meldungen und
|
||||||
|
Statistik (live). Die „Meldungen"-Karte enthält zwar einflussreiche Teile
|
||||||
|
(Squeeze-Stimme, S/R-Close-Hinweis, Flip-Close), ist aber der **Live-Meldungsstrom
|
||||||
|
zum laufenden Trade** — sie gehört an die Stelle, an der gehandelt wird, nicht in
|
||||||
|
einen Modul-Tab. Wer das anders will, verschiebt `#card-pos`.
|
||||||
|
Umgesetzt als reiner Markup-Umzug (`showView` bildet `data-view="siglive"` auf
|
||||||
|
`#view-siglive` ab, keine JS-Änderung nötig); CSS-Regel `#view-siglive > .card`
|
||||||
|
analog zum Statistik-Tab, weil beide außerhalb des `<main>`-Grids liegen.
|
||||||
|
Verifiziert am ausgelieferten HTML: 7 Tabs, 7 Views, keine doppelten IDs, keine
|
||||||
|
verwaisten JS-Referenzen.
|
||||||
- **Karten** (Dashboard, von oben): Gesamtempfehlung · **Meldungen** · Marktstruktur ·
|
- **Karten** (Dashboard, von oben): Gesamtempfehlung · **Meldungen** · Marktstruktur ·
|
||||||
Chartmuster · Kerzen-Anatomie · KI-Copilot ·
|
KI-Copilot (jetzt im Tab „SIG Live") ·
|
||||||
**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
|
||||||
@@ -3014,7 +3038,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=140** (in `web/index.html` hochzählen, siehe Workflows).
|
- Asset-Version aktuell **v=141** (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` —
|
||||||
|
|||||||
+73
-40
@@ -6,12 +6,18 @@
|
|||||||
<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=140">
|
<link rel="stylesheet" href="style.css?v=141">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Modul-Menü (ganz oben) -->
|
<!-- Modul-Menü (ganz oben) -->
|
||||||
<nav id="tabs">
|
<nav id="tabs">
|
||||||
<button class="tab active" data-view="dash">Dashboard</button>
|
<button class="tab active" data-view="dash">Dashboard</button>
|
||||||
|
<!-- Aufteilung nach WIRKUNG (User-Vorgabe 2026-08-05), nicht nach Thema:
|
||||||
|
„SIG Live" = Module MIT Verdict-Gewicht (fließen in die Empfehlung ein),
|
||||||
|
„SIG Anzeige" = gemessen OHNE Einfluss. Die Trennung ist am Code prüfbar
|
||||||
|
(`_verdict`: `add(...)` mit Gewicht > 0), nicht Geschmackssache. -->
|
||||||
|
<button class="tab" data-view="siglive">SIG Live</button>
|
||||||
|
<button class="tab" data-view="siganzeige">SIG Anzeige</button>
|
||||||
<button class="tab" data-view="logs">Logs</button>
|
<button class="tab" data-view="logs">Logs</button>
|
||||||
<button class="tab" data-view="stats">Statistik</button>
|
<button class="tab" data-view="stats">Statistik</button>
|
||||||
<button class="tab" data-view="charts">Charts</button>
|
<button class="tab" data-view="charts">Charts</button>
|
||||||
@@ -119,47 +125,9 @@
|
|||||||
<div class="kv"><span>Lauf</span><b id="wave-move">—</b></div>
|
<div class="kv"><span>Lauf</span><b id="wave-move">—</b></div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Marktstruktur (M30) — reine Anzeige, kein Signal -->
|
|
||||||
<section class="card wide" id="card-structure">
|
|
||||||
<h2>Marktstruktur <span class="ms-tf">M30</span></h2>
|
|
||||||
<div class="ms-top">
|
|
||||||
<span class="ms-trend" id="ms-trend">—</span>
|
|
||||||
<div class="ms-swings" id="ms-swings"></div>
|
|
||||||
</div>
|
|
||||||
<div class="ms-bos" id="ms-bos"></div>
|
|
||||||
<div class="ms-chan" id="ms-chan">
|
|
||||||
<div class="ms-chan-head"><span id="ms-chan-dir">—</span>
|
|
||||||
<span class="ms-chan-note" id="ms-chan-note"></span></div>
|
|
||||||
<div class="ms-chan-track"><div class="ms-chan-fill" id="ms-chan-fill"></div>
|
|
||||||
<div class="ms-chan-dot" id="ms-chan-dot"></div></div>
|
|
||||||
<div class="ms-chan-scale"><span>Kanal unten</span><span>oben</span></div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Chartmuster (visuell) — reine Anzeige, kein Signal (noch nicht backtestet) -->
|
|
||||||
<section class="card wide" id="card-patterns">
|
|
||||||
<h2>Chartmuster <span class="pt-tf">M30 · visuell</span></h2>
|
|
||||||
<div class="pt-list" id="pt-list"><span class="dim">—</span></div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Kerzen-Anatomie (M5) — reine Anzeige; die Lehrbuch-Deutung ist gemessen
|
|
||||||
invertiert, deshalb steht die GEMESSENE Lesart im Hinweistext -->
|
|
||||||
<section class="card wide" id="card-candles">
|
|
||||||
<h2>Kerzen-Anatomie <span class="ca-tf">M5 · nur Anzeige</span></h2>
|
|
||||||
<div class="ca-list" id="ca-list"><span class="dim">—</span></div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Karte „Erwartete Spanne" ENTFERNT 2026-08-05 (User-Vorgabe) — die Kernwerte
|
<!-- Karte „Erwartete Spanne" ENTFERNT 2026-08-05 (User-Vorgabe) — die Kernwerte
|
||||||
stehen jetzt komprimiert in der Gesamtempfehlung (`#vd-cone`). Backend
|
stehen jetzt komprimiert in der Gesamtempfehlung (`#vd-cone`). Backend
|
||||||
(`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`) ist unverändert aktiv. -->
|
(`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`) ist unverändert aktiv. -->
|
||||||
<!-- KI-Agent -->
|
|
||||||
<section class="card wide" id="card-agent">
|
|
||||||
<h2>KI-Copilot</h2>
|
|
||||||
<div class="signal" id="agent-bias">◌ —</div>
|
|
||||||
<div class="agent-head" id="agent-head"></div>
|
|
||||||
<div class="agent-text" id="agent-reason"></div>
|
|
||||||
<ul class="risks" id="agent-risks"></ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Trailing (Dashboard-Kachel ausgeblendet 2026-07-22, User-Vorgabe; Backend/
|
<!-- Trailing (Dashboard-Kachel ausgeblendet 2026-07-22, User-Vorgabe; Backend/
|
||||||
Logik unverändert aktiv, nur die Anzeige raus) -->
|
Logik unverändert aktiv, nur die Anzeige raus) -->
|
||||||
@@ -179,6 +147,71 @@
|
|||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<!-- ══ SIG LIVE — Module MIT Verdict-Gewicht (fließen in die Empfehlung ein) ══
|
||||||
|
Die Zuordnung ist am Code prüfbar: `engine._verdict` ruft `add(name, vote,
|
||||||
|
gewicht, …)`. Wer hier steht, hat ein Gewicht > 0 und verschiebt die
|
||||||
|
Bias-Nadel. ⚠ Gewicht heißt NICHT „belegt": der KI-Copilot ist gemessen
|
||||||
|
nicht robust prädiktiv, hat aber Stimmrecht — genau deshalb ist die
|
||||||
|
Trennung nach WIRKUNG und nicht nach Beleglage sinnvoll. -->
|
||||||
|
<section id="view-siglive" class="view hidden">
|
||||||
|
<div class="view-head">
|
||||||
|
<h2>SIG Live</h2>
|
||||||
|
<span class="view-note">Module mit Einfluss auf die Gesamtempfehlung</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- KI-Agent — Verdict-Gewicht 1,0 bei gerichteter Aussage, 0 bei NEUTRAL -->
|
||||||
|
<section class="card wide" id="card-agent">
|
||||||
|
<h2>KI-Copilot <span class="ca-tf">Gewicht 1,0</span></h2>
|
||||||
|
<div class="signal" id="agent-bias">◌ —</div>
|
||||||
|
<div class="agent-head" id="agent-head"></div>
|
||||||
|
<div class="agent-text" id="agent-reason"></div>
|
||||||
|
<ul class="risks" id="agent-risks"></ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Chartmuster — Verdict-Gewicht `_PAT_W`=0,25 (User-Vorgabe „5 %" 2026-08-01);
|
||||||
|
`forming` zählt halb. Deshalb LIVE, nicht Anzeige. -->
|
||||||
|
<section class="card wide" id="card-patterns">
|
||||||
|
<h2>Chartmuster <span class="pt-tf">M30 · Gewicht 0,25</span></h2>
|
||||||
|
<div class="pt-list" id="pt-list"><span class="dim">—</span></div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- ══ SIG ANZEIGE — gemessen OHNE Einfluss auf die Empfehlung ══════════════
|
||||||
|
Kein Verdict-Gewicht, kein Trade-Trigger. Beide Module wurden als Signal
|
||||||
|
gemessen und verworfen; sie bleiben als Kontext, nicht als Entscheidung. -->
|
||||||
|
<section id="view-siganzeige" class="view hidden">
|
||||||
|
<div class="view-head">
|
||||||
|
<h2>SIG Anzeige</h2>
|
||||||
|
<span class="view-note">reine Anzeige — gemessen ohne Einfluss</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Marktstruktur (M30) — Signalvariante gemessen verworfen
|
||||||
|
(backtest_structure.py + backtest_structure_tf.py: 24/24 Zellen negativ) -->
|
||||||
|
<section class="card wide" id="card-structure">
|
||||||
|
<h2>Marktstruktur <span class="ms-tf">M30 · nur Anzeige</span></h2>
|
||||||
|
<div class="ms-top">
|
||||||
|
<span class="ms-trend" id="ms-trend">—</span>
|
||||||
|
<div class="ms-swings" id="ms-swings"></div>
|
||||||
|
</div>
|
||||||
|
<div class="ms-bos" id="ms-bos"></div>
|
||||||
|
<div class="ms-chan" id="ms-chan">
|
||||||
|
<div class="ms-chan-head"><span id="ms-chan-dir">—</span>
|
||||||
|
<span class="ms-chan-note" id="ms-chan-note"></span></div>
|
||||||
|
<div class="ms-chan-track"><div class="ms-chan-fill" id="ms-chan-fill"></div>
|
||||||
|
<div class="ms-chan-dot" id="ms-chan-dot"></div></div>
|
||||||
|
<div class="ms-chan-scale"><span>Kanal unten</span><span>oben</span></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Kerzen-Anatomie (M5) — 3× als Signal gemessen und verworfen; die
|
||||||
|
Lehrbuch-Deutung ist invertiert, deshalb steht die GEMESSENE Lesart im
|
||||||
|
Hinweistext und die Kachel ist bewusst neutral gefärbt. -->
|
||||||
|
<section class="card wide" id="card-candles">
|
||||||
|
<h2>Kerzen-Anatomie <span class="ca-tf">M5 · nur Anzeige</span></h2>
|
||||||
|
<div class="ca-list" id="ca-list"><span class="dim">—</span></div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
<!-- Logs -->
|
<!-- Logs -->
|
||||||
<section id="view-logs" class="view hidden">
|
<section id="view-logs" class="view hidden">
|
||||||
<div class="view-head">
|
<div class="view-head">
|
||||||
@@ -289,6 +322,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=140"></script>
|
<script src="app.js?v=141"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+9
-2
@@ -102,8 +102,15 @@ main{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px}
|
|||||||
ein Grid mit eigenem padding, `#view-stats` ist eine schlichte <section> — ohne
|
ein Grid mit eigenem padding, `#view-stats` ist eine schlichte <section> — ohne
|
||||||
diese Regel klebten die verschobenen Karten randlos aneinander und `.wide`
|
diese Regel klebten die verschobenen Karten randlos aneinander und `.wide`
|
||||||
(grid-column) liefe ins Leere. */
|
(grid-column) liefe ins Leere. */
|
||||||
#view-stats > .card{margin:11px 10px}
|
#view-stats > .card,
|
||||||
#view-stats > .card:last-child{margin-bottom:74px} /* Platz für die fixe Leiste */
|
#view-siglive > .card,
|
||||||
|
#view-siganzeige > .card{margin:11px 10px}
|
||||||
|
#view-stats > .card:last-child,
|
||||||
|
#view-siglive > .card:last-child,
|
||||||
|
#view-siganzeige > .card:last-child{margin-bottom:74px} /* Platz für die fixe Leiste */
|
||||||
|
/* Untertitel in der View-Kopfzeile: sagt in einem Halbsatz, wonach der Tab
|
||||||
|
sortiert ist — ohne ihn ist „SIG Live" vs. „SIG Anzeige" nicht selbsterklärend. */
|
||||||
|
.view-note{font-size:12px;color:var(--dim);margin-left:auto}
|
||||||
.card h2{margin:0 0 9px;font-size:14px;letter-spacing:1.5px;
|
.card h2{margin:0 0 9px;font-size:14px;letter-spacing:1.5px;
|
||||||
text-transform:uppercase;color:var(--dim);font-weight:600}
|
text-transform:uppercase;color:var(--dim);font-weight:600}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user