Headless FastAPI-Backend (server.py + core/engine.py) mit Mobile-PWA (web/), Strategie-/Backtest-Suite und Doku. Secrets, DB, Logs und Laufzeit-State sind via .gitignore ausgeschlossen; Config-Vorlage: oil_widget_config.ini.example. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Exit-Simulation (Befund B: Initial-SL-Breite)
backtest_exit.py — misst, ob ein weiterer Initial-SL netto mehr bringt,
unter originalgetreuer Nachbildung des Exit-Ablaufs aus core/trailing.py.
Mechanik (nachgebildet)
- Initial-SL = X×ATR (getestete Variable).
- Teil-Exit 50 % bei +1,5×ATR (einmalig).
- Phasen: Init (<0,3×ATR → Initial-SL halten) · Trail (SL = HW∓1,5×ATR, Breakeven-Floor ab +0,6×ATR) · Lock (≥3,5×ATR → enger). Phasen-Ratsche.
- Pessimistische Intrabar-Annahme: Gegenlauf vor Mitlauf → überschätzt den Nutzen eines weiten SL NICHT.
- PnL in R (ATR-Vielfache). Fester Init-TP (+3,5×ATR) weggelassen — der Runner-Exit läuft praktisch über den Trailing-SL (konservativ, dominant).
Schlüssel: Der weite Init-SL wirkt nur in der Init-Phase. Sobald Trailing greift, kappt HW∓1,5×ATR ihn ohnehin. Er schützt also genau die Trades, die sofort gegen den Einstieg laufen (die „Frühstopps").
Ergebnis (M5+M30, ~28 Tage, 3585 Signale)
| Init-SL | Treffer | Ø-R | Summe-R | PF | Ø-Verlierer | Worst-R | Init-Stops |
|---|---|---|---|---|---|---|---|
| 1,2 | 37 % | 0,169 | 607 | 1,33 | −1,09 | −1,20 | 37 % |
| 1,5 | 39 % | 0,182 | 654 | 1,33 | −1,29 | −1,50 | 31 % |
| 2,0 | 43 % | 0,223 | 798 | 1,39 | −1,56 | −2,00 | 25 % |
| 2,5 | 46 % | 0,255 | 914 | 1,43 | −1,78 | −2,50 | 21 % |
| 4,0 | 51 % | 0,308 | 1104 | 1,49 | −2,28 | −4,00 | 14 % |
Befund: Ø-R, PF, Treffer steigen monoton mit der SL-Breite, Frühstopps sinken. Aber: der größte Einzelverlust wächst 1:1 (Worst-R = −X) → Tail-/Drawdown-Risiko.
Bewertung
- Das aktuelle Band 1,2–1,5×ATR ist zu eng (deckt sich mit MAE ~1,7×ATR und 37 %/31 % Frühstopps). Wechsel auf ~2,0×ATR ist der ausgewogene Punkt: +32 % Ø-R, PF 1,33→1,39, Frühstopps 37→25 %, Worst-Case auf 2,0×ATR begrenzt.
- Nicht auf 3–4×ATR: Durchschnitte steigen weiter, aber die großen Einzel- verluste treiben Drawdown/Ruin-Risiko; Stichprobe ist zudem ein Trend-Regime („länger halten" bevorzugt).
- ⚠ Money-Management: ein weiterer SL = mehr Risiko/Trade in EUR bei gleicher Lotgröße. Für konstantes EUR-Risiko die Lots ~proportional senken (1,5→2,0 ≈ −25 %).
Aufruf
python backtest_exit.py [n_bars] (Default 8000 M5-Bars)