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:
co-authored by
Claude Opus 5
parent
44955bf70a
commit
e5adfc9757
+28
-5
@@ -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
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user