# Echter Stop-Loss + Risiko-Sizing — Fix 18.08.2026 ## Problem Der Stop-Loss war bisher **nur ein lokaler Wert** in `trades.json`. Der Monitor prüfte **stündlich** und verkaufte dann per Market-Order. Bei volatilen Pennystocks (MXL, ACRS, ULCC, XRX) rutschte der Kurs in der Zwischenzeit deutlich unter den SL → Verluste von −7 bis −10 % statt der konfigurierten −8 %. Realisierte Rendite der Periode: **−24,33 €**. Zusätzlich war das Sizing fix auf 50 €/Position → bei weitem SL (8 %) ein Verlust von ~6–7 € (≈12 % des Positionsbudgets), statt der 2 %-Regel. ## Fix A — Echter Stop-Loss bei T212 - Neuer Endpunkt: `POST /api/v0/equity/orders/stop` (negative Menge = Sell-Stop) - `place_stop()` + `cancel_stop()` in `t212_resilience.py` - `ensure_stop()` in `t212_monitor.py`: platziert/aktualisiert den echten Stop bei Fill, Breakeven (+3 %), Trailing (+5 %) und bei jedem Monitor-Lauf - **Idempotent:** speichert `stop_order_id` + `stop_order_price` in `trades.json` → kein Cancel+Neu-Churn bei jedem Lauf - **Rate-Limit-Pacing:** 1 Stop-Request / 2s (T212-Limit) - **Konservativ bei 429:** leere Live-Stop-Liste → nichts unternehmen (kein Churn) ## Fix B — Risiko-basiertes Sizing - `calc_risk()` nutzt jetzt `risk_per_trade_pct (2 %)` × Gesamtkapital statt fix 50 € - Verlust pro Trade in € gedeckelt, egal wie weit der SL steht - "Trades atmen lassen" (weiter SL) → Position wird automatisch kleiner ## Verifiziert (live gegen T212-API, 18.08.2026) 4 echte Stop-Orders aktiv, keine Duplikate, zweiter Monitor-Lauf = 0 neue Orders: | Position | Stop | Order-ID | |----------|------|----------| | LFST | 11,95 € | 55909740706 | | TRGP | 271,78 € | 55909740714 | | WEAV | 6,72 € | 55909740725 | | UMAC | 28,55 € | 55909740772 | ## Backups - `t212_monitor.py.bak_*` (mehrere Stände) - `t212_resilience.py.bak_*` ## Status ✅ Aktiv — Daemon liest Dateien bei jedem Lauf frisch, kein Neustart nötig.