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).
|
||||
|
||||
Reference in New Issue
Block a user