Gegen-/Stop-Seiten-Anzeige P(Durchbruch) (stop_approach, v=109)

Zeigt die Durchbruchwahrscheinlichkeit fuer das Level, dem sich der Kurs auf der
Gegen-/Stop-Seite der offenen Position naehert (LONG->Support darunter,
SHORT->Resistance darueber) — reine Anzeige, kein Auto-Close. Vorher per
backtest_pbreak_calibration.py belegt: Modell haelt auf der Gegen-Seite
out-of-sample (AUC 0,68/0,72 in beiden Haelften), niedriger P-Bereich kalibriert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-24 16:19:39 +02:00
co-authored by Claude Opus 4.8
parent 6318817ac1
commit 027995d1e7
6 changed files with 274 additions and 6 deletions
+23
View File
@@ -495,6 +495,29 @@ function render(d) {
hintEl.textContent = "";
}
}
// Gegen-/Stop-Seiten-Hinweis (REINE ANZEIGE, kein Auto-Close): Kurs läuft auf das
// Level GEGEN die Position zu → bricht es durch (Verlust läuft) oder prallt es ab?
// P(break)-Modell auf der Gegen-Seite gemessen kalibriert (AUC 0,72 o.o.s.),
// im hohen Bereich leicht konservativ. Nur zeigen, wenn KEIN Ziel-Level-Hint läuft.
const stopEl = $("pos-stophint");
if (stopEl) {
const sa = d.stop_approach || null;
if (hasPos && sa && !srHint) {
const lvlName = sa.side === "sup" ? "Support" : "Widerstand";
const dir = sa.side === "sup" ? "nach unten" : "nach oben";
const confirmTxt = sa.confirm != null ? ` (Bruch ab ${fmt(sa.confirm, 3)})` : "";
const holds = sa.p_break < 50;
stopEl.className = "pos-stophint " + (holds ? "hold" : "break");
const lead = sa.at_level ? `Am ${lvlName}` : `Nähert sich ${lvlName}`;
stopEl.textContent =
`${lead} ${fmt(sa.level, 3)} (${sa.gap_atr}×ATR) · Durchbruch ${dir} ` +
`${sa.p_break}%${confirmTxt}` +
(holds ? "Level hält wahrscheinlich" : "bricht wahrscheinlich durch");
} else {
stopEl.className = "pos-stophint hidden";
stopEl.textContent = "";
}
}
// Schalter-Zustand: Auto-Close am S/R an/aus + Mindestgewinn
const srBtn = $("srclose-btn");
if (srBtn) {
+3 -2
View File
@@ -6,7 +6,7 @@
<meta name="theme-color" content="#0d1117">
<title>Oil · MT5</title>
<link rel="manifest" href="manifest.json">
<link rel="stylesheet" href="style.css?v=108">
<link rel="stylesheet" href="style.css?v=109">
</head>
<body>
<!-- Modul-Menü (ganz oben) -->
@@ -90,6 +90,7 @@
<div class="bounce-ind" id="wave-bounce"></div>
<div class="cur-near" id="cur-near"></div>
<div class="pos-srhint hidden" id="pos-srhint"></div>
<div class="pos-stophint hidden" id="pos-stophint"></div>
<div class="reasons" id="wave-reasons"></div>
<div class="kv"><span>Setup</span><b id="wave-setup"></b></div>
<div class="kv"><span>Lauf</span><b id="wave-move"></b></div>
@@ -216,6 +217,6 @@
<div id="toast" class="toast hidden"></div>
<script src="lightweight-charts.standalone.production.js?v=108"></script>
<script src="app.js?v=108"></script>
<script src="app.js?v=109"></script>
</body>
</html>
+6 -3
View File
@@ -165,15 +165,18 @@ main{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px}
/* ── Meldungen (EINHEITLICHES Design: Box + farbiger Links-Akzent) ─────────── */
#card-pos .squeeze-ind, #card-pos .bounce-ind, #card-pos .cur-near,
#card-pos .pos-srhint, #card-pos .reasons{
#card-pos .pos-srhint, #card-pos .pos-stophint, #card-pos .reasons{
display:block; margin:0 0 7px; padding:8px 11px; border-radius:var(--r-sm);
background:var(--surface-2); border:1px solid var(--border);
border-left:3px solid var(--line);
font-size:12px; line-height:1.4; font-weight:600; letter-spacing:0; box-shadow:none;
}
/* leere Meldungen ausblenden (cur-near/srhint/reasons ohne Inhalt) */
#card-pos .cur-near:empty, #card-pos .pos-srhint:empty,
#card-pos .pos-srhint.hidden, #card-pos .reasons:empty{display:none}
#card-pos .cur-near:empty, #card-pos .pos-srhint:empty, #card-pos .pos-stophint:empty,
#card-pos .pos-srhint.hidden, #card-pos .pos-stophint.hidden, #card-pos .reasons:empty{display:none}
/* Gegen-/Stop-Seiten-Hinweis (reine Anzeige): hält = grün, bricht = rot */
#card-pos .pos-stophint.hold{color:var(--up); border-left-color:var(--up)}
#card-pos .pos-stophint.break{color:var(--down); border-left-color:var(--down)}
/* Farbvarianten — Links-Akzent + Textfarbe (Fläche bleibt einheitlich) */
#card-pos .squeeze-ind.idle, #card-pos .bounce-ind.idle,
#card-pos .reasons{color:var(--dim)}