Skip to content

Latest commit

 

History

History
697 lines (535 loc) · 21.3 KB

File metadata and controls

697 lines (535 loc) · 21.3 KB

🚀 RL Trading System - BIST-30 Algoritmik Ticaret

Deep Reinforcement Learning kullanarak BIST-30 hisseleri için algoritmik ticaret sistemi. Ansari et al. (2024) - A Multifaceted Approach to Stock Market Trading Using Reinforcement Learning makalesine dayanmaktadır.

📋 İçindekiler


🎯 Proje Hakkında

Bu proje, 3 fazlı bir geliştirme süreciyle BIST-30 endeksi için DRL tabanlı trading sistemi geliştirmeyi hedefler:

  • Faz 1 (POC): 5 hisse ile temel sistem (✅ Tamamlandı)
  • Faz 2: Advanced Prediction System — Ensemble tahmin + RL entegrasyonu (✅ Tamamlandı)
  • Faz 3: Production improvements — Bug fixes, kalite, risk yönetimi, explainability (✅ Tamamlandı)

Temel Özellikler

Multi-Stock Trading Environment (Gymnasium) ✅ 3 RL Algoritması: A2C, PPO, TD3 (Stable-Baselines3) ✅ 5 Teknik İndikatör: MACD, RSI, CCI, ADX, Turbulence ✅ FastAPI Backend: Model eğitimi ve yönetimi ✅ Dash Dashboard: Plotly Dash + dash-bootstrap-components, /dash/ altında mount ✅ Real-time Training: Background task ile eğitim ✅ Ensemble Tahmin Sistemi: XGBoost + LightGBM + CatBoost + BiLSTM + TFT + Stacking (OOF, 3-way split) ✅ Hiperparametre Optimizasyonu: Optuna + Walk-forward CV + purge/embargo ✅ Çoklu Veri Kaynağı: yfinance (OHLCV), TCMB EVDS (makro), fundamental, altın/döviz, VIX/US10Y/DXY ✅ ICEEMDAN Gürültü Filtresi: EMD tabanlı fiyat serisi temizleme ✅ TATS Trend Düzeltici: XGBoost trend classifier ile tahmin düzeltme ✅ ATR Pozisyon Boyutlandırma: Dinamik risk-bazlı pozisyon + Kelly Criterion ✅ SHAP Explainability: Feature importance açıklamaları (Tree/Linear/Kernel) ✅ Gelişmiş Metrikler: Sortino, Calmar, Deflated Sharpe Ratio, Turnover

Teknoloji Stack

Backend:

  • FastAPI + Uvicorn
  • Stable-Baselines3 (PyTorch)
  • Gymnasium (OpenAI Gym)
  • yfinance (BIST verileri)

Frontend:

  • Plotly Dash + dash-bootstrap-components
  • FastAPI üzerinde /dash/ path'inde mount edilmiş

Data & ML:

  • pandas, numpy, scikit-learn
  • pandas-ta (Teknik indikatörler)
  • XGBoost, LightGBM, CatBoost
  • Optuna (Hiperparametre optimizasyonu)
  • evds (TCMB EVDS API — faiz, enflasyon)
  • borsapy (Altın/döviz verisi)
  • shap (Explainability — TreeExplainer/LinearExplainer/KernelExplainer)
  • EMD-signal (ICEEMDAN gürültü filtreleme)

📦 Kurulum

1. Repository'yi Klonlayın

git clone <repo-url>
cd RL-Trading-Project

2. Virtual Environment Oluşturun

python -m venv venv

3. Virtual Environment'ı Aktif Edin

Windows:

.\venv\Scripts\activate

Linux/Mac:

source venv/bin/activate

4. Bağımlılıkları Yükleyin

pip install -r requirements.txt

Ana Paketler:

  • fastapi, uvicorn, pydantic
  • stable-baselines3, gymnasium, torch
  • yfinance, pandas-ta, scikit-learn
  • numpy, pandas, matplotlib

🚀 Hızlı Başlangıç

Web Dashboard ile Kullanım (Önerilen)

# Sunucuyu başlat
python run_server.py

Tarayıcınızda açın: http://localhost:8000/

Dashboard Özellikleri:

  • 📊 Model eğitimi (A2C/PPO/TD3)
  • ⏱️ Gerçek zamanlı progress tracking
  • 📈 Performans metrikleri (Sharpe, Sortino, Calmar, Drawdown)
  • 🤖 Model karşılaştırma + SHAP feature importance
  • 📉 Plotly interaktif grafikler
  • Dashboard: http://localhost:8000/dash/

TensorBoard ile İzleme

