From 23c68e8837eb44415965084cc12433cac2c01f8c Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Fri, 31 Jul 2026 13:43:38 +0200 Subject: [PATCH] Verdict: M30/H1 bekommen Gewicht 0 ohne Aussage (Bias-Fix Teil 3) Anlass war die User-Frage "H1 aus der Gesamtempfehlung entfernen, da wir jetzt mit M30 arbeiten?". Antwort NEIN, aber die Frage hat einen echten Defekt freigelegt. Zur Praemisse: auf M30 umgestellt wurde die S/R-LEVEL-QUELLE, nicht die Zeitebenen-Logik. H1 war nie Basis-TF (tf_max=M30), sondern immer Kontext. Zur vermuteten Doppelzaehlung - gemessen an verdict_votes (n=7.074): bei gerichteter Welle stimmt M30 nur zu 14,9 % mit ihr ueberein, H1 zu 47 %, M30 und H1 untereinander nur zu 33,8 %. Keine redundanten Stimmen (Reversals heben den M30-Filter bewusst auf, und M30 ist meist gar nicht gerichtet). H1 fliesst zwar auch als Konfluenz-Bonus in die Konfidenz - aber in eine ANDERE Kennzahl (Ring vs. Nadel), nicht zweimal in dieselbe. DER ECHTE DEFEKT: add("M30", ...) und add("H1", ...) hatten Gewicht 1,5 UNBEDINGT, auch bei Stimme 0. Damit derselbe Fehler wie beim Wellen-Modul (Bias-Fix Teil 2 vom 30.07.), hier uebersehen. Eine 0-Stimme heisst "EMA-Abstand im Totband" = keine Aussage, nicht "neutral" - mit vollem Gewicht im Nenner zog sie die Bias-Nadel dauerhaft zur Mitte. Gemessen an 7.074 Verdicts: M30 ist in 57,9 % der Faelle ohne Aussage (H1 nur 1,8 %). Oe-Bias-Betrag 0,371 -> 0,441, Median-Verstaerkung 1,30x, in 33,3 % der Zeilen deutlich staerkere Nadel. Fix: 1.5 if vote != 0 else 0.0 fuer beide. `others` filtert bereits auf weight>0, die "x/y einig"-Zaehlung zieht damit automatisch mit. Live verifiziert: M30 "flach" -> Gewicht 0,00, bias -1,5/4,5 = -0,333 statt -1,5/6,0 = -0,250 (genau die gemessene 1,33x-Verstaerkung), agree 3/5 statt 3/6. REINE ANZEIGE - die Order-Logik haengt an der Wellen-Headline, nicht am Bias. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 28 +++++++++++++++++++++++----- core/engine.py | 19 ++++++++++++++++--- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f400e97..87c70ca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1365,14 +1365,32 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: 2 einigen Modulen). Jetzt Referenz = Wellen-Richtung, ersatzweise die **Bias- Richtung** (real: „2/3"). Beides REINE ANZEIGE — Order-Logik unberührt. Mit 6 synthetischen Szenarien verifiziert (alle einig · Rest dagegen · alles neutral · - WARTEN+alle SHORT · Welle+Squeeze). ⚠ **Offen (dokumentiert, nicht geändert):** - (a) **Doppelzählung** — die Welle nutzt M30 als Gegen-Trend-Filter und H1 als - Konfluenz-Bonus; beide zählen zusätzlich als eigene Stimmen (je 1,5), dieselbe - Information also zweimal. (b) **Drei divergierende Level-Quellen** seit der + WARTEN+alle SHORT · Welle+Squeeze). + ⚠ **Bias-Fix DRITTER TEIL 2026-07-31 (Anlass: User-Frage „H1 aus der Gesamt- + empfehlung entfernen, da wir jetzt mit M30 arbeiten?"):** Antwort **NEIN** — die + Prämisse vermischt zwei Dinge (auf M30 umgestellt wurde die **S/R-Level-Quelle**, + nicht die Zeitebenen-Logik; H1 war nie Basis-TF, `tf_max=M30`). Und die vermutete + **Doppelzählung ist gemessen schwach** (`verdict_votes`, n=7.074): bei gerichteter + Welle stimmt **M30 nur zu 14,9 %** mit ihr überein, H1 zu 47 %, M30 und H1 + untereinander nur zu **33,8 %** — keine redundanten Stimmen (Reversals heben den + M30-Filter bewusst auf, und M30 ist meist gar nicht gerichtet). H1 fließt zwar auch + als Konfluenz-Bonus in die Konfidenz — aber in eine ANDERE Kennzahl (Konfidenz-Ring + vs. Bias-Nadel), nicht zweimal in dieselbe. + **DER ECHTE DEFEKT lag woanders und ist behoben:** `add("M30", …)`/`add("H1", …)` + hatten **Gewicht 1,5 UNBEDINGT** — auch bei Stimme 0. Derselbe Fehler wie beim + Wellen-Modul (Teil 2), hier übersehen. Eine 0-Stimme heißt „EMA-Abstand im Totband" + = **keine Aussage**, nicht „neutral". Gemessen: **M30 ist in 57,9 % der Fälle ohne + Aussage** (H1 nur 1,8 %) → Ø-Bias-Betrag **0,371 → 0,441**, Median-Verstärkung + **1,30×**, in **33,3 %** der Zeilen deutlich stärkere Nadel. Jetzt + `1.5 if vote != 0 else 0.0`; `others` filtert bereits auf `weight>0`, die + „x/y einig"-Zählung zieht mit. Live verifiziert: M30 „flach" → Gewicht 0,00, + bias −1,5/4,5 = **−0,333** statt −1,5/6,0 = −0,250. REINE ANZEIGE. + ⚠ **Offen (dokumentiert, nicht geändert):** + (a) **Drei divergierende Level-Quellen** seit der M30-Umstellung: `_draw_levels` (M30 → Chart/S/R-Close), `pb_levels` (M5 → Entry- Raum-Gate), `_sr_levels` (Misch-Set → Wellen-Konfidenz); real wichen die Supports um 0,65 $ ab. Bewusst so (jedes Gate ist auf seine Quelle kalibriert), aber eine - Stolperfalle. (c) `tu` wird noch als Parameter durchgereicht, seit 2026-07-06 ungenutzt. + Stolperfalle. (b) `tu` wird noch als Parameter durchgereicht, seit 2026-07-06 ungenutzt. Formel/Details: `docs/gesamtempfehlung.md`. Headline = **validierte Welle** (steuert Order) + **Zeitebene** (`verdict.tf`, z. B. „▲ LONG · M5" — TF, für die die Empfehlung gilt); Rest = nur Konsens-Anzeige. diff --git a/core/engine.py b/core/engine.py index a5d6ba2..e157d61 100644 --- a/core/engine.py +++ b/core/engine.py @@ -2237,11 +2237,24 @@ class TradingEngine: add("Welle", wv, 3.0 if wv != 0 else 0.0, f"{wsig or '—'} · {(wave_signal or {}).get('conf_pct', 0)}%") - # 2/3) M30 / H1 — die EMA-Signale, die die Welle tatsächlich nutzt + # 2/3) M30 / H1 — die EMA-Signale, die die Welle tatsächlich nutzt. + # ⚠ Gewicht 0 OHNE Aussage (Fix 2026-07-31) — dieselbe Regel wie bei Welle, + # Squeeze, Elliott und KI; bei der Verdict-Überarbeitung am 30.07. hier + # übersehen. Eine 0-Stimme bedeutet „EMA-Abstand im Totband" = keine Aussage, + # nicht „neutral" — mit vollem Gewicht im Nenner zog sie die Bias-Nadel + # dauerhaft zur Mitte. + # GEMESSEN an 7.074 geloggten Verdicts (`verdict_votes`): **M30 ist in 57,9 % + # der Fälle ohne Aussage** (H1 nur in 1,8 %) → Ø-Bias-Betrag 0,371 → **0,441**, + # Median-Verstärkung **1,30×**, in **33,3 %** der Zeilen deutlich stärkere Nadel. + # ⚠ Anlass war die User-Frage „H1 aus der Gesamtempfehlung entfernen?". Die + # Antwort ist NEIN — die vermutete Doppelzählung ist gemessen schwach (bei + # gerichteter Welle stimmt M30 nur zu 14,9 % mit ihr überein, H1 zu 47 %; M30 + # und H1 untereinander nur zu 33,8 %). Der eigentliche Defekt war dieser hier. + # REINE ANZEIGE — die Order-Logik hängt an der Wellen-Headline, nicht am Bias. m30 = int((wave_snap or {}).get("htf_trend", 0) or 0) h1 = int((wave_snap or {}).get("h1_trend", 0) or 0) - add("M30", m30, 1.5, word(m30)) - add("H1", h1, 1.5, word(h1)) + add("M30", m30, 1.5 if m30 != 0 else 0.0, word(m30)) + add("H1", h1, 1.5 if h1 != 0 else 0.0, word(h1)) # 4) TradersUnion ENTFERNT aus dem Verdict-Konsens (User-Vorgabe 2026-07-06): # lagt + nicht backtestbar + Standard-Indikator-Konfluenz = kein Edge. Bleibt