diff --git a/README.md b/README.md new file mode 100644 index 0000000..37e4f8a --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +# Oil Trading Bot (MT5, WTI) + +Algorithmischer **WTI-Öl-Trading-Bot** auf MetaTrader 5 mit headless FastAPI-Backend +und Mobile-PWA. Analyse, Strategie, Backtests und LLM-Copilot laufen in Python; MQL5 +ist nur eine dünne Zeichen-Schicht fürs Desktop-Terminal. + +> **Hinweis:** Interne Doku, Antworten und UI-Texte sind auf Deutsch. Die +> ausführliche Entwickler-/Strategie-Dokumentation steht in [`CLAUDE.md`](CLAUDE.md) +> und [`docs/`](docs/). + +## Überblick + +- **`server.py` + `core/engine.py`** — headless FastAPI-Web-Backend, das die + **Mobile-PWA** in [`web/`](web/) bedient (Zugriff vom Handy z. B. via WireGuard). +- **Eine** Oberfläche: die PWA. Das frühere Tkinter-Widget wurde entfernt. +- ⚠ Immer nur **eine** Server-Instanz gegen dasselbe MT5-Terminal laufen lassen + (zwei TrailingManager = Konflikt). + +## Architektur (`core/`) + +| Modul | Aufgabe | +|-------|---------| +| `mt5data.py` | Preis / Trend / Konto | +| `trader.py` | Orders + SL/TP | +| `trailing.py` | Trailing / Teil-Exit / Time-Stop | +| `wave_rec.py` | Empfehlung (EMA12/50-Trendfolge, Squeeze-Breakout, Gates) | +| `elliott.py` | Elliott-Wellen / FVG | +| `structure.py` | Marktstruktur (HH/HL/LH/LL, BOS, Regressionskanal — Anzeige) | +| `daily_levels.py` | Tages-Prognose (Web-Recherche) | +| `gaps.py` | D1-Kurslücken | +| `candle_logger.py` | M1-Candle-Log → `candles_m1` | +| `agent.py` | KI-Copilot (LLM) | +| `history.py` | SQLite-Persistenz | +| `config.py` | Konstanten + `oil_widget_config.ini`-Loader | +| `engine.py` | headless Motor: fährt die Loops als Threads, liefert `snapshot()` | + +`engine._verdict()` aggregiert die Module zur **Gesamtempfehlung** (`verdict` im +Snapshot) — Details: [`docs/gesamtempfehlung.md`](docs/gesamtempfehlung.md). + +## Voraussetzungen + +- **Windows** (das `MetaTrader5`-Python-Wheel ist Windows-only; das Backend läuft + neben dem MT5-Terminal). +- **Python 3.12** mit `fastapi`, `uvicorn`, `MetaTrader5` (+ weitere Abhängigkeiten, + die die Module importieren). +- Ein laufendes **MetaTrader-5-Terminal** mit dem WTI-Symbol des Brokers + (z. B. `SpotCrude` bei Pepperstone). + +## Einrichtung + +1. Repo klonen. +2. Config-Vorlage kopieren und mit echten Keys füllen: + ```bash + cp oil_widget_config.ini.example oil_widget_config.ini + ``` + Dann `oil_widget_config.ini` ausfüllen (LLM-/News-/Telegram-/Graph-Keys, WTI-Symbol, + Trading-Schalter). **Diese Datei enthält Live-Secrets und ist per `.gitignore` + vom Repo ausgeschlossen — niemals committen.** Erläuterungen zu allen + `[trading]`-Schaltern stehen als Kommentare in [`core/config.py`](core/config.py). +3. MT5-Terminal starten und einloggen. + +## Starten + +```bash +# Änderungen aktivieren / Server (neu) starten: +restart_server.bat +``` + +Auto-Start ist als Windows-Aufgabe `OilTradingServer` (Login-Trigger, versteckt via +VBS) eingerichtet. Die PWA ist danach unter `http://:8000/` erreichbar. + +## Strategie in Kürze + +- **Richtung** = EMA12 vs. EMA50 (`wave_rec.py`), mit Totband, Anti-Überdehnung, + S/R- und Session-Konfidenz. +- **Volatilitäts-Squeeze-Breakout** = additiver, backtest-validierter Auto-Entry + (Kompression → Ausbruch); optional autonom (`auto_squeeze`). +- **Gates**: ATR-Breakout-Bestätigung, Entry-Raum, Mindest-Konfidenz, Higher-TF- + Gegen-Trend, EIA-Blackout. +- **Exit**: SL-Band ~2×ATR, Breakeven ab +1,3×ATR, Trailing, Time-Stop, sowie ein + kalibriertes **P(Durchbruch)-Modell** für den S/R-Close am Gegenlevel. + +> **Methodik:** Strategie-Änderungen werden per **2-Stichproben-Backtest** (zwei +> Zeiträume/Regime) mit **echten Kosten** belegt, bevor sie live gehen — „erst +> messen, dann umbauen". Die zahlreichen `backtest_*.py`-Skripte dokumentieren +> geprüfte und verworfene Ideen. + +## Nützliche Skripte + +| Befehl | Zweck | +|--------|-------| +| `python backtest_signal.py [TF] [N] [K]` | Empfehlungs-Edge messen (ereignisbasiert) | +| `python analyze_execution.py` | Spread-/Slippage-/MAE-MFE-Kalibrierung | +| `python weekly_review.py` | Wochenreport (Live-Stats vs. Backtest-Erwartung) | +| `python -m py_compile ` | Syntaxprüfung vor „fertig" | + +## Web-Assets + +Der Browser cacht hart: bei jeder JS/CSS-Änderung in `web/index.html` die +Asset-Version `?v=N` **hochzählen**. Der Server sendet `Cache-Control: no-store`. + +## Datenhaltung + +- **`oil_widget_history.db`** (SQLite): `trades`, `recommendations`, `candles_m1` u. a. + Nicht im Repo (per `.gitignore`) — vor Eingriffen Backup (`*.bak-`). +- Laufzeit-State (`emergency_state.json`, `runtime_state.json`, `report_state.json`) + wird vom Server erzeugt und ist ebenfalls nicht versioniert. + +## Lizenz + +Privates Projekt — keine Lizenz vergeben.