Eğitim sürecini gerçek zamanlı izlemek için:

# TensorBoard'u başlatın
tensorboard --logdir=logs

# Tarayıcıda açın: http://localhost:6006

TensorBoard'da görüntülenecekler:

  • 📉 Loss curves (policy loss, value loss, entropy loss)
  • 📊 Reward progression
  • 🎯 Episode statistics
  • 📈 Learning rate schedule
  • 🔍 Gradient norms

Test Scriptleri

# Environment testi
python tests/test_env.py

# PPO algoritması testi
python tests/test_ppo.py

# Tüm algoritmaları karşılaştır
python tests/test_all_algorithms.py

# Benchmark stratejileri
python scripts/benchmarking/test_benchmarks.py

# Akademik rapor oluştur
python scripts/analysis/generate_academic_report.py

🎨 Web Dashboard

Sayfalar

Sayfa URL İçerik
Home /dash/ Sistem durumu, aktif model, metrik kartları
Training /dash/training A2C/PPO/TD3 eğitimi, real-time progress
Data /dash/data BIST-30 veri durumu, indikatörler
Models /dash/models Eğitilmiş model listesi, karşılaştırma
Daily Trading /dash/daily-trading Günlük sinyal üretimi
Prediction /dash/prediction Ensemble tahmin, SHAP açıklamaları
Academic /dash/academic Akademik metrikler, LaTeX tablo
Hyperopt /dash/hyperopt Optuna optimizasyon sonuçları

Dashboard Yapısı

dashboard/
├── app.py              # Dash factory, PrefixMiddleware, routing callback
├── theme.py            # Renk teması (BG, CARD, CONTENT_STYLE)
├── api_client.py       # FastAPI backend'e HTTP çağrıları
├── components/
│   ├── sidebar.py      # Sol navigasyon
│   └── metric_card.py  # Metrik kartı bileşeni
└── pages/              # home, training, data, models, daily_trading,
                        # prediction, academic, hyperopt

🔌 API Kullanımı

API Dokümantasyonu

http://localhost:8000/docs       # Swagger UI
http://localhost:8000/redoc      # ReDoc

Eğitim Başlatma

curl -X POST "http://localhost:8000/api/trading/train" \
  -H "Content-Type: application/json" \
  -d '{
    "algorithm": "A2C",
    "phase": 1,
    "total_timesteps": 50000,
    "learning_rate": 0.0007,
    "initial_balance": 1000000
  }'

Eğitim Durumu Sorgulama

curl "http://localhost:8000/api/trading/train/status"

Modelleri Listeleme

curl "http://localhost:8000/api/trading/models"

Ana Endpoints

Method Endpoint Açıklama
GET / Web Dashboard
POST /api/trading/train Eğitim başlat
GET /api/trading/train/status Eğitim durumu
GET /api/trading/models Modelleri listele
GET /api/trading/models/{name}/metrics Model metrikleri
DELETE /api/trading/models/{name} Model sil

📂 Proje Yapısı

