Squeeze auf 9 Instrumenten · Momentum neu gemessen · Fill-Annahme korrigiert · UI

Drei Messungen und eine UI-Aenderung, ausgeloest von der Frage, ob das Konzept
zu ueberdenken ist.

1) SQUEEZE AUF ANDEREN INSTRUMENTEN (backtest_squeeze_multi.py): 7 von 9 halten
   alle vier Bedingungen, alle nachbar-robust. Die zwei Durchfaller (Gasoline,
   USDX) sind exakt die mit Spread >= ATR — der Test scheitert, wo er muss.
   ⚠ 7 sind nicht 7 unabhaengige Tests (Crude/Brent, Gold/Silber, NAS/GER40
   korrelieren), und die Kompression traegt weniger als der Ausbruch selbst
   (Kontrolle "beliebige Box" ist ueberall positiv).

2) MOMENTUM (backtest_momentum_v2.py): bleibt verworfen. Mit Level-Order sah es
   nach +0,4 aus — das war Look-ahead. Eine liegende Order fuellt bei der ersten
   BERUEHRUNG, nicht erst wenn der Bar jenseits des Levels SCHLIESST. Ehrlich
   gerechnet: -0,04..-0,09 in H1. Struktureller Grund: das Momentum-Level wandert
   jede Bar mit C[i-N] und ist damit kein Ort, an dem eine Order liegen bleibt.

3) FILL-ANNAHME (backtest_squeeze_touchfill.py): dieselbe Frage fuer den Squeeze.
   Er haelt (+0,124/+0,292, PF 1,24/1,64) und die Umstellung auf ruhende Orders
   bleibt richtig (Market -0,158/-0,006). ABER die heute zitierten +0,456/+0,611
   sind als Live-Erwartung ~0,32 R zu hoch. Die Beruehrungs-Variante trifft fast
   genau das original validierte Band +0,14..+0,23.
   ⚠ OFFEN: derselbe Test fehlt fuer den SIG-Pending-Pfad, der seit 05.08. live
   ist — und dort ist ein schlechteres Ergebnis zu erwarten, weil das _pend-Level
   wandert statt stillzustehen.

4) UI (v=143): fester Vorbehalt unter der Headline und "Score" statt nackter
   Prozentzahl am Ring. Statisches Markup, kein JS.

Eigener Fehler dokumentiert: der erste Momentum-Entwurf pruefte nicht, ob das
Level als Stop-Order auf der richtigen Marktseite liegt, und lieferte ØR +2,2 —
unmoeglich, und genau daran erkennbar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-06 22:14:02 +02:00
co-authored by Claude Opus 5
parent 64eef14871
commit 45bfc87153
6 changed files with 822 additions and 6 deletions
+22 -3
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=142">
<link rel="stylesheet" href="style.css?v=143">
</head>
<body>
<!-- Modul-Menü (ganz oben) -->
@@ -81,12 +81,31 @@
<section class="card wide" id="card-verdict">
<h2>Gesamtempfehlung</h2>
<div class="vd-head">
<div class="vd-ring" id="vd-ring"><span id="vd-conf"></span></div>
<!-- ⚠ Der Ring ist ein SCORE, keine Trefferwahrscheinlichkeit. Gemessen
(`analyze_verdict_calibration.py`) ist conf_pct nicht kalibriert und
in H2 sogar invertiert — die Beschriftung sagt das jetzt auch. -->
<div class="vd-ring" id="vd-ring"
title="Aggregierter Score aus den Modulen — KEINE Trefferwahrscheinlichkeit. Gemessen ist conf_pct nicht kalibriert (in der zweiten Stichprobe sogar invertiert): hohe Werte bedeuten starken Trend + Konfluenz, und das sind im Chop-Regime gerade die Überdehnungen vor der Wende.">
<span class="vd-ring-in"><b id="vd-conf"></b><i class="vd-ring-lbl">Score</i></span>
</div>
<div class="vd-main">
<div class="vd-signal" id="vd-signal">◌ —</div>
<div class="vd-consensus" id="vd-consensus"></div>
</div>
</div>
<!-- ⚠⚠ STEHENDER VORBEHALT (2026-08-06, gemessen `analyze_signal_live.py`
an 1.071 Live-Episoden): die Richtungsaussage trifft in 4851 % der
Fälle — ein Münzwurf. Der Ertrag entsteht nachweislich aus dem
EINSTIEGSPREIS (ruhende Order am Level: ØR +0,35/+0,32 gegen 0,09/0,11
am Markt) und der Exit-Asymmetrie, nicht aus der Trefferquote. Die Zeile
steht bewusst fest im Markup und nicht in JS: sie ist ein Dauerhinweis,
kein Zustand. -->
<div class="vd-note" id="vd-note"
title="Gemessen an 1.071 Live-Episoden (08.05.06.08.2026), gegen die Drift der jeweiligen Hälfte gelesen: Treffer 48,351,1 %, Überschuss max. +0,085×ATR — unter den realen Handelskosten von 0,265×ATR.">
ⓘ Richtung ≈ Münzwurf (gemessen 4851 % Treffer). Der Ertrag kommt aus
Einstiegspreis und Exit, nicht aus der Trefferquote — lies das hier als
<b>Auslöser für eine Order am Level</b>, nicht als Kursprognose.
</div>
<div class="vd-meter">
<span class="vd-end short">SHORT</span>
<div class="vd-track"><div class="vd-needle" id="vd-needle"></div></div>
@@ -312,6 +331,6 @@
</div>
<div id="toast" class="toast hidden"></div>
<script src="app.js?v=142"></script>
<script src="app.js?v=143"></script>
</body>
</html>
+13 -2
View File
@@ -208,8 +208,19 @@ main{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px}
display:flex;align-items:center;justify-content:center;
background:conic-gradient(var(--dim) 0deg, var(--line) 0deg)}
.vd-ring span{width:46px;height:46px;border-radius:50%;background:var(--card);
display:flex;align-items:center;justify-content:center;
font-size:18px;font-weight:700}
display:flex;flex-direction:column;align-items:center;
justify-content:center;font-size:18px;font-weight:700}
/* ⚠ Der Ring zeigt einen SCORE, keine Trefferwahrscheinlichkeit — die Beschriftung
sagt das jetzt mit (gemessen: conf_pct ist nicht kalibriert, in H2 invertiert). */
#vd-conf{line-height:1}
.vd-ring-lbl{font-size:10px;font-weight:600;font-style:normal;color:var(--dim);
letter-spacing:.5px;line-height:1;margin-top:1px}
/* Stehender Vorbehalt unter der Headline: die Richtung ist gemessen ein Muenzwurf.
Bewusst gedaempft und gestrichelt — Kontext, keine Warnung. */
.vd-note{font-size:13px;line-height:1.45;color:var(--dim);background:var(--surface-2);
border:1px dashed var(--line);border-radius:var(--r-sm);
padding:7px 10px;margin:0 0 11px}
.vd-note b{color:var(--bright);font-weight:700}
.vd-main{flex:1;min-width:0}
.vd-signal{font-size:30px;font-weight:800;color:var(--dim);line-height:1.1}
.vd-signal.long{color:var(--up)} .vd-signal.short{color:var(--down)}