M15-Karte: Bias war ein Richtungsgeber - korrigiert zum Veto (v=155)

Tagestest an 07.08. (test_m15_karte_tag.py) deckt einen strukturellen Fehler in
meiner eigenen Karte auf.

Rohzahlen: 92 M15-Bars, davon 46 (50 %) auf GRUEN. Entkoppelt auf
zusammenhaengende Bloecke bleiben 13 Setup-Episoden - und ALLE 13 waren LONG,
an einem Tag, der von 78,399 auf 77,383 FIEL (-1,016 $). Trefferquote 0 %,
OeR -0,753, SumR -9,79.

Ursache ist nicht Pech, sondern ein Denkfehler: gemessen ist "gegen den
M30-Trend zu handeln halbiert den Edge" - eine VERBOTS-Aussage. Ich hatte
daraus "M30+H1 einig -> Bias LONG" gemacht, also einen Richtungsgeber. Exakt
der Fehler, wegen dem die Gesamtempfehlung entfernt wurde (Richtung dort 48-51 %
Treffer). Die nachlaufende EMA zeigt im Trendtag stur in die alte Richtung -
dokumentiert seit analyze_signal_live.py.

Korrigiert: das Feld liefert nur noch, welche Richtung VERBOTEN ist
(bias.verboten); bias.richtung ist dauerhaft None. Das Banner nennt keine
Richtung mehr:
  "BEDINGUNGEN OK @ 77,098 - Order ANS LEVEL, nicht zum Markt - SHORT vermeiden"

Zwei weitere Befunde aus demselben Test, offen dokumentiert:
- Das Kosten-Gate blockte 0 von 92 Bars. Auf M15 liegt Spread/ATR bei ~0,10,
  die Schwelle bei 0,32 - das Gate ist dort faktisch dekorativ.
- Die strengere Bias-Variante (M30 UND H1) unterscheidet sich kaum von der
  laxen (46 gegen 47 gruene Bars) - die Zusatzstrenge kostet nichts, bringt
  aber auch nichts.

Auch ein Fehler in meinem TEST, dokumentiert: der erste Lauf zaehlte 46
fortlaufende Bars als 46 Trades und meldete 7 % Trefferquote - eine Bewegung
46-mal gezaehlt. Erst die Entkopplung auf Episoden macht die Zahl lesbar.

WARNUNG zur Beweiskraft: EIN Tag ist kein Edge-Nachweis. Belastbar ist hier
nicht die Trefferquote, sondern der MECHANISMUS - und der ist aus zwei
Halbjahren dokumentiert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-08 23:14:47 +02:00
co-authored by Claude Opus 5
parent e5adfc9757
commit 30830d76b1
4 changed files with 232 additions and 16 deletions
+17 -10
View File
@@ -159,12 +159,16 @@ function renderM15(s) {
const f = (v, d = 2) => (v == null ? "—" : (+v).toFixed(d));
// ── Gate 1: HTF-Bias (der einzige belegte Filter, Edge ×2) ───────────
// ⚠⚠ VETO, KEINE RICHTUNG (Korrektur 2026-08-08). Der erste Entwurf zeigte
// „Bias ▲ LONG" und erzeugte am 07.08. dreizehn LONG-Episoden an einem Tag,
// der 1,02 $ FIEL (Trefferquote 0 %). Gemessen ist nur: GEGEN den M30-Trend
// zu handeln halbiert den Edge — eine Verbots-, keine Richtungsaussage.
const b = s.bias || {};
const bOk = !!b.einig;
$("m15-bias").className = "m15-item " + (bOk ? "ok" : "fail");
const bOk = !!b.verboten; // Gate offen, sobald ein HTF steht
$("m15-bias").className = "m15-item " + (bOk ? "ok" : "");
$("m15-bias").textContent = bOk
? `Bias ${b.richtung === "LONG" ? "▲ LONG" : "▼ SHORT"} · M30+H1 einig`
: `Bias unklar · M30 ${b.m30 || "—"} / H1 ${b.h1 || "—"}`;
? `Veto: ${b.verboten} vermeiden (HTF ${b.m30}${b.einig ? " + H1 einig" : ""})`
: `kein Veto — HTF flach (M30 ${b.m30 ?? "—"} / H1 ${b.h1 ?? "—"})`;
// ── Gate 2: Kosten auf M15 ───────────────────────────────────────────
const k = s.kosten || {};
@@ -224,15 +228,18 @@ function renderM15(s) {
: "⑤ Veto: noch zu wenige Trades";
// ── Status: die Kette wird der Reihe nach ausgewertet ────────────────
// ⚠ Das Banner nennt AUSDRUECKLICH keine Richtung. Es sagt, ob die
// BEDINGUNGEN fuer eine Order am Level stehen — und was verboten ist.
let cls, txt;
if (!bOk) { cls = "rot"; txt = "🔴 KEIN TRADE · Bias unklar (M30/H1 uneinig)"; }
else if (!kOk && k.ratio != null) { cls = "rot"; txt = "🔴 KEIN TRADE · Kosten zu hoch"; }
else if (!zOk) { cls = "gelb"; txt = "🟡 WARTEN AUF LEVEL · Bias und Kosten passen"; }
else {
if (!kOk && k.ratio != null) { cls = "rot"; txt = "🔴 KEIN TRADE · Kosten zu hoch"; }
else if (!zOk) {
cls = "gelb";
txt = "🟡 WARTEN AUF LEVEL · Kosten passen, Kurs noch zu weit";
} else {
const nn = nah[0];
cls = "gruen";
txt = `🟢 SETUP BEREIT @ ${f(nn.level, 3)} · ${b.richtung === "LONG" ? "▲" : "▼"} `
+ `${b.richtung} · Order ANS LEVEL legen, nicht zum Markt`;
txt = `🟢 BEDINGUNGEN OK @ ${f(nn.level, 3)} · Order ANS LEVEL, nicht zum Markt`
+ (b.verboten ? ` · ⛔ ${b.verboten} vermeiden` : "");
}
st.className = "m15-status " + cls;
st.textContent = txt;