Dashboard-Zeile fuer Slot 2 + Doku des Zwei-Slot-Umbaus
Die vom Breakout-Trader gehaltene Position ist jetzt sichtbar (#brk-pos in der Breakout-Karte): Richtung, Lots, Einstieg, P&L - und vor allem der Trailing-Zustand. ⚠ Der Trailing-Hinweis ist der wichtigste Teil der Zeile: steht er auf "⚠ TRAILING AUS - nur Broker-SL!", laeuft der Trade in der gemessen DURCHGEFALLENEN SL-only-Variante (backtest_brk_slonly.py: alle zehn Konfidenzintervalle enthalten die Null, Trefferquote faellt 40 -> 21 %). Ohne diese Anzeige waere das im Betrieb nicht bemerkbar - genau Deployment-Drift Fall 8 (nicht die Strategie driftet, sondern ihre Beobachtbarkeit). Richtung wird aus SL/TP abgeleitet statt ein weiteres Snapshot-Feld zu bauen - place_stop setzt immer einen SL. Damit bleibt es eine reine Frontend-Aenderung (v=185), kein Neustart noetig, die offene Position unberuehrt. Verifiziert: v=185 wird ausgeliefert, div 85/85 ausgeglichen, keine doppelten IDs, keine verwaisten JS-Referenzen, node --check gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a9a6c487d2
commit
5593f270cc
+24
@@ -169,6 +169,30 @@ function beepRecommendation(sig, isNew) {
|
||||
function renderBrk(d) {
|
||||
const box = $streng("card-brk");
|
||||
if (!box) return;
|
||||
// --- Slot 2: die vom Breakout-Trader gehaltene Position -------------------
|
||||
// Ohne diese Zeile waere eine offene BRK-Position im Dashboard unsichtbar --
|
||||
// genau Deployment-Drift Fall 8 (dort driftete nicht die Strategie, sondern
|
||||
// ihre Beobachtbarkeit) in neuer Form.
|
||||
const bp = d.position_brk, bpEl = $streng("brk-pos");
|
||||
if (bpEl) {
|
||||
if (!bp) {
|
||||
bpEl.textContent = "keine — Slot frei";
|
||||
bpEl.className = "";
|
||||
} else {
|
||||
// Richtung aus SL/TP ableiten: place_stop setzt IMMER einen SL.
|
||||
const e = Number(bp.entry) || 0;
|
||||
const lg = (bp.sl && e) ? (bp.sl < e) : (bp.tp ? bp.tp > e : null);
|
||||
const pfeil = lg === null ? "" : (lg ? "▲ LONG" : "▼ SHORT");
|
||||
const pnl = Number(bp.pnl) || 0;
|
||||
const t = [`${pfeil} ${bp.lots ?? "?"} @ ${e ? e.toFixed(3) : "?"}`,
|
||||
`${pnl >= 0 ? "+" : ""}${pnl.toFixed(2)} €`];
|
||||
// ⚠ Der wichtigste Teil der Zeile: ohne Trailing laeuft der Trade in der
|
||||
// gemessen durchgefallenen SL-only-Variante.
|
||||
t.push(bp.trail ? "Trailing an" : "⚠ TRAILING AUS — nur Broker-SL!");
|
||||
bpEl.textContent = t.join(" · ");
|
||||
bpEl.className = bp.trail ? (pnl >= 0 ? "pos" : "neg") : "neg";
|
||||
}
|
||||
}
|
||||
// Einsatz je Pfad einspielen. ⚠ NICHT, solange das Feld den Fokus hat --
|
||||
// sonst ueberschreibt der 1-s-Snapshot die laufende Eingabe (dieselbe Falle
|
||||
// wie beim Mindestgewinn-Feld).
|
||||
|
||||
+3
-2
@@ -12,7 +12,7 @@
|
||||
⚠ 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=184">
|
||||
<link rel="stylesheet" href="style.css?v=185">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Modul-Menü (ganz oben) -->
|
||||
@@ -171,6 +171,7 @@
|
||||
<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 % 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>
|
||||
@@ -388,6 +389,6 @@
|
||||
</div>
|
||||
<div id="toast" class="toast hidden"></div>
|
||||
|
||||
<script src="app.js?v=184"></script>
|
||||
<script src="app.js?v=185"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user