Squeeze-Trades bekommen den SL aus M5-ATR (User-Entscheidung), TP unveraendert
trader._calc_sl_tp bekommt die ATR-Zeitebene als Parameter (Default SL_TF = M15); _send/_send_locked/open_long/open_short und place_stop reichen sie durch. Gesetzt wird sie an genau zwei Stellen: engine._open bei source="auto_squeeze" und _manage_squeeze_pending bei quelle="squeeze". Manuelle Trades und Auto-Signal bleiben bei M15. Grundlage backtest_sl_basis.py: auf Squeeze-Entries ist der Ertrag zwischen beiden Basen ein Wash (alle Varianten innerhalb eines Standardfehlers), der Worst-Case sinkt aber von -8,83 auf -2,44 xATR_M5 = Faktor 3. Auf der Wellen-Population ist der weite M15-SL in BEIDEN Haelften besser - deshalb bewusst keine globale Umstellung. Die Multiplikatoren (1,8-2,2 xATR) sind nicht angefasst, nur die Zeitebene. TP bewusst NICHT betroffen (User: "nur fuer SL, der TP soll mit dem Runner mitwachsen"). Geprueft statt angenommen: der von _calc_sl_tp zurueckgegebene TP wird von KEINEM Aufrufer gesendet, beide setzen nur req["sl"]. Das Ziel verwaltet trailing.py dynamisch (3,5 x ATR der Wellen-Zeitebene). Warnkommentar im Code, warum der TP dort nicht mit in die Order darf. 4 Szenarien getestet. Dabei eigene Fehlannahme korrigiert: ohne Pivot greift der 1,2-%-Fallback, der beim M15 vom MINDEST-Deckel aufgeweitet wird - die 2,2x-Obergrenze wird dort gar nicht erreicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a6c43183e2
commit
7009541c42
+14
-2
@@ -1209,7 +1209,10 @@ class TradingEngine:
|
||||
if otype in vorhanden:
|
||||
continue
|
||||
tag = "SQZ-STOP" if quelle == "squeeze" else "SIG-STOP"
|
||||
t, err = self.trader.place_stop(sym, otype, preis, comment=tag)
|
||||
t, err = self.trader.place_stop(
|
||||
sym, otype, preis, comment=tag,
|
||||
# gleiche Regel wie beim Market-Pfad (s. `_open`)
|
||||
atr_tf=(mt5.TIMEFRAME_M5 if quelle == "squeeze" else None))
|
||||
if t:
|
||||
log.info(f"🎯 Pending-Entry ({quelle}) gesetzt: "
|
||||
f"{'BUY_STOP' if otype == mt5.ORDER_TYPE_BUY_STOP else 'SELL_STOP'}"
|
||||
@@ -2315,7 +2318,16 @@ class TradingEngine:
|
||||
log.info(f"[ORDER] {want} ohne passende Empfehlung (Signal={sig}) "
|
||||
f"— vom User bestätigt, wird eröffnet")
|
||||
self.trader.set_open_context(**self._last_rec)
|
||||
err = fn(sym)
|
||||
# ⚠ SL-ATR-Zeitebene quellen-abhaengig (2026-08-05, User-Entscheidung nach
|
||||
# `backtest_sl_basis.py`): SQUEEZE bekommt **M5**, alles andere bleibt bei
|
||||
# M15. Begruendung: auf Squeeze-Entries ist der Ertrag zwischen beiden
|
||||
# Basen ein Wash (innerhalb eines Standardfehlers), der Worst-Case sinkt
|
||||
# aber von −8,83 auf −2,44xATR_M5 = Faktor 3. Auf der WELLEN-Population
|
||||
# ist der weite M15-SL dagegen in BEIDEN Halbjahren besser — deshalb
|
||||
# bewusst KEINE globale Umstellung. Strukturell begruendet: Breakout- und
|
||||
# Pullback-Einstiege haben verschiedene Nachlauf-Dynamik.
|
||||
_atr_tf = mt5.TIMEFRAME_M5 if source == "auto_squeeze" else None
|
||||
err = fn(sym, _atr_tf)
|
||||
if err:
|
||||
return err
|
||||
# Vom BOT eröffnete Trades markieren → nur für die greift die 15-Min-Regel
|
||||
|
||||
Reference in New Issue
Block a user