Widerspruch "stark LONG" bei WARTEN aufgeloest (v=149)

User-Fund: Headline "◌ WARTEN · M30", darunter "stark LONG · 2 von 2
stimmberechtigten fuer LONG (7 ohne Aussage)". Beide Zahlen stimmten, die
Kombination war irrefuehrend. Zwei Ursachen:

(1) Die Headline nannte den Grund nicht. Er stand im Snapshot
    (wave_signal.block = min_conf, conf 49 gegen 55 % — die Welle HATTE eine
    LONG-Richtung, ihr fehlten sechs Punkte), gerendert wurde er aber nur bei
    breakout_pending. ⚠ Meine Luecke vom 06.08.: ich habe die Tages-Verteilung
    (#vd-blocks) gebaut und den AKTUELLEN Grund vergessen. Jetzt Mapping fuer
    alle neun Gate-Codes an der Headline.

(2) "2 von 2" las sich wie Einstimmigkeit — es waren 2 von 7 sichtbaren
    Modulen (H1 1,5 und Liq-Trend 0,5), und die Welle, die als einzige die
    Order steuert, war nicht dabei. bias=1,0 ist arithmetisch korrekt, aber die
    Basis war winzig. Das Entmachten von Elliott/Orderbuch hat das Problem
    nicht erzeugt, aber verschaerft.
    Neu: Zeile fuehrt mit der Basis, "stark/leicht" entfaellt solange weniger
    als die Haelfte der Module spricht, stumme Welle wird ausdruecklich genannt.

Live gegengerechnet:
  "◌ WARTEN · M30  ·  Konfidenz 49 % < 55 % — Setup zu schwach"
  "2 von 7 Modulen sprechen, alle fuer LONG · die Welle ... schweigt"

Reine Anzeige — Gewichte, Gates und Order-Logik unveraendert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 00:04:46 +02:00
co-authored by Claude Opus 5
parent cf94679022
commit 4155afb434
3 changed files with 66 additions and 7 deletions
+38 -4
View File
@@ -107,8 +107,28 @@ function renderVerdict(v, snap) {
// Stelle, an der der scheinbare Widerspruch entsteht. Jetzt steht er direkt an der
// Headline: „◌ WARTEN · M15 · LONG, noch 0.11 bis zur Bestätigung".
const bo = (snap && snap.wave && snap.wave.breakout) || null;
const wsig = (snap && snap.wave_signal) || {};
if (sig === "WARTEN" && bo && bo.pending && bo.dir) {
head += ` · ${bo.dir}, noch ${fmt(bo.need, 2)} bis zur Bestätigung`;
} else if (sig === "WARTEN" && wsig.block) {
// ⚠ ERGÄNZUNG 2026-08-07: bisher stand der Grund NUR bei
// `breakout_pending` an der Headline — bei jedem anderen Gate blieb dort
// ein nacktes „WARTEN", während die Konsens-Zeile darunter „stark LONG"
// meldete. Genau dieser Widerspruch war der Anlass. Der Grund liegt im
// Snapshot (`wave_signal.block`), er wurde nur nie gezeigt.
const G = {
min_conf: `Konfidenz ${wsig.conf_pct || 0} % < 55 % — Setup zu schwach`,
entry_room: "kein Raum bis zum Gegenlevel",
htf_counter: "höhere Zeitebene steht dagegen",
stretch: "Kurs zu weit von der EMA entfernt",
deadband: "Totband — kein klarer Trend",
dead_hour: "gesperrte Handelsstunde",
eia: "EIA-Blackout",
stale: "Kursdaten veraltet",
no_data: "keine Daten",
};
const g = G[wsig.block] || wsig.block;
if (g) head += ` · ${g}`;
}
$("vd-signal").textContent = head;
@@ -144,15 +164,29 @@ function renderVerdict(v, snap) {
// Module gerade nichts sagen.
const refDir = v.ref_dir || null;
const silent = typeof v.silent === "number" ? v.silent : null;
// ⚠⚠ KORREKTUR 2026-08-07. „stark LONG · 2 von 2 stimmberechtigten" las sich
// wie Einstimmigkeit — dabei sprachen nur 2 von 9 Modulen, und die WELLE, die
// als einzige die Order steuert, war nicht dabei. `bias` ist arithmetisch
// richtig (das gesamte sprechende Gewicht war einig), aber die BASIS war
// winzig. Seit dem Entmachten von Elliott und Orderbuch (06.08.) trat das
// häufiger auf. Jetzt führt die Zeile mit der Basis und nennt die stumme
// Welle ausdrücklich — das löst den scheinbaren Widerspruch zur Headline auf.
const welleStumm = (v.votes || []).some(
m => m.name === "Welle" && !Number(m.weight));
const nMod = (v.votes || []).filter(m => m.used !== false).length;
let consensus;
if (sig === "—") {
consensus = "keine Daten";
} else if (!refDir || !total) {
consensus = `Modul-Konsens: ${strength} ${dir} · kein Modul mit klarer Aussage`;
consensus = "Modul-Konsens: kein Modul mit klarer Aussage";
} else {
consensus = `Modul-Konsens: ${strength} ${dir} · ${agree} von ${total} `
+ `stimmberechtigten für ${refDir}`
+ (silent ? ` (${silent} ohne Aussage)` : "");
// „stark/leicht" nur noch, wenn ueberhaupt die Haelfte der Module spricht —
// sonst beschreibt das Wort die Einigkeit von zwei Nebenstimmen.
const dueneBasis = nMod && total < nMod / 2;
consensus = `Modul-Konsens: ${agree} von ${nMod} Modulen sprechen, `
+ `${agree === total ? "alle" : `${agree} davon`} für ${refDir}`
+ (dueneBasis ? "" : ` · ${strength} ${dir}`);
if (welleStumm) consensus += " · ⚠ die Welle (steuert die Order) schweigt";
}
$("vd-consensus").textContent = consensus + costTxt;
$("vd-needle").style.left = ((bias + 1) / 2 * 100).toFixed(1) + "%";
+2 -2
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=148">
<link rel="stylesheet" href="style.css?v=149">
</head>
<body>
<!-- Modul-Menü (ganz oben) -->
@@ -330,6 +330,6 @@
</div>
<div id="toast" class="toast hidden"></div>
<script src="app.js?v=148"></script>
<script src="app.js?v=149"></script>
</body>
</html>