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.
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ı)
✅ 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
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)
git clone <repo-url>
cd RL-Trading-Projectpython -m venv venvWindows:
.\venv\Scripts\activateLinux/Mac:
source venv/bin/activatepip install -r requirements.txtAna Paketler:
- fastapi, uvicorn, pydantic
- stable-baselines3, gymnasium, torch
- yfinance, pandas-ta, scikit-learn
- numpy, pandas, matplotlib
# Sunucuyu başlat
python run_server.pyTarayı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/
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:6006TensorBoard'da görüntülenecekler:
- 📉 Loss curves (policy loss, value loss, entropy loss)
- 📊 Reward progression
- 🎯 Episode statistics
- 📈 Learning rate schedule
- 🔍 Gradient norms
# 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| 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/
├── 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
http://localhost:8000/docs # Swagger UI
http://localhost:8000/redoc # ReDoc
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
}'curl "http://localhost:8000/api/trading/train/status"curl "http://localhost:8000/api/trading/models"| 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 |
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
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)
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.pyOluş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)
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
- T-test: Modeller arası getiri karşılaştırması
- Wilcoxon test: Non-parametrik alternatif
- p-value < 0.05: İstatistiksel anlamlılık
# 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-reportOluşturulan .tex dosyalarını doğrudan tezinize ekleyebilirsiniz:
\input{results/latex/model_comparison.tex}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 featuresaction = [-100, ..., 0, ..., +100] # Her hisse için
# Negative: Sell
# Positive: Buy
# Zero: Holdenv/reward_functions.py üzerinden iki reward tipi desteklenir (reward_type parametresi):
1. Simple Reward (opt-in):
reward = (current_portfolio - previous_portfolio) / previous_portfolio2. 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·TradeFrequencyFaz 3 düzeltmesi:
total_tradessayımındaki bug giderildi (env/reward_functions.py:119-121). Artıktrades_executedparametresi doğru sayılıyor.
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))python -m env.trading_envpython -m data.data_fetchertensorboard --logdir logs/tensorboard/| Ö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) | ✅ |
- 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)
- PSR reward:
total_tradessayım hatası düzeltildi - Meta-learner data leakage: 2-split → 3-way split (OOF) ile giderildi
- Embargo:
prev_test_endtakibi 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
- 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)
- ATR tabanlı dinamik pozisyon boyutlandırma (
use_atr_sizing=True) - Kelly Criterion pozisyon boyutlandırma (
use_kelly=True, quarter-Kelly)
- 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)
- BIST-30 Hisseleri: yfinance (
.ISsuffix) - Periyot: 2018-2024 (6 yıl)
- Split: 70% train / 15% val / 15% test
- AKBNK.IS - Akbank (Bankacılık)
- THYAO.IS - Türk Hava Yolları (Havacılık)
- TUPRS.IS - Tüpraş (Enerji)
- BIMAS.IS - BIM (Perakende)
- ASELS.IS - Aselsan (Savunma)
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 = 100Bu proje akademik bir çalışmadır. Katkılarınız için:
- Fork edin
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Commit edin (
git commit -m 'Add amazing feature') - Push edin (
git push origin feature/amazing-feature) - Pull Request açın
Detaylı dokümantasyon için docs/ klasörüne bakın. Dokümantasyon indeksi: docs/README.md.
- Algoritma Karşılaştırması — PPO, A2C, TD3, SAC
- Akademik Analiz — Raporlama ve metrikler
- Hyperparameter Optimization — Optuna entegrasyonu
- GPU Performans — GPU testleri
- Roadmap — Proje yol haritası (Faz 1 → Faz 3 tamamlandı)
- Tahmin Sistemi Mimarisi — Ensemble, feature engineering, veri katmanı
- Faz 3 Uygulama Detayları — Bug fix'ler, ICEEMDAN, TATS, ATR/Kelly, SHAP
Tamamlanmış faz/sprint dokümanları için: docs/archive/
Ana Makale:
- Ansari et al. (2024) - "A Multifaceted Approach to Stock Market Trading Using Reinforcement Learning"
Kütüphaneler:
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.
MIT License - Eğitim amaçlı kullanım için serbesttir.
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).