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.
|
||||
|
||||
## 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.
|
||||
- **Design-System (`style.css`, Pass 2026-07-15, KEIN Framework — Tailwind bewusst
|
||||
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
|
||||
`recommendations.news_score` seit 2026-07-24 wieder BEFÜLLT (war auf None
|
||||
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 ·
|
||||
Chartmuster · Kerzen-Anatomie · KI-Copilot ·
|
||||
KI-Copilot (jetzt im Tab „SIG Live") ·
|
||||
**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
|
||||
@@ -3014,7 +3038,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=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
|
||||
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` —
|
||||
|
||||
+73
-40
@@ -6,12 +6,18 @@
|
||||
<meta name="theme-color" content="#0d1117">
|
||||
<title>Oil · MT5</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<link rel="stylesheet" href="style.css?v=140">
|
||||
<link rel="stylesheet" href="style.css?v=141">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Modul-Menü (ganz oben) -->
|
||||
<nav id="tabs">
|
||||
<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="stats">Statistik</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>
|
||||
</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
|
||||
stehen jetzt komprimiert in der Gesamtempfehlung (`#vd-cone`). Backend
|
||||
(`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/
|
||||
Logik unverändert aktiv, nur die Anzeige raus) -->
|
||||
@@ -179,6 +147,71 @@
|
||||
</section>
|
||||
</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 -->
|
||||
<section id="view-logs" class="view hidden">
|
||||
<div class="view-head">
|
||||
@@ -289,6 +322,6 @@
|
||||
<div id="toast" class="toast hidden"></div>
|
||||
|
||||
<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>
|
||||
</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
|
||||
diese Regel klebten die verschobenen Karten randlos aneinander und `.wide`
|
||||
(grid-column) liefe ins Leere. */
|
||||
#view-stats > .card{margin:11px 10px}
|
||||
#view-stats > .card:last-child{margin-bottom:74px} /* Platz für die fixe Leiste */
|
||||
#view-stats > .card,
|
||||
#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;
|
||||
text-transform:uppercase;color:var(--dim);font-weight:600}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user