musgcht
Örnek Bir Makale Paylaşıyorum
MetaTrader 5 üzerinde tam otomatik işlem (EA – Expert Advisor) geliştirmek için temel olarak iki yaklaşımınız var:
- MQL5 ile Native EA
- Python ile MT5 API kullanarak dış uygulama
Aşağıda her iki yöntemi, artı–eksi yönlerini ve basit bir örnekle adım adım açıklıyorum.
1. MQL5 ile Native Expert Advisor
Neden MQL5?
- Doğrudan terminal içi çalışır, ekstra köprü gerekmez.
- Çok düşük gecikme (latency) ile emir gönderir.
- Zaten MetaTrader paketinin bir parçasıdır; derleyici ve debugger hazır.
Dezavantajları
- Sadece MT5 terminalinde çalışır.
- Dil olarak C’ye yakın yapı; Python’a kıyasla kütüphane desteği sınırlı.
- Karmaşık veri işleme / ML kütüphaneleri kullanmak zordur.
Basit MQL5 EA Şablonu
//+------------------------------------------------------------------+
//| MyEA.mq5 |
//+------------------------------------------------------------------+
#property copyright "Senin İsmin"
#property link "https://www.example.com"
#property version "1.00"
#property strict
input double Lots=0.1; // Lot büyüklüğü
input int FastMA=10; // Hızlı MA periyodu
input int SlowMA=30; // Yavaş MA periyodu
int handleFast, handleSlow;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// MA hesaplayıcılarını aç
handleFast = iMA(_Symbol, PERIOD_CURRENT, FastMA, 0, MODE_SMA, PRICE_CLOSE);
handleSlow = iMA(_Symbol, PERIOD_CURRENT, SlowMA, 0, MODE_SMA, PRICE_CLOSE);
if(handleFast==INVALID_HANDLE || handleSlow==INVALID_HANDLE)
{
Print("Handle creation failed");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
IndicatorRelease(handleFast);
IndicatorRelease(handleSlow);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double maFast[], maSlow[];
// En son 3 barlık MA verisini çek
if(CopyBuffer(handleFast,0,1,3,maFast)<=0 || CopyBuffer(handleSlow,0,1,3,maSlow)<=0)
return;
// Basit “crossover” stratejisi
if(maFast[1] < maSlow[1] && maFast[0] > maSlow[0])
{
// Al sinyali
if(PositionSelect(_Symbol)==false)
OrderSend(_Symbol, OP_BUY, Lots, Ask, 10, 0, 0);
}
else if(maFast[1] > maSlow[1] && maFast[0] < maSlow[0])
{
// Sat sinyali
if(PositionSelect(_Symbol)==false)
OrderSend(_Symbol, OP_SELL, Lots, Bid, 10, 0, 0);
}
}
Bu kodu MetaEditor
’da yeni bir EA dosyasına yapıştırıp derlediğinizde, Navigator → Expert Advisors
altında görebilir ve grafiğe ekleyebilirsiniz.
2. Python ile MT5 API Kullanımı
Neden Python?
- Zengin ekosistem: Pandas, NumPy, scikit-learn, TensorFlow gibi kütüphanelerle veri analizi ve ML modelleri entegre edilebilir.
- Kod okunabilirliği ve hızlı prototipleme.
- Terminalden bağımsız; birden fazla terminalle paralel çalışabilir.
Dezavantajları
- Emir iletim hızı MQL5’e göre biraz daha yavaştır.
- Python script’i MT5 terminaliyle aynı makinada veya erişilebilen bir makinede çalışmalı.
Kurulum
pip install MetaTrader5
Basit Python Örneği: SMA Crossover
import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime, timedelta
# 1) MT5 terminalini başlat
if not mt5.initialize(path="C:\\Program Files\\MetaTrader 5\\terminal64.exe"):
print("initialize() failed, error code =", mt5.last_error())
mt5.shutdown()
exit()
symbol = "EURUSD"
# 2) Sembolü seç
if not mt5.symbol_select(symbol, True):
print(f"Sembol seçilemedi: {symbol}")
mt5.shutdown()
exit()
# 3) Geçmiş veri çek (100 barlık H1)
rates = mt5.copy_rates_from(symbol, mt5.TIMEFRAME_H1, datetime.now(), 100)
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
# 4) SMA hesapla
df['SMA_fast'] = df['close'].rolling(window=10).mean()
df['SMA_slow'] = df['close'].rolling(window=30).mean()
# 5) En son iki barı al
last = df.iloc[-2:]
fast_prev, slow_prev = last.iloc[0][['SMA_fast','SMA_slow']]
fast_curr, slow_curr = last.iloc[1][['SMA_fast','SMA_slow']]
# 6) Crossover kontrolü
if fast_prev < slow_prev and fast_curr > slow_curr:
# Al emri gönder
order = mt5.order_send(
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": 0.1,
"type": mt5.ORDER_TYPE_BUY,
"price": mt5.symbol_info_tick(symbol).ask,
"deviation": 10,
"magic": 234000,
"comment": "PyBot Buy",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_IOC,
}
)
print("Buy gönderildi:", order)
elif fast_prev > slow_prev and fast_curr < slow_curr:
# Sat emri gönder
order = mt5.order_send(
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": 0.1,
"type": mt5.ORDER_TYPE_SELL,
"price": mt5.symbol_info_tick(symbol).bid,
"deviation": 10,
"magic": 234000,
"comment": "PyBot Sell",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_IOC,
}
)
print("Sell gönderildi:", order)
# 7) Bağlantıyı kapat
mt5.shutdown()
Nasıl çalışır?
mt5.initialize()
ile terminal başlatılır.
symbol_select()
ile işlem yapılacak sembol aktif edilir.
copy_rates_from()
ile geçmiş fiyat verisi alınır.
- Pandas’la hızlıca SMA hesaplanır.
- Basit crossover mantığıyla al/sat koşulları kontrol edilir.
order_send()
ile gerçek emir gönderilir.
Hangi Yöntemi Seçmeli?
| Kriter | MQL5 EA | Python + MT5 API |
| -------------------------- | --------------------------------- | ----------------------------------- |
| Gecikme | Çok düşük | Orta |
| Kütüphane Desteği | Sadece MQL5 standart kütüphaneler | Pandas, NumPy, ML kütüphaneleri vs. |
| Geliştirme Hızı | Orta | Hızlı prototipleme |
| Terminal Bağımlılığı | Evet | Evet (aynı makine veya ağ erişimi) |
| Kurulum/Öğrenme Eğrisi | MQL5 dilini öğrenmek gerekir | Python bilenler için çok kolay |
- Eğer en yüksek hız ve sıfır köprü istiyorsanız, MQL5 EA yazın.
- Eğer hızlı geliştirme, karmaşık analiz veya ML entegrasyonu planlıyorsanız, Python tercih edin.
Sonuç
- Basit stratejiler ve yüksek frekans için MQL5.
- Veri bilimi, makine öğrenmesi, hızlı prototip ve çoklu terminal yönetimi için Python.
Yukarıdaki örnekler hem MQL5 hem de Python yolu gösteriyor. Kendi stratejinize göre geliştirmeyi derinleştirebilir, risk/para yönetimi ve loglama katmanları ekleyebilirsiniz.