RL-Trading-Project/
│
├── 📁 app/                      # FastAPI Backend
│   ├── api/routes/
│   │   └── trading.py          # Trading API endpoints
│   ├── schemas/
│   │   └── trading.py          # Pydantic models
│   ├── core/config.py          # Konfigürasyon
│   └── main.py                 # FastAPI app
│
├── 📁 dashboard/                # Dash Frontend (/dash/)
│   ├── app.py                  # Dash factory + PrefixMiddleware
│   ├── theme.py                # Renk teması
│   ├── api_client.py           # Backend HTTP client
│   ├── components/             # sidebar, metric_card
│   └── pages/                  # 8 sayfa (home, training, data, ...)
│
├── 📁 static/                   # Sadece favicon
│
├── 📁 data/                     # Veri İşleme
│   ├── bist30_symbols.py       # Hisse listesi
│   ├── data_fetcher.py         # OHLCV (yfinance, retry + incremental)
│   ├── technical_indicators.py # Teknik indikatörler
│   ├── macro_fetcher.py        # TCMB EVDS (faiz, enflasyon) + yfinance (döviz, BIST100)
│   ├── fundamental_fetcher.py  # Fundamental oranlar (ROE, ROA, P/E, P/B, ...)
│   └── gold_fetcher.py         # Altın/döviz (borsapy veya yfinance)
│
├── 📁 prediction/               # Gelişmiş Tahmin Sistemi (Faz 2)
│   ├── feature_engineer.py     # 10 özellik grubu + ICEEMDAN + VIX/US10Y/DXY
│   ├── feature_selector.py     # MI + permutation importance (3 aşamalı)
│   ├── iceemdan_processor.py   # ICEEMDAN gürültü filtreleme
│   ├── tats.py                 # TATS trend-adjusted düzeltici
│   ├── explainability.py       # SHAP (Tree/Linear/Kernel)
│   ├── models/                 # Multi-model mimarisi
│   │   ├── base.py             # BasePredictionModel ABC + _predict_direction_raw()
│   │   ├── xgboost_model.py
│   │   ├── lightgbm_model.py
│   │   ├── catboost_model.py
│   │   ├── lstm_model.py       # BiLSTM (PyTorch, CUDA) + direction head
│   │   ├── tft_model.py        # Temporal Fusion Transformer + direction head
│   │   └── ensemble.py         # Stacking (OOF, 3-way split, Ridge/XGB, TATS)
│   ├── hyperopt.py             # Optuna HPO
│   ├── trainer.py              # Walk-forward + purge (5g) + embargo (3g, prev_test_end takibi)
│   ├── evaluator.py            # Direction acc, Profit Factor, IC, Sortino, Calmar, DSR, Turnover
│   └── tracker.py              # Experiment tracking (JSON log)
│
├── 📁 env/                      # RL Environment
│   ├── trading_env.py          # Gymnasium env (+4×N prediction, ATR sizing, Kelly)
│   └── reward_functions.py     # PSR reward function
│
├── 📁 scripts/                  # Utility Scripts
│   ├── training/               # Model eğitimi (train_a2c_phase1.py)
│   ├── benchmarking/           # Performans testleri (benchmark_strategies, test_benchmarks)
│   ├── analysis/               # Analiz ve raporlama (generate_academic_report, extract_comparison_table)
│   ├── optimization/           # Reward ağırlık optimizasyonu + A/B test
│   └── debug/                  # Debug araçları
│
├── 📁 hyperparameter_optimization/ # RL algoritma HPO (Optuna + A2C/PPO/TD3/SAC)
│                               # Not: prediction/hyperopt.py ise prediction modelleri için ayrı HPO'dur
│
├── 📁 docs/                     # Dokümantasyon (indeks: docs/README.md)
│   ├── guides/                 # Kullanım kılavuzları (algorithms, academic, hyperopt, gpu)
│   ├── development/            # Mimari + roadmap + phase3 detayları
│   ├── reference/              # Tez + EVDS kılavuzları
│   └── archive/                # Tamamlanmış faz/sprint dokümanları
│
├── 📁 models/                   # Eğitilmiş modeller (.zip)
├── 📁 results/                  # Metrikler ve raporlar
├── 📁 logs/                     # TensorBoard logs
├── 📁 tests/                    # Unit tests
│
├── 📄 run_server.py            # Server launcher
├── 📄 requirements.txt         # Dependencies
└── 📄 README.md                # Ana README

Modül Bağımlılıkları

Web UI (dashboard/ — Plotly Dash, /dash/ altında mount)
    ↓ API calls (dashboard/api_client.py)
FastAPI Backend (app/)
    ↓ Background tasks
RL Training Pipeline
    ├─► data_fetcher.py → yfinance (OHLCV, incremental)
    ├─► technical_indicators.py → pandas-ta
    ├─► trading_env.py → Gymnasium
    └─► Stable-Baselines3 → A2C/PPO/TD3
        └─► Modeller (.zip) + Metrikler (.json)

Tahmin Pipeline (prediction/)
    ├─► data_fetcher.py      (OHLCV)
    ├─► macro_fetcher.py     (EVDS faiz/enflasyon + yfinance döviz)
    ├─► fundamental_fetcher.py (yfinance ROE/ROA/P/E/P/B)
    ├─► gold_fetcher.py      (borsapy/yfinance altın+döviz)
    ↓
    feature_engineer.py → feature_selector.py
    ↓
    trainer.py (walk-forward + purge/embargo)
    ↓
    XGBoost + LightGBM + CatBoost + BiLSTM + TFT
    ↓
    ensemble.py (stacking meta-learner)
    ↓
    trading_env.py (RL obs: +predicted_return/direction/confidence/agreement)

🎓 Akademik Analiz ve Raporlama

Tez ve Makale için Kapsamlı Analiz

Projeye akademik yayın kalitesinde analiz ve görselleştirme sistemi eklenmiştir:

# Tüm modelleri karşılaştır ve akademik rapor oluştur
python scripts/analysis/generate_academic_report.py

Oluşturulan Çıktılar:

