Thanks to visit codestin.com
Credit goes to github.com

Skip to content

JJukic/Trading_Bot

Repository files navigation

Trading_Bot (PPO & SAC, Binance Data)

Überblick

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

Kernkomponenten

  • 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/...
    • 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)
    • Nutzung: client = BinanceClient(api_key, api_secret); client.get_recent_trades("BTCUSDT", limit=100)
  • 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.

Wichtige Hyperparameter & Filter (SAC-Env)

  • 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_frac verhindert Mikro-Trades.

Typischer Workflow

  1. Daten laden

    • Live von Binance oder lokal (CSV).
    • Optional Walk-Forward-Splits für robustes Backtesting.
  2. Training

    • python3 train_sac.py --symbol BTCUSDT --interval 15m --lookback-days 180 --timesteps 100000
    • PPO analog mit train_ppo.py.
  3. Evaluation / Analyse

    • Logs (data/sac_trade_log*.csv) mit analyze_agent.py visualisieren:
      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
  4. 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.

Hinweise zum Zeitrahmen (5m vs. 15m)

  • 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.

Installation / Requirements

  • Python 3.12 (venv empfohlen)
  • Stable-Baselines3, Gymnasium, Plotly, Pandas, Numpy (siehe requirements.txt)

Schnellstart (SAC)

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

Hinweise zur Binance-Nutzung

  • Public Endpoints wie get_recent_trades benötigen keinen Key, Account-Endpoints schon.
  • Intervalle sind Binance-konform zu wählen (z. B. 1m, 5m, 15m, 1h …).

Troubleshooting

  • 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_cross prüfen, flip_min_hold_bars ggf. senken, Cross-Fenster prüfen.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages