Python ile entegrasyon için MetaTrader modülü

MQL5 finansal piyasalarda yüksek performanslı alım-satım uygulamalarının geliştirilmesi için tasarlanmıştır ve algoritmik alım-satımda kullanılan diğer özelleşmiş diller arasında benzersizdir. MQL5 programlarının sözdizimi ve hızı alabildiğince С++'a yakındır; OpenCL desteği ve MS Visual Studio ile entegrasyon vardır. İstatistik, bulanık mantık ve ALGLIB kütüphaneleri de mevcuttur. MetaEditor geliştirme ortamı, özel örtüler geliştirme gereksinimini ortadan kaldıran fonksiyonların "akıllı" bir şekilde içe aktarılması özelliğiyle .NET kitaplıkları için yerel destek sunar. Üçüncü parti C++ DLL'ler de kullanılabilir.  С++ kaynak kodu dosyaları (CPP ve H) doğrudan editörden düzenlenebilir ve DLL halinde derlenebilir. Bunun için kullanıcının kişisel bilgisayarında kurulu olan Microsoft Visual Studio kullanılabilir.

Python, komut dosyaları ve uygulamalar geliştirmek için modern, üst düzey bir programlama dilidir. Makine öğrenmesi, süreç otomasyonu, veri analizi ve görselleştirme için birden çok kütüphane içerir.

Python için MetaTrader paketi, işlemciler arası iletişim yoluyla doğrudan MetaTrader 5 terminalinden hızlı ve rahat veri alışverişi için tasarlanmıştır. Bu şekilde alınan veriler, istatistiksel hesaplamalar ve makine öğrenmesi için de kullanılabilir.

Paketi komut satırından yükleme:

  pip install MetaTrader5

Paketi komut satırından güncelleme:

  pip install --upgrade MetaTrader5

MetaTrader 5 ve Python'u entegre etmek için fonksiyonlar

Fonksiyon

Eylem

initialize

MetaTrader 5 terminali ile bağlantı kurar

login

Belirtilen parametreleri kullanarak bir işlem hesabına bağlanır

shutdown

MetaTrader 5 terminaline önceden kurulmuş olan bağlantıyı kapatır

version

MetaTrader 5 terminal versiyonunu geri döndürür

last_error

Son hata ile ilgili verileri geri döndürür

account_info

Mevcut işlem hesabı ile ilgili bilgileri elde eder

terminal_Info

Bağlantı kurulmuş olan MetaTrader 5 terminalinin durumunu ve parametrelerini elde eder

symbols_total

MetaTrader 5 terminalindeki tüm finansal enstrümanların sayısını elde eder

symbols_get

MetaTrader 5 terminalinden tüm finansal enstrümanları elde eder

symbol_info

Belirtilen finansal enstrüman ile ilgili verileri elde eder

symbol_info_tick

Belirtilen finansal araç için son tiki elde eder

symbol_select

MarketWatch penceresinde bir sembol seçer veya pencereden bir sembol kaldırır

market_book_add

MetaTrader 5 terminalini, belirli bir sembolün Piyasa Derinliği değişikliği olaylarına abone eder

market_book_get

Belirli bir sembolün Piyasa Derinliği girdilerini içeren veri grubunu BookInfo'dan geri döndürür

market_book_release

MetaTrader 5 terminalinin belirli bir sembolün Piyasa Derinliği değişikliği olaylarına aboneliğini iptal eder

copy_rates_from

MetaTrader 5 terminalinden belirtilen tarihten itibaren olan barları elde eder

copy_rates_from_pos

MetaTrader 5 terminalinden belirtilen indeksten itibaren olan barları elde eder

copyrates_range

MetaTrader 5 terminalinden belirtilen tarih aralığındaki barları elde eder

copy_ticks_from

MetaTrader 5 terminalinden belirtilen tarihten itibaren olan tikleri elde eder

copy_ticks_range

MetaTrader 5 terminalinden belirtilen tarih aralığındaki tikleri elde eder

orders_total

Aktif emirlerin sayısını elde eder

orders_get

Sembol veya etikete göre filtreleme özelliğiyle aktif emirleri elde eder

order_calc_margin

Belirtilen alım-satım işlemini gerçekleştirmek için hesap para birimi cinsinden marjini geri döndürür

order_calc_profit

