Algoritmik ticaret artık sadece hedge fonları ve büyük piyasa oyuncularının ayrıcalığı değil. Python ve açık kaynaklı kütüphaneler sayesinde herkes kendi ticaret stratejilerini yazabilir, süreci otomatikleştirebilir ve hatta kârlı bir sistem oluşturabilir. Bu makalede, ticaret algoritmalarını nasıl yazacağınızı, hangi araçları kullanmanız gerektiğini ve stratejilerinizi piyasaya sürmeden önce nasıl test edeceğinizi ele alacağız.
1. Neden Python?
Python’un algoritmik ticarette en popüler dil olmasının birkaç sebebi var:
- Basit sözdizimi – Hızlı kod yazıp test etmeyi sağlar.
- Zengin ekosistem – Veri analizi, makine öğrenimi ve borsa API’leri için birçok kütüphane mevcut.
- Esneklik – Brokerler, kripto borsaları, sunucular ve bulut çözümleriyle kolayca entegre edilebilir.
Algoritmik ticaret için en popüler Python kütüphaneleri:
pandas
– Veri analizi ve işleme.numpy
– Hızlı matematiksel hesaplamalar.ccxt
– Kripto borsalarına API ile bağlanma.backtrader
veyazipline
– Strateji testleri için.ta
– Teknik analiz göstergeleri.
2. Ticaret Botunun Mimarisi
Bir algoritmik ticaret botu genellikle şu modüllerden oluşur:
- Veri Toplama
- API aracılığıyla piyasa verilerini almak.
- Verileri önbellekte veya bir veritabanında saklamak.
- Veri Analizi
- Teknik göstergeleri hesaplamak (SMA, RSI, MACD vb.).
- Formasyonları ve trendleri tespit etmek.
- Karar Mekanizması
- Giriş ve çıkış noktalarını belirleyen algoritma geliştirme.
- Risk yönetimi kurallarını uygulama (stop-loss, take-profit vb.).
- İşlem Yürütme
- Borsa API’si aracılığıyla emir gönderme.
- İşlemleri takip etme.
- Kayıt ve İzleme
- Tüm işlemleri kaydetme.
- Hataları analiz edip stratejiyi optimize etme.
3. Borsaya Bağlanma ve Veri Alma
Önce Binance’e bağlanıp ccxt
kütüphanesi ile geçmiş fiyat verilerini alalım:
import ccxt
import pandas as pd
# Binance’e bağlan
exchange = ccxt.binance()
# BTC/USDT için saatlik geçmiş veriyi al
bars = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=100)
# DataFrame'e dönüştür
df = pd.DataFrame(bars, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
print(df.tail())
Bu sayede elimizde analiz edebileceğimiz ham veriler olacak.
4. Basit Bir Strateji Geliştirme (SMA Crossover)
En temel stratejilerden biri, iki hareketli ortalamanın (SMA) kesişimini kullanmaktır.
- Kısa SMA, uzun SMA’yı yukarı keserse: Alış sinyali
- Kısa SMA, uzun SMA’yı aşağı keserse: Satış sinyali
Kod:
import numpy as np
# Hareketli ortalamaları hesapla
df['SMA_50'] = df['close'].rolling(window=50).mean()
df['SMA_200'] = df['close'].rolling(window=200).mean()
# Alım-satım sinyalleri üret
df['signal'] = np.where(df['SMA_50'] > df['SMA_200'], 1, -1)
print(df.tail())
Burada, signal
sütunu 1 olduğunda alım, -1 olduğunda satış yapılır.
5. Strateji Testi (Backtesting)
Stratejiyi piyasaya sürmeden önce mutlaka geçmiş verilerle test etmeliyiz. Bunun için backtrader
kullanabiliriz:
import backtrader as bt
class SmaCross(bt.Strategy):
params = dict(short_period=50, long_period=200)
def __init__(self):
self.sma_short = bt.indicators.SimpleMovingAverage(period=self.params.short_period)
self.sma_long = bt.indicators.SimpleMovingAverage(period=self.params.long_period)
def next(self):
if self.sma_short[0] > self.sma_long[0]:
self.buy()
elif self.sma_short[0] < self.sma_long[0]:
self.sell()
# Backtest için motoru başlat
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
cerebro.plot()
Bu kod, stratejinin geçmişte nasıl performans gösterdiğini görmemizi sağlar.
6. Otomatik İşlem Yürütme
Strateji başarılıysa, işlemleri otomatikleştirebiliriz. Binance API üzerinden emir gönderelim:
api_key = "API_ANAHTARINIZ"
api_secret = "GİZLİ_ANAHTARINIZ"
exchange = ccxt.binance({
'apiKey': api_key,
'secret': api_secret
})
# 0.01 BTC'lik piyasa alım emri gönder
order = exchange.create_market_buy_order('BTC/USDT', 0.01)
print(order)
7. Risk Yönetimi
Başarılı bir ticaret botu için risk yönetimi kritik öneme sahiptir:
- Sabit stop-loss – Zararları sınırlamak için.
- Trailing stop – Karı korumak için.
- Pozisyon boyutu – İşlem hacmini doğru hesaplamak.
Örneğin, sermayenin %2’sini riske atan bir işlem büyüklüğü hesaplayalım:
capital = 10000 # Toplam sermaye
risk_per_trade = 0.02 # %2 risk
stop_loss = 200 # Maksimum zarar miktarı
trade_size = (capital * risk_per_trade) / stop_loss
print(f"Önerilen işlem büyüklüğü: {trade_size} USDT")
Sonuç
Bu makalede, Python ile algoritmik ticaretin temel aşamalarını ele aldık:
✅ API ile veri alma
✅ Teknik göstergeleri kullanma
✅ Geçmiş verilerle test etme
✅ Otomatik emir gönderme
✅ Risk yönetimi
Bundan sonra stratejinizi daha da geliştirebilir, makine öğrenimi ekleyebilir, yeni göstergeler entegre edebilir ve parametreleri optimize edebilirsiniz.
Eğer piyasa yapıcı stratejiler, yüksek frekanslı ticaret (HFT) veya arbitraj sistemleri gibi ileri düzey konular ilginizi çekiyorsa, yorumlarda belirtin! Bir sonraki yazımızda daha derinlemesine inceleyebiliriz. 🚀