Algo Trade Bot'u kurulum, eğitim, backtest ve paper trading için adım adım kullanım.
- Kurulum
- Veri İndirme
- Feature Engineering
- Model Eğitimi
- Backtesting
- Paper Trading
- Monitoring ve Debugging
- Python 3.10+
- pip veya conda
- Git
git clone https://github.com/your-repo/algo-trade-bot.git
cd algo-trade-bot# venv ile
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# veya conda ile
conda create -n algo-trader python=3.10
conda activate algo-trader# Editable mode (geliştirme için)
pip install -e .
# veya Makefile ile
make installpython -c "from algo_trader import common; print('OK')"# Varsayılan: Son 2 yıl, 1 saatlik
make ingest
# veya Python ile
python -m algo_trader.data.ingestmake ingest-coingeckofrom algo_trader.common.storage import load_parquet
df = load_parquet("data/raw/btc_1h.parquet")
print(f"Rows: {len(df)}")
print(f"Date range: {df['timestamp'].min()} to {df['timestamp'].max()}")
print(df.head())data/raw/
└── btc_1h.parquet # Raw OHLCV verisi
make features
# veya
python -m algo_trader.data.featuresmake labels
# veya
python -m algo_trader.data.labelsfrom algo_trader.common.storage import load_parquet
features = load_parquet("data/raw/btc_1h_features.parquet")
print(f"Features: {features.columns.tolist()}")
print(f"Shape: {features.shape}") # (N, 37)
labels = load_parquet("data/raw/btc_1h_labels.parquet")
print(f"Labels: {labels.columns.tolist()}")37 teknik gösterge hesaplanır:
| Kategori | Özellikler |
|---|---|
| Returns | log_return_1, log_return_4, log_return_24 |
| MA | sma_24, ema_12, ema_26, close_to_sma_24 |
| Momentum | rsi_14, roc_12, roc_24, macd, macd_signal, macd_hist |
| Volatility | rolling_std_24, atr_14, bb_upper, bb_lower, bb_width |
| Volume | volume_sma_24, volume_ratio |
| Candlestick | body_size, upper_shadow, lower_shadow, body_ratio |
# Tek komutla: ingest → features → labels → train
make pipeline# 1. Dataset oluştur
make dataset
# 2. Model eğit
make train
# 3. Metrikleri gör
make evalfrom algo_trader.research.train import train_model
result = train_model(
timeframe="1h",
target="direction_4", # 4-bar forward direction
model_type="sklearn_baseline",
model_params={"C": 1.0, "balanced": True},
calibration_method="sigmoid",
)
print(f"Model saved to: {result['model_path']}")
print(f"ROC-AUC: {result['metrics']['roc_auc']:.4f}")Model, kronolojik walk-forward validation ile eğitilir:
|<──── 18 months ────>|<─ 3 mo ─>|
|======= TRAIN =======|=== VAL ===|
|<──── 18 months ────>|<─ 3 mo ─>|
|======= TRAIN =======|=== VAL ===|
artifacts/
├── registry/
│ └── sklearn_baseline/
│ └── 20260117_143052/
│ ├── model.joblib
│ ├── calibrator.joblib
│ ├── config.json
│ ├── metrics.json
│ └── feature_list.json
└── reports/
├── metrics.json
└── metrics.md
# En son model ile backtest
make backtest
# Verbose mode
make backtest-verbose
# veya
python -m algo_trader.backtest.engine --run latest_registry --timeframe 1hfrom algo_trader.backtest.engine import run_backtest, BacktestConfig
from algo_trader.research.registry import get_latest_model_path
# Model yolu al
model_path = get_latest_model_path("sklearn_baseline")
# Config oluştur
config = BacktestConfig(
initial_capital=10000,
fee_bps=5, # 0.05% işlem ücreti
slippage_bps=10, # 0.10% slippage
execution="NEXT_OPEN",
max_position_pct=0.20,
max_drawdown_pct=0.10,
)
# Backtest çalıştır
result = run_backtest(
model_path=model_path,
data_path="data/raw/btc_1h.parquet",
config=config,
)
# Sonuçları yazdır
print(f"Total Return: {result['metrics']['total_return']:.2%}")
print(f"Sharpe Ratio: {result['metrics']['sharpe_ratio']:.2f}")
print(f"Max Drawdown: {result['metrics']['max_drawdown']:.2%}")
print(f"Win Rate: {result['metrics']['win_rate']:.2%}")
print(f"Total Trades: {result['metrics']['total_trades']}")make report
# veya
cat artifacts/backtest/report.mdartifacts/backtest/
├── equity_curve.csv # Zaman serisi
├── trades.csv # Trade listesi
├── report.json # Programmatic metrics
└── report.md # Okunabilir rapor
| Metrik | Açıklama | İyi Değer |
|---|---|---|
| Total Return | Toplam getiri | > 0% |
| CAGR | Yıllık bileşik getiri | > 10% |
| Sharpe Ratio | Risk-adjusted return | > 1.0 |
| Sortino Ratio | Downside risk-adjusted | > 1.5 |
| Calmar Ratio | Return / Max DD | > 2.0 |
| Max Drawdown | Maksimum düşüş | < 10% |
| Win Rate | Kazanma oranı | > 50% |
| Profit Factor | Kar / Zarar | > 1.3 |
- Alpaca Paper Trading Hesabı: alpaca.markets'ten ücretsiz hesap açın
- API Keys: Paper trading API anahtarlarını alın
# Environment variables (önerilen)
export ALGO_TRADER_ALPACA_API_KEY="your-api-key"
export ALGO_TRADER_ALPACA_API_SECRET="your-api-secret"
# veya .env dosyası oluştur
echo "ALGO_TRADER_ALPACA_API_KEY=your-api-key" >> .env
echo "ALGO_TRADER_ALPACA_API_SECRET=your-api-secret" >> .env# Sürekli çalıştır (scheduler ile)
make paper-run
# veya
python -m algo_trader.live.runner --paper --symbol BTCUSD --timeframe 1hNot: Adaptif risk/strateji ayarı varsayılan olarak açıktır. Kapatmak için:
python -m algo_trader.live.runner --paper --no-adaptive --symbol BTCUSD --timeframe 1h# Tek bir karar döngüsü
make paper-once
# veya
python -m algo_trader.live.runner --paper --once --symbol BTCUSD --timeframe 1hmake paper-status
# veya
python -m algo_trader.live.runner --statusmake paper-stop
# veya
python -m algo_trader.live.runner --paper --flattenfrom algo_trader.live.runner import LiveRunner
# Runner oluştur
runner = LiveRunner(
symbol="BTCUSD",
timeframe="1h",
model_path="artifacts/registry/sklearn_baseline/latest",
)
# Status kontrol
status = runner.get_status()
print(f"Running: {status['is_running']}")
print(f"Equity: ${status['equity']:,.2f}")
print(f"Position: {status['position']}")
# Tek cycle çalıştır
result = runner.run_once()
print(f"Signal: {result['signal']}")
print(f"Probability: {result['probability']:.2%}")
print(f"Action: {result['action_taken']}")artifacts/live/
├── state.json # Mevcut durum
├── decisions.jsonl # Karar geçmişi
├── alerts.log # Alert geçmişi
└── runner.lock # Instance kilidi
# Runner logları (terminal'de)
make paper-run
# Decision geçmişi
cat artifacts/live/decisions.jsonl | tail -20
# Alert geçmişi
cat artifacts/live/alerts.log{"timestamp":"2026-01-17T08:01:00Z","signal":"LONG","probability":0.62,"action":"BUY","order_id":"abc123"}
{"timestamp":"2026-01-17T09:01:00Z","signal":"HOLD","probability":0.58,"action":"NONE","order_id":null}import json
with open("artifacts/live/state.json") as f:
state = json.load(f)
print(f"Equity: ${state['equity_curve'][-1]['equity']:,.2f}")
print(f"Drawdown: {state['current_drawdown']:.2%}")
print(f"Positions: {list(state['positions'].keys())}")# Tüm testler
make test
# Backtest testleri
make test-backtest
# Belirli test
pytest src/algo_trader/tests/test_features.py -vError: ALGO_TRADER_ALPACA_API_KEY not set
Çözüm: Environment variable'ları ayarlayın (yukarıya bakın)
FileNotFoundError: data/raw/btc_1h.parquet
Çözüm: make ingest ile veri indirin
No model found in registry
Çözüm: make train ile model eğitin
SAFETY: Live trading URL detected!
Çözüm: ALGO_TRADER_ALPACA_BASE_URL'in paper URL olduğundan emin olun
# Tam kurulum ve pipeline
make install
make pipeline
make backtest
# Paper trading
export ALGO_TRADER_ALPACA_API_KEY="your-key"
export ALGO_TRADER_ALPACA_API_SECRET="your-secret"
make paper-run
# Monitoring
make paper-status
make paper-stop