Reversal-Setup abgeschaltet (User-Entscheidung nach der Messung)
backtest_reversal_angle.py hat den Trigger in JEDER Variante beidhaelftig negativ gemessen (IST -0,122/-0,031 - vorzeichenkorrigiert -0,173/-0,061 - ohne Winkelbedingung -0,099/-0,023). Ausschlag gab aber nicht nur die Zahl: das Setup hebelt ZWEI gemessen POSITIVE Schutzmechanismen aus - die Anti-Ueberdehnung und den M30-Gegen-Trend-Filter (Edge x2). Ein Setup ohne eigenen Edge, das validierte Filter umgeht, ist der unguenstigste Fall. Umsetzung: neuer Schalter [trading] reversal_enabled (Config-Default im Engine false). WICHTIG: der Modul-Default in wave_rec bleibt True - saemtliche Backtests rufen dasselbe _build, ein False-Default haette alle bestehenden Messungen still veraendert. Abgeschaltet wird ausschliesslich im Live-Pfad. Verhaltensaenderung nur im Band |stretch| 3,0-3,5: dort kam vorher ein antizyklisches REV-Signal, jetzt das normale Trendsignal; ab 3,5 greift wie gehabt die Anti-Ueberdehnung. Verifiziert: - 3 Szenarien: ueberkauft+steigend SHORT/WAVE_REV_SHORT -> LONG/WAVE_LONG, ueberverkauft+fallend LONG/WAVE_REV_LONG -> SHORT/WAVE_SHORT, normaler Trend unveraendert - Live nach Neustart: bei 3,18xATR Ueberdehnung jetzt WARTEN/setup=WAVE/ reversal=None statt REV_SHORT; Log "Reversal-Setup AUS" - measurement_reminder CONFIG_DEPS ergaenzt, 11 Werte alle korrekt Die Winkelbedingung wurde bewusst NICHT vorzeichenkorrigiert - die korrigierte Variante misst sich schlechter. Die irrefuehrenden Kommentare sind jetzt als solche markiert. Bounce-Anzeige bleibt unveraendert (nur Warn-Kontext). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
d052905319
commit
1a67944842
+40
-3
@@ -201,6 +201,27 @@ class WaveRecommender:
|
||||
# Ertrag ist durch den S/R-Auto-Close gedeckelt, Kosten fressen den Rest.
|
||||
# 0 = aus. Nur Live-Pfad (refresh_market); Backtests via _build bleiben frei.
|
||||
self._entry_room_atr = 0.0
|
||||
# Reversal/Bounce-Setup an/aus. ⚠ Modul-Default bewusst TRUE: sämtliche
|
||||
# Backtests rufen dasselbe `_build` — ein False-Default würde alle
|
||||
# bestehenden Messungen still verändern. Abgeschaltet wird über die
|
||||
# Config (`[trading] reversal_enabled`, s. `engine`), nicht hier.
|
||||
self._reversal_enabled = True
|
||||
|
||||
def set_reversal_enabled(self, on: bool):
|
||||
"""Antizyklisches Reversal-Setup (WAVE_REV_*) an/aus.
|
||||
|
||||
⚠ GEMESSEN NEGATIV (`backtest_reversal_angle.py`, 2026-08-04, 80k M5,
|
||||
kanonischer Exit, Echtkosten, 2 Halbjahre): ØR −0,122/−0,031, PF 0,79/0,94.
|
||||
Auch die vorzeichenkorrigierte Variante (−0,173/−0,061) und die Kontrolle
|
||||
ohne Winkelbedingung (−0,099/−0,023) sind beidhälftig negativ. Dazu hebt
|
||||
das Setup ZWEI gemessen positive Schutzmechanismen aus (Anti-Überdehnung
|
||||
und den M30-Gegen-Trend-Filter, Edge ×2). Deshalb live abgeschaltet.
|
||||
`true` stellt das alte Verhalten wieder her.
|
||||
"""
|
||||
with self._lock:
|
||||
self._reversal_enabled = bool(on)
|
||||
log.info(f"Reversal-Setup {'AN' if on else 'AUS'}"
|
||||
+ ("" if on else " (gemessen negativ, backtest_reversal_angle.py)"))
|
||||
|
||||
def set_entry_room(self, x: float):
|
||||
with self._lock:
|
||||
@@ -716,11 +737,27 @@ class WaveRecommender:
|
||||
# aber schwächer als Trend & regime-anfällig (blutet in starken Trends).
|
||||
# Hebt Anti-Überdehnung UND M30-Filter bewusst auf (per Definition gegen
|
||||
# die nachlaufende EMA/HTF).
|
||||
# ⚠⚠ ABGESCHALTET über `[trading] reversal_enabled=false` (2026-08-04).
|
||||
# Gemessen (`backtest_reversal_angle.py`, 80k M5, kanonischer Exit,
|
||||
# Echtkosten, 2 Halbjahre) ist der Trigger in JEDER Variante beidhälftig
|
||||
# negativ: IST −0,122/−0,031 · vorzeichenkorrigiert −0,173/−0,061 ·
|
||||
# ohne Winkelbedingung −0,099/−0,023. Der Modul-Default bleibt True,
|
||||
# damit die Backtests unverändert weiterlaufen.
|
||||
# ⚠ ZUR BEDINGUNG SELBST (nicht korrigiert, weil gemessen SCHLECHTER):
|
||||
# `calc_trend_angle` liefert 0°=AUFWÄRTS … 180°=ABWÄRTS, also ist
|
||||
# `ad = angle−90` NEGATIV bei STEIGENDEM Kurs. Die untenstehenden
|
||||
# Kommentare („Winkel auf/ab") beschreiben damit das GEGENTEIL dessen,
|
||||
# was der Code tut: SHORT feuert bei überkauft UND WEITER STEIGENDEM
|
||||
# Winkel. Das Vorzeichen wurde bewusst NICHT gedreht — die korrigierte
|
||||
# Variante misst sich schlechter, und alle Alt-Messungen beruhen auf
|
||||
# diesem Verhalten.
|
||||
ad = angle - 90.0
|
||||
if stretch <= -_REVERSAL_STRETCH and ad >= _ANGLE_DEAD:
|
||||
sig, reversal = "LONG", True # überverkauft + Winkel auf → Bounce
|
||||
if not self._reversal_enabled:
|
||||
pass # Setup aus → nur Trendsignal
|
||||
elif stretch <= -_REVERSAL_STRETCH and ad >= _ANGLE_DEAD:
|
||||
sig, reversal = "LONG", True # ⚠ faktisch: Winkel FÄLLT noch
|
||||
elif stretch >= _REVERSAL_STRETCH and ad <= -_ANGLE_DEAD:
|
||||
sig, reversal = "SHORT", True # überkauft + Winkel ab → Bounce
|
||||
sig, reversal = "SHORT", True # ⚠ faktisch: Winkel STEIGT noch
|
||||
|
||||
d_sig = 1 if sig == "LONG" else -1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user