Dieses Projekt implementiert zwei RL-Trading-Strategien (PPO, SAC) auf Krypto-Zeitreihen (z. B. BTCUSDT) mit Gymnasium-Umgebungen. Es unterstützt:
- Datenerfassung von Binance (öffentliche Endpoints)
- Training und Evaluation (Train/Test bzw. Walk-Forward-Splits)
- Analyse/Visualisierung der Agent-Logs
- Plotting von Preisen, EMAs/SMAs und Trade-Markern
-
sac_trading_env.py
Event-getriebene Gymnasium-Env für SAC mit Ziel-Positionsgröße und umfangreichen Filtern:- Signal: EMA50/EMA200 Cross, Cross-Delay/Pending-Logik, Winkel-Filter (angle50/angle200), ADX-Filter, EMA-Separation.
- Entry-Fenster (entry_window_bars, entry_delay_bars), min_ema_sep/sep_entry_thr, Regime-Gating.
- Exit/Stops: ATR-basierter Stop, optional TP/Trailing, Regime-Flip, Trend-Flat-Gating (Trend stark/flat → Soft-Exits blockiert).
- Flip-Feature: Bei Gegencross kann die Position im selben Step gedreht werden (Close + sofortiger Open gegenläufig).
- Kein Pyramiding/Rebalancing: Pro Cross nur ein Entry, volle Equity (max_leverage) pro Trade.
- Logging: umfangreiche Info/CSV-Felder (Setup-States, Stop/TP, Trend-Flags, Pending, Flip-Status, PnL pro Trade).
-
ppo_trading_env.py
Gymnasium-Env für PPO (ähnliches Konzept, aber ohne die SAC-spezifische Target-Position-Logik). -
train_sac.py
- Lädt Daten (Binance oder lokale CSV), optional Walk-Forward-Splits.
- Erstellt VecEnv für SAC (Stable-Baselines3), trainiert und speichert Modell/Logs:
- Modelle:
models/sac_trader - Logs:
data/sac_trade_log*.csv - TensorBoard:
tb_logs/sac/...
- Modelle:
- CLI-Argumente:
--symbol,--interval,--lookback-days,--timesteps,--walkforward-splits,--walkforward-train-frac,--eval-log-path, etc.
-
train_ppo.py
Ähnlich zu SAC-Training, aber mit PPO (SB3). Lädt Daten, trainiert, speichert Modell/Logs und TensorBoard-Einträge. -
analyze_agent.py
- Lädt das neueste oder ein angegebenes CSV-Log.
- Generiert ein interaktives Plotly-HTML mit:
- synthetischen Candles aus der Price-Spalte
- EMAs (9/21/50/200) berechnet aus dem Log-Preis
- Buy/Sell-Marker inkl. Hovertext (Event, Entry/Exit-Reason, Prices, Stops/TP, Pending, Trend-Flags, usw.)
- Equity-Kurve
- Ausgabe:
data/agent_report.html
-
plot_price.py
- Plottet Prices + MA/EMA-Linien (z. B. MA7/25/50/200) mit Trades (wenn vorhanden).
- Rangeslider deaktiviert für bessere Lesbarkeit.
-
binance_client.py
- Leichte Wrapper für Binance REST-Endpunkte:
- Public:
get_recent_trades,get_klines,get_avg_price,get_ticker_price - Depth, weitere Public Endpoints
- (Account-spezifische Endpoints sind vorbereitet, ggf. API-Key/Secret nötig)
- Public:
- Nutzung:
client = BinanceClient(api_key, api_secret); client.get_recent_trades("BTCUSDT", limit=100)
- Leichte Wrapper für Binance REST-Endpunkte:
-
last_trades.py
Beispielskript, um die letzten Trades von Binance abzurufen/anzuzeigen. -
data/
Enthält Logs (sac_trade_log*.csv,trade_log*.csv), Reports (agent_report.html,binance_chart*.html), etc.
adx_threshold: Mindest-ADX für Entry (Trendstärke-Filter).ema_hysteresis: Mindestabstand EMA50/EMA200 relativ zum Preis, um Crosses zu filtern.min_ema_sep,sep_entry_thr,sep_flat_thr: EMA-Separation-Filter für Entry/Flat-Erkennung.angle_thr,hold_angle_thr,flat_angle_thr,flat_confirm_bars: Winkel-Filter für Entry und Exit-Gating; starke Trends halten, flache Trends erlauben Soft-Exits.entry_delay_bars,entry_window_bars: Cross-Delay und Zeitfenster nach Cross für Entry.min_hold_bars,cooldown_bars: Mindesthaltedauer und Sperrzeit nach Trades.flip_on_cross,flip_min_hold_bars: Sofortiges Flip bei Gegencross (Close+Open im selben Step).- Stop/TP/Trail:
sl_atr_mult,tp_atr_mult,use_trailing,trail_activate_atr,trail_atr_mult. - Size/Notional: immer max. Equity (
max_leverage),min_notional_fracverhindert Mikro-Trades.
-
Daten laden
- Live von Binance oder lokal (CSV).
- Optional Walk-Forward-Splits für robustes Backtesting.
-
Training
python3 train_sac.py --symbol BTCUSDT --interval 15m --lookback-days 180 --timesteps 100000- PPO analog mit
train_ppo.py.
-
Evaluation / Analyse
- Logs (
data/sac_trade_log*.csv) mitanalyze_agent.pyvisualisieren:
python3 analyze_agent.py --log data/sac_trade_log_test.csv --output data/agent_report.html - Price/MA-Plot:
python3 plot_price.py --log data/sac_trade_log_test.csv --output data/binance_chart.html
- Logs (
-
Tuning
- Filter bei zu vielen/zu wenigen Trades anpassen (ADX, EMA-Sep, Winkel, Entry-Fenster, Cooldown).
- Stops/TP/Trail-Multiplikatoren auf das verwendete Zeitintervall (5m/15m/1h) kalibrieren.
- Flip-Feature je nach Risikoneigung aktivieren/deaktivieren.
- 5m → mehr Signale, mehr Rauschen, höhere Kostenwirkung, Filter müssen strenger (höherer ADX/Separation/Winkel), Entry-Fenster in Bars größer.
- 15m → weniger Trades, “ruhiger”, Filter können moderater sein.
- Python 3.12 (venv empfohlen)
- Stable-Baselines3, Gymnasium, Plotly, Pandas, Numpy (siehe
requirements.txt)
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python3 train_sac.py --symbol BTCUSDT --interval 15m --lookback-days 180 --timesteps 50000
python3 analyze_agent.py --log data/sac_trade_log_test.csv --output data/agent_report.html- Public Endpoints wie
get_recent_tradesbenötigen keinen Key, Account-Endpoints schon. - Intervalle sind Binance-konform zu wählen (z. B.
1m,5m,15m,1h…).
- Keine Trades: Filter zu streng (ADX/Separation/Winkel/Entry-Fenster/Cooldown/Flat-Gate).
- Nur Stop-Loss: Entry im Chop → ADX/Separation erhöhen, Entry-Fenster verkleinern, Flat-Gate schärfen.
- Flip triggert nicht:
flip_on_crossprüfen,flip_min_hold_barsggf. senken, Cross-Fenster prüfen.