Slippage vs Vola-Regime gemessen + Ziel-Erreichbarkeit gebaut (v=154)

MESSUNG (analyze_slippage_vola.py, 337 SL-Closes): die Exit-Slippage steigt
MONOTON ueber alle vier Delta-ATR-Quartile:
  0,39-0,91   Schaetzer 0,0200 $
  0,91-1,08             0,0390 $
  1,08-1,26             0,0645 $
  1,26-2,39             0,0839 $   Faktor 4,19x
Mechanismus stimmig: die Slip-RATE bleibt flach (20-23 %), die GROESSE waechst
(0,094 -> 0,396 $). Es rutscht nicht oefter, sondern weiter.

ABER: der Bootstrap auf die DIFFERENZ oben-unten ergibt [-0,012 ... +0,183] -
enthaelt die Null. Bei n=85 je Quartil NICHT statistisch belegt.
Meine vorab fixierte Regel (Faktor >=2 UND monoton) war damit
unterspezifiziert - sie haette ein Konfidenzintervall verlangen muessen.
Konsequenz: gebaut als reiner HINWEIS im Kosten-Gate, kein Gate, und die
Beschriftung sagt "historisch ~4x hoeher", nicht "belegt".

ZIEL-ERREICHBARKEIT (Vorschlag 3, Decay-Clock): reine Geometrie auf dem
kalibrierten Kegel - passt das Gegenlevel noch in das 80-%-Band des jeweiligen
Horizonts? Live: Ziel 77,784 (0,401 $) liegt im 120'-Kegel, nicht im 30'/60'.
Die im Vorschlag mitgedachte Annahme "je laenger, desto eher bricht es" ist
BEWUSST NICHT eingebaut - sie ist nicht belegt (Touch-Zahl: umgekehrtes U auf
4 Live-Tagen, im Backtest +0,010 AUC, nach dem Nachtrainieren gar nichts mehr).

Umsetzung ohne zweiten MT5-Fetch: _vola_regime puffert den ATR_M15 aus dem
ohnehin laufenden Turn-Fetch (deque, ~5 h). Kaltstart liefert datr=null statt
zu raten - live verifiziert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-08 22:59:37 +02:00
co-authored by Claude Opus 5
parent 44955bf70a
commit e5adfc9757
4 changed files with 237 additions and 7 deletions
+28 -5
View File
@@ -170,10 +170,19 @@ function renderM15(s) {
const k = s.kosten || {};
const kOk = k.stufe === "guenstig" || k.stufe === "normal";
$("m15-kosten").className = "m15-item " + (k.ratio == null ? "" : kOk ? "ok" : "fail");
// ⚠ Slippage-Hinweis: gemessen steigt die Exit-Slippage monoton mit ΔATR
// (0,020 → 0,084 $, Faktor 4,2). ABER der Bootstrap auf die Differenz enthält
// die Null (n≈85 je Quartil) — deshalb HINWEIS, kein Gate, und die
// Beschriftung sagt „historisch", nicht „belegt".
const vo = s.vola || {};
const slipTxt = vo.stufe === "hoch"
? " · ⚠ Vola zieht an — Slippage historisch ~4× höher"
: vo.stufe === "ruhig" ? " · Vola ruhig" : "";
$("m15-kosten").textContent = k.ratio == null
? "② Kosten —"
: `② Kosten ${f(k.ratio, 3)}×ATR · ${
k.stufe === "guenstig" ? "günstig" : k.stufe === "normal" ? "normal" : "TEUER"}`;
k.stufe === "guenstig" ? "günstig" : k.stufe === "normal" ? "normal" : "TEUER"}`
+ slipTxt;
// ── Gate 3: Level in Reichweite ──────────────────────────────────────
const z = (s.zonen || []);
@@ -186,11 +195,25 @@ function renderM15(s) {
: "③ kein Level in Sicht";
// ── Reichweite (Kegel) — sagt WIE WEIT, nicht wohin ──────────────────
// ⚠ REINE GEOMETRIE: passt das Gegenlevel (= das Ziel) noch in das 80-%-Band
// des jeweiligen Horizonts? Keine Bruch-Annahme — die wäre nicht belegt.
const zi = s.ziel;
const r = s.reichweite || [];
$("m15-reich").className = "m15-item";
$("m15-reich").textContent = r.length
? "④ erwartete Spanne · " + r.map(x => `${x.minutes} ${f(x.lo, 2)}${f(x.hi, 2)}`).join(" · ")
: "④ erwartete Spanne —";
if (zi && zi.horizonte && zi.horizonte.length) {
const drin = zi.horizonte.filter(x => x.drin).map(x => x.minutes);
const el = $("m15-reich");
el.className = "m15-item " + (drin.length ? "ok" : "warn");
el.textContent = drin.length
? `④ Ziel ${f(zi.level, 3)} erreichbar ab ${Math.min(...drin)} `
+ `(${zi.strecke} $ vom Kurs)`
: `④ Ziel ${f(zi.level, 3)} liegt AUSSERHALB des 120-Kegels `
+ `(${zi.strecke} $) — CRV zeitlich nicht gedeckt`;
} else {
$("m15-reich").className = "m15-item";
$("m15-reich").textContent = r.length
? "④ erwartete Spanne · " + r.map(x => `${x.minutes} ${f(x.lo, 2)}${f(x.hi, 2)}`).join(" · ")
: "④ erwartete Spanne —";
}
// ── Veto: die eigene Bilanz, JE LOT ──────────────────────────────────
const v = s.veto || {};
+2 -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=153">
<link rel="stylesheet" href="style.css?v=154">
</head>
<body>
<!-- Modul-Menü (ganz oben) -->
@@ -340,6 +340,6 @@
</div>
<div id="toast" class="toast hidden"></div>
<script src="app.js?v=153"></script>
<script src="app.js?v=154"></script>
</body>
</html>