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>
55 lines
2.7 KiB
Markdown
55 lines
2.7 KiB
Markdown
# Risiko-Management (Positionsgröße & Stops)
|
||
|
||
Stand: 2026-07-08.
|
||
|
||
## Positionsgröße
|
||
|
||
> **Aktiv (User-Vorgabe): margin-basiert 95 %.** `calc_lots` setzt die Lots auf
|
||
> ~95 % der freien Margin (`[trading] margin_buffer_pct=95`, `risk_pct=0`). ⚠ Das
|
||
> ist faktisch All-in: **~7 %+ Konto-Risiko pro Trade** (gemessen
|
||
> `backtest_sizing.py`: 36 % Wahrscheinlichkeit eines >80 %-Drawdowns). Bewusste
|
||
> Entscheidung — 2026-07-06 kurz auf risiko-basiert 1,5 % gestellt, dann auf
|
||
> 95 % Margin zurück. Der harte Broker-SL wird trotzdem immer gesetzt.
|
||
|
||
Das **risiko-basierte** Sizing (`calc_lots_risk`) ist gebaut, gemessen und
|
||
jederzeit aktivierbar (`[trading] risk_pct = 1.5` + Restart). Es wählt die Lots
|
||
so, dass der **Verlust beim Initial-SL ≈ `risk_pct` % der Equity** ist:
|
||
|
||
```
|
||
val_per_price = tick_value / tick_size # € je 1.0 Preis je 1 Lot
|
||
lots = (Equity × risk_pct/100) / (SL_Distanz × val_per_price)
|
||
```
|
||
|
||
- **SL zuerst:** `_send_locked` berechnet erst den SL (`_calc_sl_tp`, Band
|
||
1,8–2,2×ATR), dann die Lots aus der **echten** SL-Distanz.
|
||
- **Margin bleibt Deckel:** nie mehr Lots als die freie Margin (× Buffer) erlaubt.
|
||
- **Fallback:** liefert `calc_lots_risk` 0 (fehlende Daten), greift `calc_lots`.
|
||
- Vergleich (102-€-Konto, SL 2×ATR≈0,53): 95 % Margin ≈ 0,15 L → −7 € (6,8 %)
|
||
am SL · 1,5 % Risiko ≈ 0,03 L → −1,40 € (1,4 %).
|
||
|
||
## Stops & Auto-Close
|
||
|
||
- **Harter Broker-SL auf jeder Bot-Order** (`req["sl"]`) — server-seitig, wirkt
|
||
auch bei Bot-/Verbindungsausfall. Band 1,8–2,2×ATR (Ziel 2,0; gemessen
|
||
`backtest_exit.py`); Breakeven ab +1,3×ATR; Trailing Init/Trail/Lock
|
||
(Parameter gemessen optimal, `backtest_trailing.py`; ATR-Floor 0,06,
|
||
`backtest_atrfloor.py`).
|
||
- **Adoptierte Fremd-Trades** (in MT5 manuell eröffnet) bekommen beim Erkennen
|
||
einen **Schutz-SL** nachgerüstet (`_refresh_locked`), falls keiner gesetzt ist.
|
||
- **Notfall-Stop (P&L ≤ −Wert) + Gewinn-Ziel (P&L ≥ +Wert):** server-seitiger
|
||
Auto-Close (`engine._check_auto_close`, 1-s-Loop, wirkt bei gesperrtem Handy).
|
||
Notfall-Stop wird beim Öffnen automatisch auf den letzten Wert armiert
|
||
(Start `[trading] auto_emergency_loss`, Default 10 — ⚠ bei ~100-€-Konto sind
|
||
10 € ≈ 10 % Equity, das ist der faktische Risiko-Deckel). „aus"-Button
|
||
deaktiviert auch den Auto-Arm.
|
||
- **SL/TP sind im Snapshot + Web sichtbar** (Position-Kachel) — fehlender SL wird
|
||
rot „⚠ kein SL gesetzt!" markiert.
|
||
|
||
## Bewusst NICHT umgesetzt
|
||
|
||
- **Tagesverlust-Schalter / Circuit Breaker:** vom User **abgelehnt** — nicht
|
||
einbauen (s. CLAUDE.md).
|
||
- **Signal-Filter als Risiko-Schutz:** 5× gemessen wirkungslos/schädlich
|
||
(Winkel, HTF-Winkel, Konfluenz-Strafe, Gegen-H1-Reversal, ER-Chop-Gate).
|
||
Schutz läuft über Stops + Sizing, nicht über das Signal.
|