User: "und wieder am Widerstand geschlossen. Das ist kein Zufall mehr."
⚠⚠ ZUERST DER AUSSCHLUSS - im Exit gibt es KEINEN S/R-Anker:
- S/R-Auto-Close ist seit 19.08. aus
- `trail.set_sr(...)` uebergibt die Level zwar, aber `_sr_data` wird in
core/trailing.py NIRGENDS benutzt (toter Parameter)
- Trailing-Stop = Bestkurs ∓ 1,0xATR, TP = Entry ± 3,5xATR - beides reines ATR
Kein Codepfad kann an einem Level schliessen.
DIE URSACHE LIEGT AM EINSTIEG, und sie ist in der eigenen Telemetrie sichtbar
(ctx_dist_res_atr / ctx_dist_sup_atr, Abstand zum ZIEL-Level beim Eroeffnen):
19.08 20:00 BUY 0,25xATR -5,44
19.08 20:05 BUY 0,29xATR -4,20
19.08 20:11 BUY 0,46xATR -23,29
19.08 20:59 SELL 0,52xATR -4,47
19.08 21:18 BUY -0,03xATR -0,67 (Widerstand bereits ueberschritten)
FUENF von zwoelf Trades unter dem Gate 0,6, zusammen -38,07 EUR.
Der Kurs erreicht das Level nach wenigen Cent, dreht, und der Trail (1xATR
dahinter) nimmt mit. Der Exit SIEHT nach "am Widerstand" aus, weil der EINSTIEG
dort lag. Genau das misst entry_room_atr: OeR -0,119/-0,067 bei PF 0,42/0,66 -
79 % Trefferquote und trotzdem Verlust, weil der Gewinn am Level gedeckelt ist
und der Verlust bis zum Stop laeuft.
Warum es niemand sah: `entry_room` blockt nur die EMPFEHLUNG, manuelle Orders
laufen ungehindert (so gewollt, Uebersteuerungen liefen 68 % WR). Seit dem
Entfernen des Entry-Dialogs (11.08.) fehlte die Zahl im Moment des Klicks; sie
stand nur in Gate ③b - und das ist seit gestern im zugeklappten Akkordeon.
GEBAUT: der Order-Knopf selbst wird markiert (Umriss in Akzentfarbe, gedaempfte
Flaeche, Raum-Zahl fett), sobald `frei === false`. Live gegengeprueft: bei Raum
0,04 / 0,28 xATR sind beide Knoepfe gewarnt.
⚠ KEIN Block, KEINE Abfrage - sichtbar machen, nicht bevormunden.
⚠ Die Zahl wird NICHT neu gerechnet; `rm` liegt bereits vor. Ein zweiter
Rechenweg waere die Divergenz-Falle, die im Projekt dreimal zugeschlagen hat.
⚠ Der Knopf hat keine id, sondern data-side - deshalb ueber `closest()` statt
ueber eine ID (erster Versuch griff ins Leere).
Reine Frontend-Aenderung (v=192), kein Neustart.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
397 lines
31 KiB
HTML
397 lines
31 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=192">
|
||
</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). Zeigt den ERSTEN Slot (manuelle und M15-Trades). Der Breakout-Autotrader hat seit dem Zwei-Slot-Umbau vom 19.08. einen EIGENEN Slot und steht in der Box rechts daneben.">G/V</label><span id="hdr-pnl">—</span></div>
|
||
<div class="px"><label title="Gewinn/Verlust der Position des Breakout-Autotraders (eigener Slot seit 19.08.). Zeigt — wenn BRK gerade nichts haelt. Die Summe beider Slots steckt im TAG P/L oben.">G/V · BRK</label><span id="hdr-pnl-brk">—</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">
|
||
<details class="m15-akk" data-akk="prüfkette" open>
|
||
<summary>① – ④ Prüfkette</summary>
|
||
<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>
|
||
</details>
|
||
<details class="m15-akk" data-akk="kontext">
|
||
<summary>⑤ Kontext — Motor · M5 · RSI</summary>
|
||
<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>
|
||
<div class="m15-item" id="m15-m5" title="M5-ZUSTAND, reine Anzeige - KEINE Richtung und KEIN Banner. Bewusst KEINE eigene M5-Setup-Karte (User-Entscheidung 2026-08-19): die entkoppelte Selbstmessung dieser Karte steht bei n=342 auf 53,5 % [48,2 .. 58,8] auf 30 min und 49,3 % auf 60 min - die vorab fixierte Bedingung (>=350 Faelle, KI ohne die 50) ist bei vorhandener Stichprobe NICHT erfuellt. Als Handelsregel faellt die Karte durch (backtest_m15_auto.py: OeR -0,162/-0,094, beide KI ohne Null). Kosten-Schwellen aus backtest_realcosts.py: Median 0,193, ab 0,32 Kostenfalle. Der M5-Raum steht bereits in Zeile 3b.">—</div>
|
||
<div class="m15-item" id="m15-rsi" title="RSI(14) auf M15 - REINE ANZEIGE, kein Signal und kein Verdict-Gewicht. WICHTIG: die Lehrbuch-Lesart (>70 ueberkauft -> short, <30 ueberverkauft -> long) ist hier GEMESSEN und faellt durch: 24 Zellen ueber 80k M5-Bars und 2 Halbjahre, keine besteht, vier sind sogar signifikant negativ (backtest_rsi_v2.py, 19.08.). Auch die Umkehrung traegt standalone nicht. Was WIRKT, ist der Pullback-Effekt - und der laeuft im Bot bereits ueber die EMA-Distanz (Konfidenz-Bonus 'tiefer Pullback' +15) und ueber die Ueberdehnung. Lesen Sie den Wert als Kontext, nicht als Handlungsanweisung.">—</div>
|
||
</details>
|
||
<details class="m15-akk" data-akk="kontrolle">
|
||
<summary>⑥ – ⑦ Selbstmessung · Ausführung · Veto</summary>
|
||
<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>
|
||
<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>
|
||
</details>
|
||
</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="Die vom Breakout-Autotrader gehaltene Position - SEIT dem Zwei-Slot-Umbau vom 19.08. ein EIGENER Slot, unabhaengig von manuellen und M15-Trades. WICHTIG: 'Trailing' muss AN sein. Steht es auf aus, laeuft der Trade nur mit dem Broker-SL - also in der gemessen DURCHGEFALLENEN SL-only-Variante (backtest_brk_slonly.py: alle zehn Konfidenzintervalle enthalten die Null)."><span>BRK-Position</span><b id="brk-pos">—</b></div>
|
||
<div class="tb-row mg-row" title="Einsatz JE PFAD in Prozent der freien Margin. Leer oder 0 = der globale Wert gilt. 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 class="tb-field"><label title="Einsatz in Prozent der freien Margin fuer ALLE Trades, die keinen eigenen Wert haben - also MANUELLE Trades. Das ist die Schraube, die Ihre eigenen Eroeffnungen steuert. 1-99; 100 liesse keinen Puffer fuer Spread und Swap.">Einsatz global %</label>
|
||
<input id="mg-global" type="number" inputmode="decimal" step="1" min="1" max="99" placeholder="%"></span>
|
||
<span class="tb-field"><label title="Einsatz % fuer autonome Breakout-Trades. Leer = globaler Wert.">Einsatz BRK %</label>
|
||
<input id="am-brk" type="number" inputmode="decimal" step="1" min="0" max="99" placeholder="global"></span>
|
||
<span class="tb-field"><label title="Einsatz % fuer autonome M15-Trades. Leer = globaler Wert.">Einsatz M15 %</label>
|
||
<input id="am-m15" type="number" inputmode="decimal" step="1" min="0" max="99" placeholder="global"></span>
|
||
</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=192"></script>
|
||
</body>
|
||
</html>
|