Belirtilen alım-satım işlemi için hesap para birimi cinsinden kârı geri döndürür

order_check

Gerekli alım-satım işleminin gerçekleştirilmesi için fon yeterliliğini kontrol eder

order_send

Alım-satım işlemi gerçekleştirmek için bir istek gönderir

positions_total

Açık pozisyonların sayısını elde eder

positions_get

Sembol veya etikete göre filtreleme özelliğiyle açık pozisyonları elde eder

history_orders_total

İşlem geçmişinden belirtilen aralıktaki emir sayısını elde eder

history_orders_get

Pozisyon veya etikete göre filtreleme özelliğiyle işlem geçmişinden emirleri elde eder

history_deals_total

İşlem geçmişinden belirtilen aralıktaki işlem sayısını elde eder

history_deals_get

Pozisyon veya etikete göre filtreleme özelliğiyle işlem geçmişinden işlemleri elde eder

Python'u MetaTrader 5'e bağlamaya örnek

  1. Python 3.8'in en son sürümünü şu adresten indirin: https://www.python.org/downloads/windows
  2. Python'u kurarken, Python komut dosyalarını komut satırından çalıştırabilmek için "Add Python 3.8 to PATH%"ı işaretleyin.
  3. MetaTrader 5 modülünü komut satırından yükleyin

  pip install MetaTrader5

  1. matplotlib ve pandas paketlerini ekleyin

  pip install matplotlib
  pip install pandas

  1. Test komut dosyasını başlatın

from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
import MetaTrader5 as mt5
 
# MetaTrader 5'e bağlan
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()
 
# bağlantı durumunu ve parametreleri talep et
print(mt5.terminal_info())
# MetaTrader 5 sürümü ile ilgili verileri elde et
print(mt5.version())
 
# EURAUD'dan 1000 adet tik talep et
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# 2019.04.01 13:00 - 2019.04.02 13:00 aralığındaki AUDUSD tiklerini talep et
audusd_ticks = mt5.copy_ticks_range("AUDUSD"datetime(2020,1,27,13), datetime(2020,1,28,13), mt5.COPY_TICKS_ALL)
 