📁 results/ ├── figures/ (Publication-ready, 300 DPI) │ ├── portfolio_comparison.pdf │ ├── drawdown_comparison.pdf │ ├── returns_distribution.pdf │ ├── risk_return_scatter.pdf │ └── performance_radar.pdf │ ├── latex/ (Tez için hazır tablolar) │ └── model_comparison.tex │ ├── data/ (CSV ve JSON) │ ├── model_comparison.csv │ └── detailed_results.json │ └── ANALYSIS_REPORT.txt (Özet rapor)

Hesaplanan Metrikler (Akademik)

Return Metrikleri:

  • Total Return
  • Annualized Return
  • Mean Daily Return

Risk Metrikleri:

  • Volatility (std)
  • Annualized Volatility
  • Maximum Drawdown
  • Ulcer Index
  • Value at Risk (VaR 95%)
  • Conditional VaR (CVaR)

Risk-Adjusted Returns:

  • Sharpe Ratio
  • Sortino Ratio
  • Calmar Ratio
  • Information Ratio
  • Recovery Factor

Trading Metrikleri:

  • Win Rate
  • Profit Factor
  • Average Profit/Loss
  • Total Trades

İstatistiksel Testler

  • T-test: Modeller arası getiri karşılaştırması
  • Wilcoxon test: Non-parametrik alternatif
  • p-value < 0.05: İstatistiksel anlamlılık

API Endpoints (Akademik Analiz)

# Model karşılaştırma verilerini al
GET /api/trading/analysis/model-comparison

# En iyi modelleri metrik bazında al
GET /api/trading/analysis/best-models

# Arka planda kapsamlı rapor oluştur
POST /api/trading/analysis/generate-report

LaTeX Entegrasyonu

Oluşturulan .tex dosyalarını doğrudan tezinize ekleyebilirsiniz:

\input{results/latex/model_comparison.tex}

📊 Trading Environment (Ansari et al. Metodolojisi)

State Space (Faz 1)

state = [
    balance,                 # 1 feature
    shares_owned[N],        # N features (5 hisse)
    # OHLCV (5*N features)
    open[N], high[N], low[N], close[N], volume[N],
    # Technical Indicators (5*N features)
    macd[N], rsi[N], cci[N], adx[N], turbulence[N]
]
# Total: 1 + 5 + 25 + 25 = 56 features

Action Space

action = [-100, ..., 0, ..., +100]  # Her hisse için
# Negative: Sell
# Positive: Buy
# Zero: Hold

Reward Function

env/reward_functions.py üzerinden iki reward tipi desteklenir (reward_type parametresi):

1. Simple Reward (opt-in):

reward = (current_portfolio - previous_portfolio) / previous_portfolio

2. PSR Reward (default — Ansari et al. Eq. 1):

# RewardCalculator: ΔPortfolio + Sharpe + DailyReturn
# w1-w5 ağırlıkları Optuna ile optimize edilmiş
reward = w1·ΔPortfolio + w2·Sharpe + w3·DailyReturn + w4·DrawdownPenalty + w5·TradeFrequency

Faz 3 düzeltmesi: total_trades sayımındaki bug giderildi (env/reward_functions.py:119-121). Artık trades_executed parametresi doğru sayılıyor.


📈 Performans Metrikleri

Dashboard ve API şu metrikleri sağlar:

  • Cumulative Return: Toplam getiri (%)
  • Sharpe Ratio: Risk ayarlı getiri
  • Max Drawdown: Maksimum düşüş (%)
  • Final Portfolio Value: Son portföy değeri (₺)
  • Total Trades: Toplam işlem sayısı

Hesaplama:

# Sharpe Ratio (annualized)
sharpe = (mean(returns) / std(returns)) * sqrt(252)

# Max Drawdown
max_drawdown = min((portfolio - cummax(portfolio)) / cummax(portfolio))

🧪 Test ve Çalıştırma

Environment Test

python -m env.trading_env

Veri Testi

python -m data.data_fetcher

Tensorboard

tensorboard --logdir logs/tensorboard/

🎓 Ansari et al. (2024) Uygulaması

Faz 1 - Tamamlanan

Özellik Ansari et al. Bizim Uygulama Durum
Multi-Stock ✅ S&P500 ✅ BIST-30 (5 hisse)
Technical Indicators MACD, RSI, CCI, ADX, Turbulence ✅ Aynısı
RL Algorithms A2C, PPO, TD3 ✅ Aynısı
Environment Custom Gym Gymnasium
Reward PSR ✅ PSR (Faz 2'de entegre, Faz 3'te bug fix)
Fundamental Data ✅ 11 ratios ✅ ROE, ROA, D/E, P/E, P/B, profit margin (Faz 2)

