diff --git a/CLAUDE.md b/CLAUDE.md index e936382..0ba480b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -387,6 +387,40 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: hält über eine ganze Bar an und ist deshalb live überrepräsentiert (26,5 % gegen 17,0 %). Der auffälligste Einzelposten ist **min_conf: live 16,3 %, Sim 0,9 %** — das ist der nächste konkrete Ansatzpunkt, wenn jemand dem Rest nachgehen will. + ⚠⚠ **NACHGEPRÜFT AM 05.08. (User: „heute nur sehr wenige Empfehlungen")** — + 1.427 Zeilen geloggt (Soll ~1.440, die Erfassung selbst ist also intakt), + **5,0 % gerichtet**. Auffällig ist nicht die Menge, sondern die **Verteilung + über den Tag**: alle 71 gerichteten Empfehlungen fielen **vor 10:00**, danach + 16 Stunden lang genau eine. + | Block | 05.08. live | Backtest (voller Stack) | + |---|---|---| + | entry_room | 36,5 % | 41,4 % | + | breakout_pending | 19,4 % | 17,0 % | + | **min_conf** | **16,1 %** | **0,9 %** | + | htf_counter | 7,8 % | — (aus M5 aggregiert) | + | stretch | 6,7 % | 13,8 % | + | eia / stale | 4,1 / 4,1 % | — (nicht modelliert) | + | **gerichtet** | **5,0 %** | **19,5 %** | + ✅ **entry_room ist NICHT der Unterschied** — es ist live sogar seltener als im + Backtest. Die Lücke von 14,5 Pp wird von den **live-only-Gates** getragen, allen + voran **min_conf (+15,2 Pp)**, dazu htf_counter, EIA und `stale`. Zusammen sind + das 31 Punkte, also mehr als genug, um die Differenz zu erklären. + ⚠ Tageszeitlich dominierte nachmittags/abends **entry_room** (21:00: 59 von 60 + Minuten), ab 22:00 **min_conf** (100 %). Strukturelle Mitursache beim Raum-Gate: + es nutzt die **M5**-Pivots, deren Median-Abstand mit **0,61×ATR** praktisch auf + der Gate-Schwelle von 0,60 liegt — es blockt damit rund die Hälfte der Zeit + schon per Konstruktion (s. `backtest_level_tf.py`). + ✅ **TELEMETRIE-LÜCKE GEFUNDEN UND GESCHLOSSEN:** `min_conf`-Zeilen schrieben + `conf_pct = 0` — die verworfene Konfidenz stand NUR als Fließtext in den Gründen + und war nicht auswertbar. Damit liess sich beim zweitgrössten Blocker nicht + sagen, ob die Signale **knapp** (50–54) oder **weit** (20–30) unter der Schwelle + lagen. `wave_rec._build` gibt den Wert jetzt mit (reine Telemetrie, das Signal + bleibt WARTEN). Erste Live-Zeile: **conf 52** — drei Punkte zu wenig. + ⚠ **Was das noch NICHT beantwortet:** ob 55 die richtige Schwelle ist. + `backtest_conf.py` hat das Band 40–54 % als negativ gemessen (−0,025 gegen + +0,058), eine Senkung ist also nicht angezeigt. Die neue Zahl sagt nur, WIE VIEL + Signalmenge unmittelbar hinter der Schwelle steht — nach ein paar Tagen + auswertbar. ⚠ **Die im TF-Churn-Fix dokumentierte Erfolgskontrolle („WARTEN-Anteil Richtung 43 % bewegen") ist damit hinfällig** und sollte nicht weiterverfolgt werden. - **Signalhäufigkeit** (`backtest_dist.py`): ~57 % der Zeit LONG/SHORT, ~43 % WARTEN. diff --git a/core/wave_rec.py b/core/wave_rec.py index 5764a6c..b497f2f 100644 --- a/core/wave_rec.py +++ b/core/wave_rec.py @@ -902,6 +902,14 @@ class WaveRecommender: # tragen negativen Edge (gemessen Band 40–54 %) → kein Trade. if conf < _MIN_CONF: wait["block"] = "min_conf" + # ⚠ Die VERWORFENE Konfidenz mitgeben (2026-08-05). Bisher blieb + # `conf_pct` hier auf 0 — die Zahl stand nur als Fliesstext in den + # Gruenden und war damit nicht auswertbar. `min_conf` ist live aber der + # zweitgroesste Blocker (16,1 % am 05.08. gegen 0,9 % im Backtest), und + # ohne den Wert laesst sich nicht sagen, ob die Signale knapp (50–54) + # oder weit (20–30) unter der Schwelle lagen. Reine Telemetrie: das + # Signal bleibt WARTEN, nur die Zahl wird mitgeschrieben. + wait["conf_pct"] = conf wait["reasons"] = [f"Konfidenz {conf}% < {_MIN_CONF}% — Setup zu schwach"] + reasons[:2] return wait, snap