# farklı sembollerden çeşitli şekillerde bar elde et
eurusd_rates = mt5.copy_rates_from("EURUSD"mt5.TIMEFRAME_M1datetime(2020,1,28,13), 1000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP"mt5.TIMEFRAME_M101000)
eurcad_rates = mt5.copy_rates_range("EURCAD"mt5.TIMEFRAME_M1datetime(2020,1,27,13), datetime(2020,1,28,13))
 
# MetaTrader 5 terminaline olan bağlantıyı kapat
mt5.shutdown()
 
#DATA
print('euraud_ticks(', len(euraud_ticks), ')')
for val in euraud_ticks[:10]: print(val)
 
print('audusd_ticks(', len(audusd_ticks), ')')
for val in audusd_ticks[:10]: print(val)
 
print('eurusd_rates(', len(eurusd_rates), ')')
for val in eurusd_rates[:10]: print(val)
 
print('eurgbp_rates(', len(eurgbp_rates), ')')
for val in eurgbp_rates[:10]: print(val)
 
print('eurcad_rates(', len(eurcad_rates), ')')
for val in eurcad_rates[:10]: print(val)
 
#PLOT
# elde edilen verilerden DataFrame oluştur
ticks_frame = pd.DataFrame(euraud_ticks)
# saniye cinsinden zamanı datetime biçimine dönüştür
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# grafik üzerinde tikleri görüntüle
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# lejantı görüntüle
plt.legend(loc='upper left')
 
# başlık ekle
plt.title('EURAUD ticks')
 
# grafiği görüntüle
plt.show()

  1. Verileri ve grafiği elde edin
    python_script_chart

[2, 'MetaQuotes-Demo', '16167573']
[5002325, '19 Feb 2020']
 
euraud_ticks( 1000 )
(1580209200, 1.63412, 1.63437, 0., 0, 1580209200067, 130, 0.)
(1580209200, 1.63416, 1.63437, 0., 0, 1580209200785, 130, 0.)
(1580209201, 1.63415, 1.63437, 0., 0, 1580209201980, 130, 0.)
(1580209202, 1.63419, 1.63445, 0., 0, 1580209202192, 134, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203004, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203487, 130, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203694, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203990, 130, 0.)
(1580209204, 1.63421, 1.63445, 0., 0, 1580209204194, 130, 0.)
(1580209204, 1.63425, 1.63445, 0., 0, 1580209204392, 130, 0.)
audusd_ticks( 40449 )
(1580122800, 0.67858, 0.67868, 0., 0, 1580122800244, 130, 0.)
(1580122800, 0.67858, 0.67867, 0., 0, 1580122800429, 4, 0.)
(1580122800, 0.67858, 0.67865, 0., 0, 1580122800817, 4, 0.)
(1580122801, 0.67858, 0.67866, 0., 0, 1580122801618, 4, 0.)
(1580122802, 0.67858, 0.67865, 0., 0, 1580122802928, 4, 0.)
(1580122809, 0.67855, 0.67865, 0., 0, 1580122809526, 130, 0.)
(1580122809, 0.67855, 0.67864, 0., 0, 1580122809699, 4, 0.)
(1580122813, 0.67855, 0.67863, 0., 0, 1580122813576, 4, 0.)
(1580122815, 0.67856, 0.67863, 0., 0, 1580122815190, 130, 0.)
(1580122815, 0.67855, 0.67863, 0., 0, 1580122815479, 130, 0.)
eurusd_rates( 1000 )
(1580149260, 1.10132, 1.10151, 1.10131, 1.10149, 44, 1, 0)
(1580149320, 1.10149, 1.10161, 1.10143, 1.10154, 42, 1, 0)
(1580149380, 1.10154, 1.10176, 1.10154, 1.10174, 40, 2, 0)
(1580149440, 1.10174, 1.10189, 1.10168, 1.10187, 47, 1, 0)
(1580149500, 1.10185, 1.10191, 1.1018, 1.10182, 53, 1, 0)
(1580149560, 1.10182, 1.10184, 1.10176, 1.10183, 25, 3, 0)
(1580149620, 1.10183, 1.10187, 1.10177, 1.10187, 49, 2, 0)
(1580149680, 1.10187, 1.1019, 1.1018, 1.10187, 53, 1, 0)
(1580149740, 1.10187, 1.10202, 1.10187, 1.10198, 28, 2, 0)
(1580149800, 1.10198, 1.10198, 1.10183, 1.10188, 39, 2, 0)
eurgbp_rates( 1000 )
(1582236360, 0.83767, 0.83767, 0.83764, 0.83765, 23, 9, 0)
(1582236420, 0.83765, 0.83765, 0.83764, 0.83765, 15, 8, 0)
(1582236480, 0.83765, 0.83766, 0.83762, 0.83765, 19, 7, 0)
(1582236540, 0.83765, 0.83768, 0.83758, 0.83763, 39, 6, 0)
(1582236600, 0.83763, 0.83768, 0.83763, 0.83767, 21, 6, 0)
(1582236660, 0.83767, 0.83775, 0.83765, 0.83769, 63, 5, 0)
(1582236720, 0.83769, 0.8377, 0.83758, 0.83764, 40, 7, 0)
(1582236780, 0.83766, 0.83769, 0.8376, 0.83766, 37, 6, 0)
(1582236840, 0.83766, 0.83772, 0.83763, 0.83772, 22, 6, 0)
(1582236900, 0.83772, 0.83773, 0.83768, 0.8377, 36, 5, 0)
eurcad_rates( 1441 )
(1580122800, 1.45321, 1.45329, 1.4526, 1.4528, 146, 15, 0)
(1580122860, 1.4528, 1.45315, 1.45274, 1.45301, 93, 15, 0)
(1580122920, 1.453, 1.45304, 1.45264, 1.45264, 82, 15, 0)
(1580122980, 1.45263, 1.45279, 1.45231, 1.45277, 109, 15, 0)
(1580123040, 1.45275, 1.4528, 1.45259, 1.45271, 53, 14, 0)
(1580123100, 1.45273, 1.45285, 1.45269, 1.4528, 62, 16, 0)
(1580123160, 1.4528, 1.45284, 1.45267, 1.45282, 64, 14, 0)
(1580123220, 1.45282, 1.45299, 1.45261, 1.45272, 48, 14, 0)
(1580123280, 1.45272, 1.45275, 1.45255, 1.45275, 74, 14, 0)
(1580123340, 1.45275, 1.4528, 1.4526, 1.4528, 94, 13, 0)