Initial commit: Oil Trading Bot (MT5, WTI)

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>
This commit is contained in:
Axel Hocks
2026-07-24 08:29:23 +02:00
co-authored by Claude Opus 4.8
commit 75d28827e8
104 changed files with 21059 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
# 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,21,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 34×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)