Das MetaTrader-Modul für die Integration mit Python

MQL5 wurde für die Entwicklung von leistungsstarken Handelsanwendungen an den Finanzmärkten entwickelt und ist beispiellos unter anderen spezialisierten Sprachen, die im algorithmischen Handel eingesetzt werden. Die Syntax und Geschwindigkeit von MQL5-Programmen sind so nah wie möglich an С++, es gibt Unterstützung für OpenCL und Integration mit MS Visual Studio. Die Bibliotheken Statistics, fuzzy logic und ALGLIB sind ebenfalls verfügbar. Die MetaEditor-Entwicklungsumgebung bietet native Unterstützung für .NET-Bibliotheken mit "intelligentem" Funktionsimport, wodurch die Entwicklung spezieller Wrapper entfällt. C++-DLLs von Drittanbietern können ebenfalls verwendet werden.  С++ Quellcodedateien (CPP und H) können direkt aus dem Editor heraus bearbeitet und in eine DLL kompiliert werden. Microsoft Visual Studio, das auf dem PC des Benutzers installiert ist, kann dafür verwendet werden.

Python ist eine moderne High-Level-Programmiersprache zur Entwicklung von Skripten und Anwendungen. Es enthält mehrere Bibliotheken für maschinelles Lernen, Prozessautomatisierung sowie Datenanalyse und Visualisierung.

Das MetaTrader-Paket für Python wurde für das komfortable und schnelle Abrufen von Austauschdaten über das Interprozessorkommunikation direkt vom MetaTrader 5 Terminal aus entwickelt. Die so erhaltenen Daten können für statistische Berechnungen und maschinelles Lernen weiterverwendet werden.

Installieren des Pakets von der Kommandozeile:

  pip install MetaTrader5

Updating the package from the command line:

  pip install --upgrade MetaTrader5

Funktionen zur Integration von MetaTrader 5 und Python

Funktion

Aktion

initialize

Stellt eine Verbindung mit dem MetaTrader 5 Terminal her

login

Verbinden mit einem Handelskonto mit den angegebenen Parametern

shutdown

Schließt die vorher hergestellte Verbindung zu MetaTrader 5 Terminal wieder

version

Rückgabe der Version des MetaTrader 5 Terminals

last_error

Datenrückgabe des letzten Fehlers

account_info

Informationsabruf des aktuellen Handelskontos

terminal_Info

Abfrage des Status' und der Parameter des verbundenen MetaTrader 5 Terminals

symbols_total

Abrufen der Anzahl aller Finanzinstrumente des MetaTrader 5 Terminals

symbols_get

Abrufen aller Finanzinstrumente des MetaTrader 5 Terminals

symbol_info

Abrufen der Daten des angegebenen Finanzinstruments

symbol_info_tick

Abrufen des letzten Ticks des angegebenen Finanzinstruments

symbol_select

Auswahl eines Symbols im Fenster MarketWatch oder es aus demselben entfernen

market_book_add

Abonniert das MetaTrader 5-Terminal auf die Markttiefe-Änderungsereignisse für ein angegebenes Symbol

market_book_get

Gibt ein Tupel aus BookInfo mit den Einträgen der Markttiefe für das angegebene Symbol zurück

market_book_release

Beenden des Abonnements der Markttiefe des MetaTrader 5-Terminals für ein bestimmtes Symbol ab

copy_rates_from

Abrufen der Bars vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Datum

copy_rates_from_pos

Abrufen der Bars vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Index

copyrates_range

Abrufen der Bars der angegebenen Zeitspanne vom MetaTrader 5 Terminal

copy_ticks_from

Abrufen der Ticks vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Datum

copy_ticks_range

Abrufen der Ticks der angegebenen Zeitspanne vom MetaTrader 5 Terminal

orders_total

Abrufen der Anzahl der aktiven Orders.

orders_get

Abrufen der aktiven Orders mit der Fähigkeit nach Symbol oder Ticket zu filtern

order_calc_margin

Rückgabe der Marge in der Kontowährung zur Durchführung der angegebenen Handelsoperation

order_calc_profit

Rückgabe des Gewinns in Kontowährung für die angegebene Handelsoperation

order_check

Prüfen, ob die Geldmittel ausreichen für die angestrebte Handelsoperation

order_send

Senden einer Anfrage zur Durchführung einer Handelsoperation.

positions_total

Abrufen der Anzahl der offenen Positionen

positions_get

Abrufen der offenen Positionen, mit der Fähigkeit nach Symbol oder Ticket zu filtern

history_orders_total

Abrufen der Anzahl der Orders in der Handelshistorie innerhalb des angegebenen Intervalls

history_orders_get

Abrufen der Orders in der Handelshistorie, mit der Fähigkeit nach Symbol oder Ticket zu filtern

history_deals_total

Abrufen der Anzahl der Deals in der Handelshistorie innerhalb des angegebenen Intervalls

history_deals_get

Abrufen der Deals in der Handelshistorie, mit der Fähigkeit nach Symbol oder Ticket zu filtern

Beispiel einer Verbindung von Python zum MetaTrader 5

  1. Holen Sie sich die letzte Version von Python 3.8 von https://www.python.org/downloads/windows
  2. Beim Installieren von Python prüfen Sie "Add Python 3.8 to PATH%", damit Sie die Python-Skripts aus der Kommandozeile heraus starten können.
  3. Installieren des MetaTrader 5 Moduls aus der Kommandozeile

  pip install MetaTrader5

  1. Hinzufügen der Pakete von matplotlib und pandas

  pip install matplotlib
  pip install pandas

  1. Starten des Testskripts

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
 
# mit MetaTrader 5 verbinden
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()
 
# Abfrage des Status und der Parameter der Verbindung
print(mt5.terminal_info())
# Abrufen der Version des MetaTrader 5
print(mt5.version())
 
# Abrufen von 1000 Ticks von EURAUD
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# Abrufen von Ticks von AUDUSD zwischen 2019.04.01 13:00 - 2019.04.02 13:00
audusd_ticks = mt5.copy_ticks_range("AUDUSD"datetime(2020,1,27,13), datetime(2020,1,28,13), mt5.COPY_TICKS_ALL)
 
# Abrufen der Bars eines anderen Symbols auf verschiedenen Wegen
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))
 
# Schließen der Verbindung zum MetaTrader 5
mt5.shutdown()
 
# Daten
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)
 
#ANZEIGEN
# Erstellen von DataFrame aus den erhaltenen Daten
ticks_frame = pd.DataFrame(euraud_ticks)
# Konvertieren der Zeit in Sekunden im Datumsformat
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# Ticks anzeigen auf dem Chart
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# Anzeigen der Legende
plt.legend(loc='upper left')
 
# Hinzufügen des Headers
plt.title('EURAUD ticks')
 
# Anzeigen des Charts
plt.show()

  1. Abrufen der Daten und des Charts
    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)