User: "Baue ein Eingabefeld im Dashboard ein in welchem ich das Margin Verhaeltnis von M15 / BRK manuell setzen kann". ⚠⚠ EHRLICHE EINORDNUNG, weil die Umsetzung NICHT ist, wonach es klingt: eine GLEICHZEITIGE Aufteilung (z.B. 40 % manuell / 50 % reserviert fuer BRK) ist heute nicht baubar. Der Bot haelt EINE Position - _check_auto_squeeze feuert "nur FLAT", und Trailing, Notfall-Stop, S/R-Close, Time-Stop und Breaker verwalten je EINE Position (42 Einzel-Positions-Annahmen in engine.py, 25 in trader.py). Mit zwei Positionen auf demselben Symbol haengt der GESAMTE Schutz-Stack an einer davon, die andere liefe ungeschuetzt. Das ist kein Aufwands-, sondern ein Sicherheitsargument. GEBAUT ist deshalb das, was heute wirkt und dieselbe Frage beantwortet: je Pfad ein eigener Einsatz-Prozentsatz. 0 = globaler Wert (bisheriges Verhalten). Quellen-abhaengig verdrahtet wie die SL-Zeitebene seit 05.08.: _open() setzt config.MARGIN_BUFFER fuer die Dauer des einen Aufrufs und stellt ihn im finally-Zweig zurueck. Manuelle Trades bleiben beim globalen Wert (der Mensch ist die gemessen bessere Population, +1,56 gegen -4,71 EUR/Lot). ⚠ Direkt gesetzt statt ueber set_margin_buffer(): das loggt je Trade eine Zeile UND wuerde den globalen Wert dauerhaft ueberschreiben. ⚠⚠ ZWEI ECHTE FEHLER VOM LINTER GEFANGEN, die py_compile durchgewinkt hat: "config" war in engine.py gar nicht importiert (nur Einzelnamen via "from core.config import ..."), und in server.py hiess die Engine "eng" statt "app.state.engine". Beide sassen in Pfaden, die erst beim ERSTEN autonomen Trade bzw. beim ersten Klick gefeuert haetten - also genau die Klasse, fuer die ruff F821 am 07.08. eingebaut wurde. ⚠ Frontend: $streng statt $, weil LEER hier ausdruecklich 0 = "global" bedeutet und nicht "unveraendert"; mit dem Auffang-Element waere .value undefined -> NaN -> null. Der Render ueberschreibt das Feld nicht, solange es den Fokus hat (sonst frisst der 1-s-Snapshot die laufende Eingabe). ⚠ Beim Committen selbst zweimal danebengegriffen, beides dokumentiert weil es Fehlerklassen sind: (a) Backticks in einer Bash-Commit-Nachricht werden als Kommando-Substitution ausgefuehrt und loeschen die eingeklammerten Namen aus dem Text; (b) ein Bash-Pfad (/c/Users/...) an Python uebergeben schlaegt fehl, und "git commit --amend -F <fehlende Datei>" nahm daraufhin eine STALE COMMIT_EDITMSG - die Nachricht eines fremden Commits. Der Code war davon nie betroffen (Arbeitsbaum sauber, Remote synchron), nur die Beschriftung. Ende-zu-Ende geprueft: 50/25 gesetzt -> Snapshot -> persistiert; 150 abgelehnt; 0/0 zurueck. Deploy ueber tools/deploy.py --feld margin_brk, alle 5 Schritte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
398 lines
29 KiB
HTML
398 lines
29 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de" data-theme="dark">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<meta name="theme-color" content="#0d1117">
|
||
<title>Oil · MT5</title>
|
||
<link rel="manifest" href="manifest.json">
|
||
<!-- ⚠ Pico ZUERST: es liefert die Basis (Typografie, Formulare,
|
||
Buttons, Fokus-Ringe). `style.css` kommt DANACH und gewinnt bei
|
||
Konflikten — die ~60 Trading-Klassen bleiben unveraendert.
|
||
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
|
||
und muss offline funktionieren. -->
|
||
<link rel="stylesheet" href="pico.min.css?v=1">
|
||
<link rel="stylesheet" href="style.css?v=182">
|
||
</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="news">News</button>
|
||
<button class="tab mute-tab" id="mute-btn" title="Töne an/aus">🔊</button>
|
||
</nav>
|
||
|
||
<header id="top">
|
||
<div class="sym-row">
|
||
<span id="symbol">—</span>
|
||
<div class="hdr-right">
|
||
<div class="hdr-meta">
|
||
<span id="hdr-clock" class="hdr-clock">—</span>
|
||
<span id="session" class="session-line dim">—</span>
|
||
</div>
|
||
<span id="conn" class="dot off" title="Verbindung"></span>
|
||
</div>
|
||
</div>
|
||
<div class="price-row">
|
||
<div class="px"><label title="Kontostand ohne die offene Position.">BALANCE</label><span id="balance">—</span></div>
|
||
<div class="px"><label title="Realisiertes Ergebnis von heute. Brutto — die Quellensteuer wird größtenteils erstattet und ist hier nicht abgezogen.">TAG P/L</label><span id="day-pl">—</span></div>
|
||
<div class="px"><label title="Kontostand einschließlich der offenen Position.">EQUITY</label><span id="equity">—</span></div>
|
||
<div class="px"><label id="hdr-price-lbl" title="Der Kurs, zu dem tatsächlich gehandelt wird. Steht er länger als 3 Minuten still, gilt der Markt als geschlossen und das Label zeigt ZU.">PEPPERSTONE KURS</label><span id="hdr-price">—</span></div>
|
||
<!-- Hyperliquid-Kurs NEBEN dem Broker-Kurs (User 2026-08-01). HL handelt 24/7,
|
||
Pepperstone nicht — am Wochenende der einzige lebende Kurs. Basis-korrigiert,
|
||
also direkt vergleichbar. Beide Quellen AUSGESCHRIEBEN (User 2026-08-01):
|
||
„KURS"/„HL" ließ offen, welcher Kurs woher kommt. -->
|
||
<div class="px" id="px-hl"><label title="Roher Kurs des Hyperliquid-Öl-Perps — läuft 24/7, auch wenn Pepperstone geschlossen ist. Anderer Kontrakt, deshalb nicht identisch; der Tooltip am Wert nennt die umgerechnete Entsprechung.">HYPERLIQUID KURS</label><span id="hdr-hl">—</span></div>
|
||
<div class="px"><label title="Gewinn/Verlust der offenen Position, NETTO nach Quellensteuer. Bei geschlossenem Markt eine Schätzung auf Basis des Hyperliquid-Kurses (mit ≈ markiert).">G/V</label><span id="hdr-pnl">—</span></div>
|
||
</div>
|
||
</header>
|
||
|
||
<main id="view-dash" class="view">
|
||
<!-- Circuit Breaker (Tagesverlust-Stopp) — roter Banner, nur wenn ausgelöst/nah -->
|
||
<div id="circuit-banner" class="circuit hidden"></div>
|
||
<!-- Aktueller Trade (nur bei offener Position) — Anzeige + SL/TP/Close editierbar -->
|
||
<section class="card wide trade-bar hidden" id="trade-bar">
|
||
<h2 class="tb-title" title="Der aktuell offene Trade. SL, TP und die Close-Schwellen sind hier direkt editierbar — Enter oder Verlassen des Feldes sendet.">aktueller Trade läuft <span class="tb-runtime" id="tb-runtime"></span></h2>
|
||
<div class="tb-row">
|
||
<span class="tb-field"><label title="Wie lange der Trade schon läuft. Ab 2 Stunden bernstein — dann greift der Time-Stop, falls der Trade nie in die Gewinnphase kam.">Laufzeit</label>
|
||
<b class="tb-val" id="tb-dur">—</b></span>
|
||
<span class="tb-field"><label title="LONG = auf steigende Kurse, SHORT = auf fallende.">Richtung</label>
|
||
<b class="tb-val tb-dir" id="tb-dir">—</b></span>
|
||
<span class="tb-field"><label title="Positionsgröße. Ergibt sich aus dem Einsatz-Feld in der Order-Leiste.">Lots</label>
|
||
<b class="tb-val" id="tb-lots">—</b></span>
|
||
<span class="tb-field"><label title="Die gebundene Margin dieser Position.">Einsatz</label>
|
||
<b class="tb-val" id="tb-margin">—</b></span>
|
||
<span class="tb-field"><label title="Schließt am nächsten S/R-Level automatisch, wenn das Level wahrscheinlich hält. Derzeit AUS.">Auto-Close</label>
|
||
<button id="srclose-btn" class="tb-val tb-btn">—</button></span>
|
||
<span class="tb-field stop"><label title="Stop-Loss beim Broker. Ändern schaltet das Trailing ab, damit es die Handeingabe nicht zurückzieht.">SL</label>
|
||
<input id="tb-sl" type="number" inputmode="decimal" step="0.01" placeholder="—"></span>
|
||
<span class="tb-field gain"><label title="Take-Profit beim Broker. Ändern schaltet das Trailing ab.">TP</label>
|
||
<input id="tb-tp" type="number" inputmode="decimal" step="0.01" placeholder="—"></span>
|
||
<span class="tb-field gain"><label title="Mindestgewinn in Euro, unter dem der Auto-Close am Level NICHT schließt. Leer oder 0 = aus.">Gewinn-Close</label>
|
||
<input id="srmin-input" type="number" inputmode="decimal" step="1" placeholder="€"></span>
|
||
<span class="tb-field stop"><label title="Harte Verlustgrenze in Euro — der Server schließt sofort, wenn sie erreicht ist. Wirkt auch bei gesperrtem Handy. ⚠ Ein gesetzter Wert wird auf den nächsten Trade übernommen, bis er gelöscht wird.">Notfall-Close</label>
|
||
<input id="emg-input" type="number" inputmode="decimal" step="1" placeholder="€"></span>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Gesamtempfehlung (aus allen Modulen aggregiert) -->
|
||
<!-- ══════════════════════════════════════════════════════════════════
|
||
GESAMTEMPFEHLUNG ENTFERNT (2026-08-08, User: „funktioniert so leider
|
||
nicht, entferne es komplett - wir bauen etwas Neues").
|
||
Weg sind: Headline, Konfidenz-Ring, Bias-Nadel, Modul-Chips,
|
||
Konsens-Zeile und die Block-Gruende. Die Aggregation war reine
|
||
Anzeige - die Order haengt an `wave_signal`, nicht am Verdict.
|
||
GEBLIEBEN sind drei Dinge, die dort nur geparkt waren und je eine
|
||
eigene, unabhaengige Beleglage haben (s. CLAUDE.md).
|
||
══════════════════════════════════════════════════════════════════ -->
|
||
<!-- ══════════════════════════════════════════════════════════════════
|
||
M15 SETUP-BEREITSCHAFT (2026-08-08) — Ersatz fuer die entfernte
|
||
Gesamtempfehlung. ⚠ KEINE Richtungsaussage: auf M15 traegt gemessen
|
||
KEINE (Squeeze n=33/Nachbarn kippen, VWAP-Baender ohne Edge, 24
|
||
Signal-Eingriffe gescheitert). Gezeigt werden BEDINGUNGEN nach dem
|
||
Schema Bias -> Zone -> Reichweite -> Veto; den Ausloeser gibt der
|
||
Mensch, dessen Auswahl-Vorteil unabhaengig belegt ist.
|
||
══════════════════════════════════════════════════════════════════ -->
|
||
<section class="card wide" id="card-m15">
|
||
<h2 title="Setup-Bereitschaft auf M15. Zeigt BEDINGUNGEN, keine Richtungsprognose - auf M15 traegt gemessen kein Richtungssignal. Der Ausloeser bleibt beim Menschen.">M15 · Setup-Bereitschaft</h2>
|
||
<!-- Status-Banner: die wichtigste Zeile. Sie bestaetigt ausdruecklich
|
||
auch das NICHT-Handeln - die gemessene Kern-Leckage sind
|
||
diskretionaere Abweichungen, nicht fehlende Gelegenheiten.
|
||
⚠ Die Order-Buttons werden BEWUSST NICHT gesperrt: hartes Blockieren
|
||
wurde im Projekt verworfen, und User-Uebersteuerungen liefen
|
||
gemessen 68 % WR. Sichtbar machen, nicht bevormunden. -->
|
||
<div class="m15-status" id="m15-status">—</div>
|
||
<div class="m15-grid">
|
||
<div class="m15-item" id="m15-bias" title="Uebergeordneter Trend M30 + H1. Der EINZIGE belegte Filter: gegen den HTF zu handeln halbiert den Edge (gemessen ×2).">—</div>
|
||
<div class="m15-item" id="m15-kosten" title="Spread geteilt durch ATR_M15. Auf M15 gemessen 0,104 gegen 0,193 auf M5 - hier ist die groebere Zeitebene echt im Vorteil. Schwellen 0,20 / 0,32 aus backtest_realcosts.py.">—</div>
|
||
<div class="m15-item" id="m15-zone" title="Naechstes STEHENDES Level (M30-Pivots, dieselbe Quelle wie Chart und S/R-Close) mit Abstand und Durchbruchwahrscheinlichkeit. ⚠ P(break) ist live derzeit rund 7 Pp zu niedrig kalibriert.">—</div>
|
||
<div class="m15-item" id="m15-reich" title="Erwartete Spanne aus core/cone.py - out-of-sample geprueft, die 80-%-Baender treffen real 77 %. Sagt WIE WEIT, nicht wohin.">—</div>
|
||
<!-- ③b RAUM + MOTOR-ZUSTAND (2026-08-10, nach Trade #49671601 / -87 EUR).
|
||
Die Karte zeigte GRUEN, waehrend der Signal-Motor zu 76 % mit
|
||
entry_room blockte: dieselbe Tatsache ("ein Level ist nah") wird von
|
||
Gate ③ als GUT und von entry_room als SCHLECHT gelesen - beide
|
||
gemessen, aber ueber verschiedene Trades. Diese Zeile schliesst die
|
||
Luecke. REINE ANZEIGE, blockt nichts. -->
|
||
<div class="m15-item" id="m15-motor" title="Was der Signal-Motor GERADE blockt, plus der Raum zum naechsten Gegenlevel je Richtung (M5, dieselbe Rechnung wie das Gate selbst). Unter 0,6xATR ist der Ertrag am Level gedeckelt - gemessen ØR -0,119/-0,067 bei PF 0,42/0,66, also Trefferquote hoch und trotzdem Verlust. ⚠ Gate ③ liest dieselbe Naehe als GUT (ruhende Order AM Level), entry_room als SCHLECHT (Markt-Einstieg mit dem Level als Hindernis). Beides stimmt - fuer verschiedene Trades.">—</div>
|
||
<!-- ⑥ SELBSTMESSUNG: die Karte zeigt die Trefferquote ihrer EIGENEN
|
||
Lesart. ⚠ Jeder Ausfall, der in diesem Projekt je aufgedeckt wurde,
|
||
kam aus einer Rueckkopplung — pbreak_predictions entlarvte den
|
||
Modellausfall LIVE, was kein Backtest konnte. -->
|
||
<div class="m15-item" id="m15-track" title="Trefferquote der Lesart dieser Karte, nach 30/60 Minuten gegen den echten Kurs ausgewertet. Gegen 50 % zu lesen, nicht gegen 0. Geloggt wird EIN Zustand je Wechsel, nicht je Tick - sonst zaehlt man dieselbe Marktlage dutzendfach.">—</div>
|
||
<!-- ⑦ AUSFUEHRUNGSQUALITAET: der einzige gemessen grosse Hebel (+0,32 R). -->
|
||
<div class="m15-item" id="m15-exec" title="Der Umbau auf ruhende Stop-Orders (05.08.) hatte als Erfolgskriterium: der Abstand Einstieg zum Level muss gegen 0 gehen (vorher Median +0,275xATR). Das ist der groesste je gemessene Hebel des Projekts - und war bis heute unbeobachtet.">—</div>
|
||
<div class="m15-item" id="m15-veto" title="Deine eigene Bilanz mit/ohne/gegen Signal, je Lot gerechnet. Gegen das Signal zu handeln kostet gemessen 6,60 EUR je Lot - beidhaelftig robust.">—</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="card wide" id="card-pos">
|
||
<h2 title="Live-Meldungen zum laufenden Trade und zur Marktlage: Squeeze, Überdehnung, S/R-Nähe, News- und Kalender-Konflikte, Hyperliquid-Kontext.">Meldungen</h2>
|
||
<div class="squeeze-ind" id="wave-squeeze" title="Volatilitäts-Squeeze: der Kurs komprimiert und bricht aus. Das einzige 2-Stichproben-validierte Einstiegssignal des Projekts."></div>
|
||
<div class="bounce-ind" id="wave-bounce" title="Warnung bei Überdehnung — der Kurs ist weit von seiner EMA weg. KEIN Signal: die Richtungstreffer-Quote liegt gemessen bei ~50 %."></div>
|
||
<div class="cur-near" id="cur-near" title="Nächstes S/R-Level und Abstand dorthin."></div>
|
||
<div class="pos-srhint hidden" id="pos-srhint" title="Nähert sich der Kurs dem Ziel-Level, steht hier die Durchbruch-Wahrscheinlichkeit. Das Modell dahinter ist out-of-sample kalibriert (AUC 0,65)."></div>
|
||
<div class="pos-stophint hidden" id="pos-stophint" title="Dasselbe für das Level auf der Verlustseite — reine Anzeige, hier wird nichts automatisch geschlossen."></div>
|
||
<div class="news-conflict hidden" id="news-conflict" title="Warnt, wenn der News-Flow deutlich gegen die offene Position oder das aktive Signal steht. Kontext — als Prognose nicht belegt."></div>
|
||
<div class="news-conflict hidden" id="cal-note" title="Laufendes oder bevorstehendes High-Impact-Ereignis aus dem Wirtschaftskalender. Sperrt autonome Einstiege, nicht manuelle."></div>
|
||
<!-- HL-Kontext (Funding/Open Interest/Oracle-Premium). ⚠ REINE ANZEIGE:
|
||
gemessen (`analyze_hl_funding.py`, 5.095 Stundenwerte, 7 Monate)
|
||
hält entüberlappt KEIN Bucket die 2-Stichproben-Regel. Kein
|
||
Verdict-Gewicht, kein Trigger. -->
|
||
<div class="hl-note hidden" id="hl-note"></div>
|
||
<!-- Auto-Flip-Close: schließt eine Position, wenn die Empfehlung dreht.
|
||
⚠ GEMESSEN in BEIDEN Halbjahren negativ (−92/−160 R,
|
||
backtest_flipclose2.py), läuft auf ausdrücklichen User-Wunsch. Hatte
|
||
bis 2026-08-05 KEINE Anzeige — ein Exit, der echtes Geld bewegt und den
|
||
niemand sieht. Jetzt sichtbar, damit die Entscheidung informiert ist. -->
|
||
<div class="news-conflict hidden" id="flip-note" title="Zustand des Auto-Flip-Close. Derzeit aus — in beiden Halbjahren gemessen negativ."></div>
|
||
<div class="reasons" id="wave-reasons" title="Die Begründungen, aus denen sich Richtung und Konfidenz zusammensetzen."></div>
|
||
</section>
|
||
|
||
<!-- Breakout-Autotrader (User-Wunsch 2026-08-19). ⚠ Der autonome Pfad handelt
|
||
echtes Geld, seine Abbruchregel (B5) stand bisher NUR im taeglichen
|
||
Report. Diese Karte macht ihn sichtbar — Zustand, liegende Orders und
|
||
B5-Stand an einer Stelle.
|
||
⚠⚠ Sie zeigt BEIDE Zahlen getrennt: die B4-'Mechanik' (Regel neu
|
||
gerechnet, sieht gut aus) und die LIVE-Bilanz (verliert). Genau diese
|
||
Luecke IST der Befund — eine der beiden allein waere irrefuehrend.
|
||
Reine ANZEIGE: schaltet nichts, blockiert nichts. -->
|
||
<section class="card wide hidden" id="card-brk">
|
||
<h2 title="Autonomer Entry auf den Squeeze-Ausbruch. Einziges 2-Stichproben-validiertes Auto-Setup des Projekts.">🚀 Breakout-Autotrader</h2>
|
||
<div class="kv"><span>Zustand</span><b id="brk-state">—</b></div>
|
||
<div class="kv"><span>Squeeze jetzt</span><b id="brk-squeeze">—</b></div>
|
||
<div class="kv"><span>Liegende Orders</span><b id="brk-pending">—</b></div>
|
||
<div class="kv" title="B5 = die VORAB fixierte Abbruchregel: nach 20 Trades ab 01.08. muss Verhaeltnis (OeGewinn/OeVerlust) >= 1,0 UND PF >= 1 sein."><span>B5-Regel</span><b id="brk-b5">—</b></div>
|
||
<div class="kv" title="Einsatz JE PFAD in Prozent der freien Margin. 0 = der globale Wert gilt (Feld unten bzw. margin_buffer_pct). WICHTIG: das ist KEINE gleichzeitige Reservierung - der Bot haelt EINE Position, es kann nie BRK und M15 nebeneinander geben. Das Feld steuert die GROESSE der jeweiligen Position. Manuelle Trades bleiben beim globalen Wert.">
|
||
<span>Einsatz je Pfad</span>
|
||
<b>
|
||
<input id="am-brk" type="number" min="0" max="99" step="1" placeholder="BRK"
|
||
style="width:56px" title="Einsatz % fuer Breakout-Trades (0 = global)">
|
||
<span style="opacity:.6">/</span>
|
||
<input id="am-m15" type="number" min="0" max="99" step="1" placeholder="M15"
|
||
style="width:56px" title="Einsatz % fuer M15-Auto-Trades (0 = global)">
|
||
<span style="opacity:.6">%</span>
|
||
</b>
|
||
</div>
|
||
<div id="brk-note" class="hint"></div>
|
||
</section>
|
||
|
||
<section class="card wide" id="card-kontext">
|
||
<h2 title="Drei unabhaengige Kontext-Anzeigen. KEINE Empfehlung und keine Richtungsaussage - die Aggregation zu einer Gesamtempfehlung wurde am 08.08. entfernt.">Marktkontext</h2>
|
||
<!-- Zeitebenen-Ampel (M1/M5/M15/M30/H1) -->
|
||
<div class="tf-turns" id="wave-turns" title="EMA-Stand je Zeitebene: gruen aufwaerts, rot abwaerts. Eine frische Kreuzung blinkt. Reine Anzeige, kein Signal."></div>
|
||
<!-- Erwartete Spanne. ⚠ STREUUNG, nicht Richtung - deshalb neutral
|
||
gefaerbt. Beschriftet mit der REAL gemessenen Abdeckung (~77 %),
|
||
nicht mit dem Nennwert 80 %. Eine von nur zwei out-of-sample
|
||
kalibrierten Komponenten des Projekts. -->
|
||
<div class="kx-cone" id="kx-cone"></div>
|
||
<!-- SELBST-KALIBRIERUNG: die Trefferquote der Empfehlung aus
|
||
`rec_outcomes`. Misst das WELLEN-Signal, das bleibt.
|
||
⚠ Gegen 50 % zu lesen, nicht gegen 0. -->
|
||
<div class="kx-selfcal dim" id="kx-selfcal"></div>
|
||
</section>
|
||
|
||
<!-- Meldungen (ex-Position + Wellen-Meldungen; Welle-Karte entfällt) -->
|
||
<!-- Karte „Erwartete Spanne" ENTFERNT 2026-08-05 (User-Vorgabe) — die Kernwerte
|
||
stehen jetzt in der Karte „Marktkontext" (`#kx-cone`). Backend
|
||
(`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`) ist unverändert aktiv. -->
|
||
|
||
<!-- Trailing (Dashboard-Kachel ausgeblendet 2026-07-22, User-Vorgabe; Backend/
|
||
Logik unverändert aktiv, nur die Anzeige raus) -->
|
||
<section class="card wide hidden" id="card-trail">
|
||
<h2 title="Zustand des Trailing-Stops (Phase, aktueller SL, High-Water). Ausgeblendet — das Trailing läuft im Hintergrund weiter.">Trailing</h2>
|
||
<div class="kv"><span>Status</span><b id="trail-state">—</b></div>
|
||
<div class="kv"><span>Phase</span><b id="trail-phase">—</b></div>
|
||
<div class="kv"><span>SL</span><b id="trail-sl">—</b></div>
|
||
<div class="kv"><span>TP</span><b id="trail-tp">—</b></div>
|
||
<div class="kv"><span>ATR · TF</span><b id="trail-atr">—</b></div>
|
||
</section>
|
||
|
||
<!-- Live-Statistik — ganz unten -->
|
||
<section class="card wide" id="card-stats-live">
|
||
<h2 title="Kompakte Bilanz über Woche und Gesamt. Verhältnis = Ø-Gewinn geteilt durch Ø-Verlust; unter 1 heißt, die Verlierer sind größer als die Gewinner.">Statistik (live)</h2>
|
||
<div class="stx-row" id="stx-row" title="Trades, Trefferquote, Profitfaktor und das Verhältnis von Ø-Gewinn zu Ø-Verlust."><span class="dim">lade …</span></div>
|
||
</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 title="Einschätzung des KI-Copiloten (LLM). Stimmt mit Gewicht 1,0 mit, wenn er eine Richtung nennt — bei NEUTRAL zählt er nicht. Als Prognose nicht belegt.">KI-Copilot <span class="ca-tf">Gewicht 1,0</span></h2>
|
||
<div class="signal" id="agent-bias" title="Richtungsaussage des Copiloten. NEUTRAL heißt, er zählt in der Empfehlung nicht mit.">◌ —</div>
|
||
<div class="agent-head" id="agent-head"></div>
|
||
<div class="agent-text" id="agent-reason" title="Die Begründung des Copiloten im Klartext."></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 title="Mechanisch erkannte Chartmuster auf M30 mit Trigger und Kursziel. Gewicht 0,25. Die Ziel-Trefferquote liegt gemessen nur bei 13–38 % — Kontext, keine Vorhersage.">Chartmuster <span class="pt-tf">M30 · Gewicht 0,25</span></h2>
|
||
<div class="pt-list" id="pt-list" title="Erkannte Muster mit Skizze, Trigger und Kursziel."><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 title="Price-Action-Struktur auf M30: Swing-Folge, letzter Bruch (BOS) und Regressionskanal. Reine Anzeige — als Signal über alle Zeitebenen gemessen und verworfen.">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" title="Swing-Folge: HH/HL = Aufwärtsstruktur, LH/LL = Abwärtsstruktur."></div>
|
||
</div>
|
||
<div class="ms-bos" id="ms-bos" title="Letzter Break of Structure — welches Swing-Level zuletzt gebrochen wurde."></div>
|
||
<div class="ms-chan" id="ms-chan" title="Position des Kurses im Regressionskanal: 0 % = unterer Rand, 100 % = oberer.">
|
||
<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 title="Kerzengröße, Dochte und Volumen der letzten M5-Kerzen. Reine Anzeige und bewusst neutral gefärbt: die Lehrbuch-Lesart ist hier gemessen INVERTIERT — der Kurs läuft nach einer Klimax-Kerze eher GEGEN sie.">Kerzen-Anatomie <span class="ca-tf">M5 · nur Anzeige</span></h2>
|
||
<div class="ca-list" id="ca-list" title="Erkannte Kerzenformen der letzten M5-Bars mit Volumen-Vergleich."><span class="dim">—</span></div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- Logs -->
|
||
<section id="view-logs" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>Logs</h2>
|
||
<button class="reload" id="logs-reload">↻</button>
|
||
</div>
|
||
<pre id="logs-body" class="logbox">lade …</pre>
|
||
</section>
|
||
|
||
<!-- Statistik -->
|
||
<section id="view-stats" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>Statistik</h2>
|
||
<button class="reload" id="stats-reload">↻</button>
|
||
</div>
|
||
<div id="sqm-box"><div class="dim" style="padding:8px">lade Monitor …</div></div>
|
||
<div id="stats-body"></div>
|
||
<h2 class="sub-h">Setups (gesamt)</h2>
|
||
<div id="stats-setups"></div>
|
||
|
||
<!-- ⚠ Aus dem Dashboard hierher verschoben (User-Vorgabe 2026-08-05): das
|
||
Dashboard soll die HANDLUNGSrelevanten Module zeigen, die Rückschau
|
||
gehört in die Statistik. Die drei Karten werden weiterhin von `render()`
|
||
aus dem Snapshot gefüttert — sie hängen NICHT an `loadStats()`. Das
|
||
funktioniert, weil ein ausgeblendeter View nur `display:none` ist und
|
||
die Elemente im DOM bleiben; sonst würden die IDs beim Rendern fehlen. -->
|
||
|
||
<!-- Manuelle Trades — deskriptiv (2026-08-04). Zeigt die EIGENE Historie,
|
||
rechnet nichts hoch. Der volle Entscheidungskontext (ctx_*) wird erst
|
||
seit dem 04.08. mitgeschrieben; die Reifegrad-Zeile macht das sichtbar. -->
|
||
<section class="card wide" id="card-manual">
|
||
<h2 title="Deine eigenen manuellen Trades im Vergleich zum Bot, aufgeteilt nach Signal-Deckung. Rein deskriptiv.">Manuelle Trades <span class="mt-sub">deine Historie · 30 Tage</span></h2>
|
||
<div class="mt-grid" id="mt-grid" title="Deine manuellen Trades über heute, 30 Tage und gesamt, dazu der Bot zum Vergleich."></div>
|
||
<div class="mt-split" id="mt-split" title="Aufgeteilt danach, ob der Trade MIT oder OHNE Deckung durch die Empfehlung lief. Gegen das Signal kostet gemessen 6,60 € je Lot."></div>
|
||
<div class="mt-note dim" id="mt-note"></div>
|
||
</section>
|
||
|
||
<!-- Letzte Trades -->
|
||
<section class="card wide" id="card-trades">
|
||
<h2 title="Die zuletzt geschlossenen Trades mit Ergebnis und Schließgrund.">Letzte Trades</h2>
|
||
<div class="trades" id="trades" title="Zuletzt geschlossene Trades: Richtung, Ergebnis und Schließgrund."></div>
|
||
</section>
|
||
|
||
<!-- Kurslücken (Gaps) — Fill-Magnete, nur Kontext -->
|
||
<section class="card wide" id="card-gaps">
|
||
<h2 title="Offene Kurslücken des Jahres. Vakuum = echte Lücke zwischen den Tagesspannen (fließt als S/R in die Konfidenz ein), Eröffnung = Schluss-zu-Eröffnung (reine Anzeige).">Kurslücken (Gaps 2026)</h2>
|
||
<div class="gaps-list" id="gaps-list" title="Offene Kurslücken mit Zone, Fill-Level und Abstand zum aktuellen Kurs."><span class="dim">lade …</span></div>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
<!-- News -->
|
||
<section id="view-news" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>News</h2>
|
||
<button class="reload" id="news-reload">↻</button>
|
||
</div>
|
||
<div id="news-sentiment" class="news-sent"></div>
|
||
<div id="news-body"></div>
|
||
</section>
|
||
|
||
<!-- Aktionsleiste (Trade-Steuerung) -->
|
||
<nav id="actions">
|
||
<!-- Einsatz-Felder ENTFERNT (User 2026-08-19). Der Einsatz steht auf
|
||
40 % (ini + `runtime_state.json`); ohne UI aendert man ihn dort
|
||
+ Neustart. -->
|
||
<button class="btn long" data-side="long">▲ LONG<span class="btn-raum" id="raum-long"></span></button>
|
||
<button class="btn short" data-side="short">▼ SHORT<span class="btn-raum" id="raum-short"></span></button>
|
||
<button class="btn close" data-side="close">✕ CLOSE</button>
|
||
<!-- BRK-Schalter ENTFERNT, dafuer der Circuit-Breaker (User 2026-08-19).
|
||
Der Auto-Squeeze-Zustand bleibt in der Breakout-Karte sichtbar. -->
|
||
<button class="btn tog" id="btn-cb" title="Circuit Breaker (Tagesverlust-Stopp) an/aus">🛑 CIRCUIT BREAKER</button>
|
||
<!-- S/R-Auto-Close auch in der Aktionsleiste (User 2026-08-19). Den
|
||
Schalter gab es nur in der Trade-Leiste -- die ist aber NUR bei
|
||
offener Position sichtbar, also genau dann nicht, wenn man ihn vor
|
||
einem Trade setzen will. Der alte Knopf bleibt; beide lesen
|
||
`auto_sr_close` aus demselben Snapshot und koennen nicht
|
||
auseinanderlaufen. -->
|
||
<button class="btn tog" id="btn-sr" title="Auto-Close am S/R-Level an/aus (P(break)-gegatet: schliesst nur, wenn das Level wahrscheinlich haelt)">S/R</button>
|
||
<!-- M15-Karten-Auto-Entry (User-Test 2026-08-19). ⚠ GEGEN DIE MESSUNG:
|
||
backtest_m15_auto.py -> Lesart beidhaelftig negativ (OeR -0,162/
|
||
-0,094, PF 0,72/0,84), KI ohne Null, schlechter als die
|
||
HTF-Richtung UND als ihr eigenes Gegenteil. Default AUS. -->
|
||
<button class="btn tog" id="btn-m15" title="Auto-Entry auf die gruene M15-Karte. ACHTUNG: gemessen negativ (OeR -0,162/-0,094) — reiner Test.">M15</button>
|
||
<!-- 🎯 SIG (Auto-Signal-Entry) ENTFERNT 2026-08-12: seit 01.08. aus und auf
|
||
BEIDEN Ausfuehrungs-Achsen gemessen negativ (Markt alle 8 Felder,
|
||
ruhende Order mit Touch-Fill alle 6 und schlechter als Markt). -->
|
||
<button class="btn tog" id="btn-trail">🎯 TRAIL</button>
|
||
</nav>
|
||
|
||
<!-- Modal (Bestätigung / Token-Eingabe) -->
|
||
<div id="modal" class="modal hidden">
|
||
<div class="box">
|
||
<div class="box-title" id="modal-title"></div>
|
||
<div class="box-msg" id="modal-msg"></div>
|
||
<input id="modal-input" class="hidden" type="password"
|
||
placeholder="App-Token" autocomplete="off" autocapitalize="off">
|
||
<div class="box-btns">
|
||
<button id="modal-cancel" class="mbtn cancel">Abbrechen</button>
|
||
<button id="modal-ok" class="mbtn ok">Bestätigen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="toast" class="toast hidden"></div>
|
||
|
||
<script src="app.js?v=182"></script>
|
||
</body>
|
||
</html>
|