M15-Karte "Setup-Bereitschaft" gebaut - Ersatz der Gesamtempfehlung (v=153)
Nach drei negativen M15-Messungen (Squeeze-Einstieg, VWAP-Baender, Exit-ATR) steht fest: auf M15 traegt keine Richtungsquelle. Gebaut ist deshalb bewusst KEINE Empfehlung, sondern eine sequenzielle Gate-Kette: [1 HTF-BIAS M30/H1] -> [2 KOSTEN Spread/ATR_M15] -> [3 LEVEL & KEGEL] -> Order AM LEVEL Der Unterschied zur alten Karte ist grundsaetzlich: dort wurden Stimmen zu einem Bias VERRECHNET (gemessen 48-51 % Treffer), hier muss jedes Gate EINZELN passieren. Ein gefallenes Gate laesst sich nicht durch ein anderes ausgleichen. Nur belegte Bausteine: HTF-Trend (einziger robuster Filter, Edge x2), Kosten (M15 gemessen 0,104 gegen M5 0,193), naechstes stehendes Level + P(break), Kegel (out-of-sample kalibriert, 80-%-Band trifft 77 %), Veto (-6,60 EUR/Lot). Status-Banner: SETUP BEREIT / WARTEN AUF LEVEL / KEIN TRADE. Es bestaetigt ausdruecklich auch das NICHT-Handeln - die gemessene Kern-Leckage sind diskretionaere Abweichungen. Die Order-Buttons werden BEWUSST NICHT gesperrt (gegen den Vorschlag "ausgrauen"): hartes Blockieren wurde im Projekt verworfen, und User-Uebersteuerungen liefen gemessen 68 % WR. Umsetzung: engine._m15_setup() setzt nur zusammen, was der Snapshot ohnehin erzeugt. Neu gerechnet wird allein das M15-Kosten-Verhaeltnis und P(break) fuer das naechste Level. Dafuer veroeffentlicht wave_rec jetzt tf_atr (ADDITIV) - der ATR je Zeitebene wurde im Turn-Fetch laengst berechnet, war aber nirgends abrufbar. P(break)-Merkmale bleiben auf M5 (Modell ist darauf trainiert, Fix 2026-07-13). Mit 5 Szenarien getestet (alles passt, Bias uneinig, Kosten teuer, Level zu weit, Kaltstart ohne ATR_M15 -> kein Absturz), live verifiziert ueber deploy.py --feld m15_setup. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
010007f7a3
commit
44955bf70a
@@ -398,6 +398,14 @@ class WaveRecommender:
|
||||
if turn_data: # frisch geholt → neu berechnen, sonst letzten Stand halten
|
||||
self._last_tf_turns = {lbl: self._turn_state(c, a)
|
||||
for lbl, (c, a) in turn_data.items()}
|
||||
# ⚠ ADDITIV (2026-08-08): den ATR je Zeitebene MITNEHMEN. Er wird im
|
||||
# Turn-Fetch ohnehin berechnet (`turn_data[lbl] = (closes, atr)`),
|
||||
# war aber nirgends abrufbar — die M15-Setup-Karte braucht ihn fuer
|
||||
# das Kosten-Gate (Spread/ATR_M15) und die Abstandsangaben. Ihn dort
|
||||
# neu zu holen waere ein zweiter MT5-Fetch fuer Zahlen, die schon da
|
||||
# sind (derselbe Fehler wie beim Konsens-Pfeil, der ein zweites
|
||||
# `_verdict()` rechnete).
|
||||
self._tf_atr = {lbl: a for lbl, (c, a) in turn_data.items() if a}
|
||||
# P(break)-Features IMMER aus M5 (Modell wurde auf M5 trainiert/kalibriert
|
||||
# — die Wave-TF wechselt per Heuristik bis M30; damit wäre mom6 ein 3-h-
|
||||
# statt 30-min-Momentum und der ATR 2–3× größer → P(break) völlig falsch
|
||||
@@ -484,6 +492,7 @@ class WaveRecommender:
|
||||
else:
|
||||
self._last_bounce = {"state": None, "dir": None, "tf": None}
|
||||
snap["tf_turns"] = dict(self._last_tf_turns)
|
||||
snap["tf_atr"] = dict(getattr(self, "_tf_atr", {}) or {})
|
||||
snap["bounce"] = dict(self._last_bounce) # Multi-TF überschreibt Basis-TF
|
||||
snap["pb_feats"] = dict(self._pb_feats) if getattr(self, "_pb_feats", None) else None
|
||||
snap["pb_levels"] = dict(self._pb_levels) if getattr(self, "_pb_levels", None) else None
|
||||
|
||||
Reference in New Issue
Block a user