112 lines
4.6 KiB
Markdown
112 lines
4.6 KiB
Markdown
# 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://<host>: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 <datei>` | 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-<datum>`).
|
||
- 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.
|