M5-Kontextzeile in der M15-Karte statt einer eigenen M5-Setup-Karte
User fragte nach einer M1- oder M5-Setup-Karte und hat der hier gebauten
Variante zugestimmt: eine reine ZUSTANDS-Zeile, ohne Richtung und ohne Banner.
WARUM KEINE ZWEITE KARTE - und diesmal entscheidet eine frische Messung, nicht
eine Meinung. Die entkoppelte Selbstmessung der BESTEHENDEN Karte steht bei
n=342 (gruen + gerichtet, ab dem Hysterese-Stichtag 12.08.):
30 min 53,5 % KI [48,2 .. 58,8] -> enthaelt 50 %
60 min 49,3 % KI [44,0 .. 54,5] -> enthaelt 50 %, liegt DARUNTER
Am 12.08. war die Bedingung fuer ein Ja VORAB fixiert worden: ">=350 Faelle,
Trefferquote ueber 50 %, KI ohne die 50". Die Stichprobe ist jetzt da, die
Bedingung ist NICHT erfuellt. Das ist kein "noch zu wenig Daten" mehr.
Dazu die Messung vom 13.08.: als Handelsregel faellt die Karte durch
(backtest_m15_auto.py, OeR -0,162/-0,094, beide KI ohne Null, schlechter als
die HTF-Richtung UND schlechter als ihr eigenes Gegenteil).
M1 scheitert zusaetzlich an der Arithmetik: Spread/ATR Median 0,319 gegen 0,193
(M5) und 0,104 (M15). Feiner aufloesen macht die EINZIGE gemessene Staerke der
M15-Karte - die Kosten - monoton schlechter. Um 01:00 ist der Spread
1,051xATR_M1, also groesser als die mittlere Kerze; und die M1-Historie ist bei
80 Tagen gedeckelt, zwei Stichproben laegen im selben Regime.
GEBAUT ist deshalb Zustand ohne Urteil: Squeeze-Lage (armiert/Ausbruch/keine
Kompression + Box), Kosten in xATR_M5 mit den Schwellen aus
backtest_realcosts.py (Median 0,193, ab 0,32 Kostenfalle) und der ATR.
Der M5-RAUM wird bewusst NICHT wiederholt - Gate 3b rechnet ohnehin auf M5.
⚠ NUR ZUSAMMENGESETZT, nichts neu gerechnet: wave.squeeze und bid/ask/ATR_M5
stehen im Snapshot ohnehin. Ein zweiter Rechenweg war der Fehler des
Konsens-Pfeils (komplettes zweites _verdict im 5-s-Takt) und ist die Quelle
jeder Divergenz zwischen Karte und Chart.
⚠ Kein Verdict-Gewicht, kein Trade-Trigger, keine Farbampel - dieselbe
Zurueckhaltung wie bei der Kerzen-Anatomie und der Ueberdehnungs-Anzeige.
Live verifiziert: "M5 · keine Kompression (Box 3.52xATR) · Kosten 0.15xATR_M5
guenstig · ATR 0.165". Deploy ueber tools/deploy.py --feld m15_setup.m5
(Punktpfad), alle 5 Schritte gruen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
618f3a4bee
commit
7915e171d0
@@ -5006,6 +5006,40 @@ class TradingEngine:
|
||||
"conf_pct": wsig.get("conf_pct"),
|
||||
"raum": raum}
|
||||
|
||||
# ── 3c) M5-KONTEXT — reine ANZEIGE, KEINE Richtung, KEIN Banner
|
||||
# (User-Entscheidung 2026-08-19 gegen eine eigene M5-Karte).
|
||||
# ⚠⚠ Warum KEINE zweite Setup-Karte: die entkoppelte Selbstmessung
|
||||
# dieser Karte steht bei n=342 auf 53,5 % [48,2 .. 58,8] (30 min) und
|
||||
# 49,3 % (60 min) — die am 12.08. VORAB fixierte Bedingung ("bei
|
||||
# >=350 Faellen ueber 50 % UND KI ohne die 50") ist damit bei
|
||||
# vorhandener Stichprobe NICHT erfuellt. Dazu faellt die Karte als
|
||||
# Handelsregel durch (`backtest_m15_auto.py`: OeR -0,162/-0,094,
|
||||
# beide KI ohne Null). Eine zweite Karte derselben Bauart wuerde ein
|
||||
# als Signal gemessen NEGATIVES Muster vervielfachen — und die
|
||||
# Veto->Richtung-Falle, die in EINER Woche dreimal zuschlug, auf eine
|
||||
# zweite Flaeche ausdehnen.
|
||||
# ⚠ Deshalb bewusst nur ZUSTAND, kein Urteil: Squeeze-Lage, Kosten,
|
||||
# ATR. Der M5-RAUM steht bereits in `motor.raum` (Gate 3b rechnet
|
||||
# ohnehin auf M5) und wird hier NICHT wiederholt.
|
||||
# ⚠ NUR ZUSAMMENGESETZT, nichts neu gerechnet — `wave.squeeze` und
|
||||
# `cost_ratio` stehen im Snapshot ohnehin. Ein zweiter Rechenweg war
|
||||
# der Fehler des Konsens-Pfeils (komplettes zweites `_verdict` im
|
||||
# 5-s-Takt) und die Quelle jeder Divergenz zwischen Karte und Chart.
|
||||
try:
|
||||
_sq = (wave_snap or {}).get("squeeze") or {}
|
||||
_atr5 = ((wave_snap or {}).get("pb_feats") or {}).get("atr")
|
||||
out["m5"] = {
|
||||
"squeeze": _sq.get("state"),
|
||||
"squeeze_dir": _sq.get("dir"),
|
||||
"box_atr": _sq.get("box_atr"),
|
||||
"atr": _atr5,
|
||||
# Spread/ATR_M5 — Schwellen aus `backtest_realcosts.py`:
|
||||
# Median 0,193 · ab 0,32 die dokumentierte Kostenfalle.
|
||||
"kosten": (round((ask - bid) / _atr5, 3)
|
||||
if (bid and ask and _atr5 and _atr5 > 0) else None)}
|
||||
except Exception:
|
||||
out["m5"] = None
|
||||
|
||||
# ── 4) REICHWEITE — der Kegel (kalibriert: 80 %-Band trifft 77 %)
|
||||
lv = (cone or {}).get("levels") or []
|
||||
b80 = [x for x in lv if x.get("band") == 80]
|
||||
|
||||
+28
@@ -364,6 +364,34 @@ function renderM15(s) {
|
||||
+ "gedeckelt, der Verlust laeuft bis zum Stop. Reine Anzeige.";
|
||||
}
|
||||
|
||||
// --- M5-Kontext: reine ZUSTANDS-Zeile, keine Richtung, kein Banner ------
|
||||
// Bewusst KEINE eigene M5-Karte (User-Entscheidung 19.08.): die entkoppelte
|
||||
// Selbstmessung dieser Karte steht bei n=342 auf 53,5 % [48,2 .. 58,8] und
|
||||
// schliesst die 50 nicht aus; als Handelsregel faellt sie durch. Hier steht
|
||||
// deshalb nur, WIE der M5-Markt gerade aussieht -- ohne Urteil.
|
||||
const m5El = $("m15-m5");
|
||||
const m5 = s.m5;
|
||||
if (m5) {
|
||||
const t = [];
|
||||
if (m5.squeeze === "active") {
|
||||
t.push(`Squeeze AUSBRUCH ${m5.squeeze_dir || ""}`.trim());
|
||||
} else if (m5.squeeze === "armed") {
|
||||
t.push("Squeeze armiert" + (m5.box_atr != null ? ` (Box ${m5.box_atr}×ATR)` : ""));
|
||||
} else {
|
||||
t.push("keine Kompression"
|
||||
+ (m5.box_atr != null ? ` (Box ${m5.box_atr}×ATR)` : ""));
|
||||
}
|
||||
if (m5.kosten != null) {
|
||||
// Schwellen aus backtest_realcosts.py: Median 0,193 - ab 0,32 Kostenfalle.
|
||||
const k = m5.kosten;
|
||||
t.push(`Kosten ${k.toFixed(2)}×ATR_M5 ${k <= 0.20 ? "günstig" : k < 0.32 ? "normal" : "⚠ teuer"}`);
|
||||
}
|
||||
if (m5.atr != null) t.push(`ATR ${Number(m5.atr).toFixed(3)}`);
|
||||
m5El.textContent = "M5 · " + t.join(" · ");
|
||||
} else {
|
||||
m5El.textContent = "M5 · —";
|
||||
}
|
||||
|
||||
const moEl = $("m15-motor");
|
||||
const seite = (o, lbl) => {
|
||||
if (!o) return null;
|
||||
|
||||
+3
-2
@@ -12,7 +12,7 @@
|
||||
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
|
||||
und muss offline funktionieren. -->
|
||||
<link rel="stylesheet" href="pico.min.css?v=1">
|
||||
<link rel="stylesheet" href="style.css?v=182">
|
||||
<link rel="stylesheet" href="style.css?v=183">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Modul-Menü (ganz oben) -->
|
||||
@@ -122,6 +122,7 @@
|
||||
gemessen, aber ueber verschiedene Trades. Diese Zeile schliesst die
|
||||
Luecke. REINE ANZEIGE, blockt nichts. -->
|
||||
<div class="m15-item" id="m15-motor" title="Was der Signal-Motor GERADE blockt, plus der Raum zum naechsten Gegenlevel je Richtung (M5, dieselbe Rechnung wie das Gate selbst). Unter 0,6xATR ist der Ertrag am Level gedeckelt - gemessen ØR -0,119/-0,067 bei PF 0,42/0,66, also Trefferquote hoch und trotzdem Verlust. ⚠ Gate ③ liest dieselbe Naehe als GUT (ruhende Order AM Level), entry_room als SCHLECHT (Markt-Einstieg mit dem Level als Hindernis). Beides stimmt - fuer verschiedene Trades.">—</div>
|
||||
<div class="m15-item" id="m15-m5" title="M5-ZUSTAND, reine Anzeige - KEINE Richtung und KEIN Banner. Bewusst KEINE eigene M5-Setup-Karte (User-Entscheidung 2026-08-19): die entkoppelte Selbstmessung dieser Karte steht bei n=342 auf 53,5 % [48,2 .. 58,8] auf 30 min und 49,3 % auf 60 min - die vorab fixierte Bedingung (>=350 Faelle, KI ohne die 50) ist bei vorhandener Stichprobe NICHT erfuellt. Als Handelsregel faellt die Karte durch (backtest_m15_auto.py: OeR -0,162/-0,094, beide KI ohne Null). Kosten-Schwellen aus backtest_realcosts.py: Median 0,193, ab 0,32 Kostenfalle. Der M5-Raum steht bereits in Zeile 3b.">—</div>
|
||||
<!-- ⑥ SELBSTMESSUNG: die Karte zeigt die Trefferquote ihrer EIGENEN
|
||||
Lesart. ⚠ Jeder Ausfall, der in diesem Projekt je aufgedeckt wurde,
|
||||
kam aus einer Rueckkopplung — pbreak_predictions entlarvte den
|
||||
@@ -392,6 +393,6 @@
|
||||
</div>
|
||||
<div id="toast" class="toast hidden"></div>
|
||||
|
||||
<script src="app.js?v=182"></script>
|
||||
<script src="app.js?v=183"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user