Faz 2 - Tamamlandı ✅

  • Gelişmiş Feature Engineering (10 grup: log return, volatilite, momentum, makro, fundamental, rejim)
  • Multi-model ensemble (XGBoost + LightGBM + CatBoost + BiLSTM + TFT + Stacking)
  • Optuna HPO (walk-forward CV, purge gap 5 gün, embargo 3 gün)
  • Çoklu veri kaynağı (OHLCV + makro EVDS + fundamental + altın/döviz)
  • RL entegrasyonu (observation space'e 4×N tahmin özellikleri eklendi)
  • API endpoints + Dash dashboard (train-all, optimize, ensemble-predict)

Faz 3 - Tamamlandı ✅

3.1 — Bug Fixes

  • PSR reward: total_trades sayım hatası düzeltildi
  • Meta-learner data leakage: 2-split → 3-way split (OOF) ile giderildi
  • Embargo: prev_test_end takibi ile her fold'da doğru uygulanıyor
  • TFT VSN: min(input_size, 50) cap kaldırıldı, feature selector zaten 80 ile sınırlar
  • Direction head: BiLSTM/TFT çıktısı artık confidence hesabında kullanılıyor
  • Permutation importance: feature_selector'a 3. aşama olarak eklendi

3.2 — Tahmin Kalitesi

  • ICEEMDAN gürültü filtreleme (prediction/iceemdan_processor.py)
  • TATS trend-adjusted düzeltici (prediction/tats.py)
  • Global makro göstergeler: VIX, US10Y, DXY (macro_fetcher + feature_engineer)

3.3 — Risk Yönetimi

  • ATR tabanlı dinamik pozisyon boyutlandırma (use_atr_sizing=True)
  • Kelly Criterion pozisyon boyutlandırma (use_kelly=True, quarter-Kelly)

3.4 — Explainability & Monitoring

  • SHAP explainability (prediction/explainability.py, /prediction/explain/{symbol} API)
  • Sortino Ratio, Calmar Ratio, Deflated Sharpe Ratio, Turnover metrikleri
  • GET /prediction/explain/{symbol} endpoint (single + global SHAP)

📝 Geliştirme Notları

Veri Kaynağı

  • BIST-30 Hisseleri: yfinance (.IS suffix)
  • Periyot: 2018-2024 (6 yıl)
  • Split: 70% train / 15% val / 15% test

BIST-30 Hisseleri (Faz 1)

  1. AKBNK.IS - Akbank (Bankacılık)
  2. THYAO.IS - Türk Hava Yolları (Havacılık)
  3. TUPRS.IS - Tüpraş (Enerji)
  4. BIMAS.IS - BIM (Perakende)
  5. ASELS.IS - Aselsan (Savunma)

Hyperparameters (Faz 1)

Her algoritma için optimize edilmiş learning rate'ler:

# PPO (Önerilen)
learning_rate = 0.0003
n_steps = 2048
total_timesteps = 50_000+

# A2C
learning_rate = 0.0007
n_steps = 512
total_timesteps = 50_000+

# TD3
learning_rate = 0.001
buffer_size = 100_000
total_timesteps = 50_000+

# Environment
initial_balance = 1_000_000 TL
commission_rate = 0.001 (0.1%)
max_shares_per_trade = 100

🤝 Katkı

Bu proje akademik bir çalışmadır. Katkılarınız için:

  1. Fork edin
  2. Feature branch oluşturun (git checkout -b feature/amazing-feature)
  3. Commit edin (git commit -m 'Add amazing feature')
  4. Push edin (git push origin feature/amazing-feature)
  5. Pull Request açın

📚 Dokümantasyon

Detaylı dokümantasyon için docs/ klasörüne bakın. Dokümantasyon indeksi: docs/README.md.

Kullanım Kılavuzları

Geliştirme

Referans

Arşiv

Tamamlanmış faz/sprint dokümanları için: docs/archive/


📚 Referanslar

Ana Makale:

  • Ansari et al. (2024) - "A Multifaceted Approach to Stock Market Trading Using Reinforcement Learning"

Kütüphaneler:


⚠️ Disclaimer

Bu proje eğitim amaçlıdır. Gerçek para ile ticaret yapmak için:

  • Risk yönetimi ekleyin
  • Backtesting yapın
  • Profesyonel mali danışmanlık alın

Yatırım tavsiyesi değildir.


📄 Lisans

MIT License - Eğitim amaçlı kullanım için serbesttir.


📞 İletişim

Sorularınız için: docs/development/roadmap.md dosyasına bakın veya issue açın.


Son Güncelleme: 2026-04-21 — Dokümantasyon yeniden organize edildi. Faz 3 tamamlandı (2026-03-27).