M15-Karte: Gate 3b zeigt Motor-Block + RAUM je Richtung

Anlass Trade #49671601 (-87,03 EUR). Die Praemisse "SL trotz LONG-
Empfehlung" stimmte nicht: 138 Zeilen zwischen Ein- und Ausstieg,
100 % WARTEN (entry_room 76 %, breakout_pending 19 %, min_conf 5 %).
Gesehen wurde "verboten: SHORT" - ein Veto. Dritter Fall derselben
Veto->Richtung-Umwandlung in dieser Karte (Code 08.08., Geometrie
10.08. frueh, jetzt die Lesart).

Der eigentliche Befund: entry_room und Gate 3 lesen DIESELBE Tatsache
("ein Level ist nah") mit umgekehrtem Vorzeichen. Beide gemessen,
beide richtig - ueber verschiedene Trades (Markt-Einstieg mit dem
Level als Hindernis vs. ruhende Order AM Level). Die Karte zeigte nur
die gruene Haelfte; die Block-Grund-Zeile war mit der Gesamtempfehlung
verschwunden.

Gebaut: Zeile 3b (#m15-motor) mit block_reason im Klartext + Raum je
Richtung. Reine Anzeige. Das Status-Banner bleibt bewusst unveraendert
- es auf gelb zu ziehen waere eine Strategie-Aenderung, und die einzige
Live-Zahl dafuer (-9,91 vs +3,24 EUR/Lot, n=76) hat ein KI, das die
Null enthaelt.

- wave_rec.room_info(): EINE Implementierung fuer Gate und Anzeige,
  _room_gate rechnet jetzt darueber (kein Nachbau)
- tests/test_room_info.py: Bitgleichheit ueber 2.000 Zufallslagen x 3
  Signale, Gate feuerte >300x; Grenzfall-Test fuer die Rundung
- v=160

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-10 09:09:27 +02:00
co-authored by Claude Opus 5
parent 5474c2be61
commit 47c596ed70
6 changed files with 375 additions and 19 deletions
+50
View File
@@ -256,6 +256,56 @@ function renderM15(s) {
? "④ erwartete Spanne · " + r.map(x => `${x.minutes} ${f(x.lo, 2)}${f(x.hi, 2)}`).join(" · ")
: "④ erwartete Spanne —";
}
// ── ③b RAUM + Motor-Zustand ──────────────────────────────────────────
// ⚠⚠ ANLASS: Trade #49671601 (10.08., 87 €). Die Karte stand auf GRÜN,
// während der Signal-Motor zu 76 % mit `entry_room` blockte — der Widerstand
// lag 0,07×ATR voraus, der Stop 4,7×ATR zurück. Die Karte prüfte, ob ein
// Level NAH ist, nie ob RAUM dahinter ist. Genau das steht jetzt hier.
// ⚠ Reine Anzeige: keine Richtung, kein Blockieren der Buttons.
const mo = s.motor || {};
const rm = mo.raum || {};
const moEl = $("m15-motor");
const seite = (o, lbl) => {
if (!o) return null;
if (o.level == null) return `${lbl} frei`;
return `${lbl} ${o.dist_atr}×ATR${o.frei ? "" : " ⚠"}`;
};
if (mo.block) {
// Der Motor blockt — das ist die Information, die gefehlt hat.
const gr = {
entry_room: "kein Raum zum Gegenlevel",
breakout_pending: "Bestätigung läuft noch",
min_conf: `Konfidenz ${mo.conf_pct ?? "?"} % zu schwach`,
htf_counter: "gegen den M30-Trend",
stretch: "überdehnt",
deadband: "Totband — kein Trend",
eia: "EIA-Blackout",
dead_hour: "gesperrte Stunde",
stale: "Daten veraltet",
no_data: "keine Daten"
}[mo.block] || mo.block;
moEl.className = "m15-item " + (mo.block === "entry_room" ? "warn" : "");
moEl.textContent = `③b Motor blockt: ${gr}`;
} else if (mo.signal) {
moEl.className = "m15-item ok";
moEl.textContent = `③b Motor frei · ${mo.signal}`;
} else {
moEl.className = "m15-item";
moEl.textContent = "③b Motor —";
}
const teile = [seite(rm.long, "▲"), seite(rm.short, "▼")].filter(Boolean);
if (teile.length) {
moEl.textContent += ` · Raum ${teile.join(" / ")}`
+ (rm.gate ? ` (Gate ${rm.gate})` : "");
}
moEl.title = "Was der Signal-Motor GERADE blockt, plus der Raum zum nächsten "
+ "Gegenlevel je Richtung (M5 — dieselbe Rechnung wie das Gate selbst, kein "
+ "Nachbau). Unter 0,6×ATR ist der Ertrag am Level gedeckelt: gemessen "
+ "ØR 0,119/0,067 bei PF 0,42/0,66 — Trefferquote hoch und trotzdem "
+ "Verlust. ⚠ Gate ③ liest dieselbe Nähe als GUT (ruhende Order AM Level), "
+ "entry_room als SCHLECHT (Markt-Einstieg mit dem Level als Hindernis). "
+ "Beides stimmt — für verschiedene Trades. Blockt nichts.";
rEl.title = "Reine Geometrie auf dem Kegel: liegt das Ziel im 80-%-Band des "
+ "Horizonts? Das Ziel wird NUR in der von ② erlaubten Richtung gebildet — "
+ "ein rein geometrisches Ziel zeigte am 10.08. auf die verbotene Seite. "