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:
Axel Hocks
2026-08-19 19:17:18 +02:00
co-authored by Claude Opus 5
parent 618f3a4bee
commit 7915e171d0
3 changed files with 65 additions and 2 deletions
+34
View File
@@ -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]