Module MetaTrader pour l'intégration avec Python

MQL5 est conçu pour le développement d'applicatoins de trading à haute performance sur les marchés financiers et n'a pas d'équivalent parmi les autres langages spécialisés utilisés dans le trading algorithmique. La syntaxe et la vitesse des programmes MQL5 sont aussi proches que possible de ceux en C++. Il y a le support d'OpenCL et l'intégration avec MS Visual Studio. Des bibliothèques de statistiques, de logique floue et pour ALGLIB sont également disponibles. L'environnement de développement MetaEditor comporte le support natif des bibliothèques .NET avec l'import "intelligent" de fonctions, éliminant le besoin de développer des wrappers spéciaux. Les DLL C++ tierces peuvent également être utilisées. Les fichiers de code source С++ (CPP et H) peuvent être édités et compilés dans des DLL directement depuis l'éditeur. Microsoft Visual Studio installé sur le PC d'un utilisateur peut également être utilisé pour cela.

Python est un langage de programmation de haut niveau moderne pour développer des scripts et des applications. Il contient plusieurs bibliothèques pour le machine learning, l'automatisation des processus, ainsi que l'analyse et la visualisation des données.

Le package MetaTrader pour Python est conçu pour obtenir facilement et rapidement des données boursières via une communication interprocesseur directement à partir du terminal MetaTrader 5. Les données reçues de cette manière peuvent être utilisées pour des calculs statistiques et le machine learning.

Installation du package à partir de la ligne de commande :

  pip install MetaTrader5

Mise à jour du package à partir de la ligne de commande :

  pip install --upgrade MetaTrader5

Fonctions d'intégration de MetaTrader 5 et Python

Fonction

Action

initialize

Établit une connexion avec le terminal MetaTrader 5

login

Connexion à un compte de trading en utilisant les paramètres spécifiés

shutdown

Ferme la connexion précédemment établie avec le terminal MetaTrader 5

version

Retourne la version du terminal MetaTrader 5

last_error

Retourne les données de la dernière erreur

account_info

Retourne des informations sur le compte de trading actuel

terminal_Info

Retourne l'état et les paramètres du terminal MetaTrader 5 connecté

symbols_total

Retourne le nombre total d'instruments financiers dans le terminal MetaTrader 5

symbols_get

Retourne tous les instruments financiers du terminal MetaTrader 5

symbol_info

Retourne les données sur l'instrument financier spécifié

symbol_info_tick

Sélectionne un symbole dans le MarketWatch

symbol_select

Sélectionne un symbole dans la fenêtre MarketWatch ou supprime un symbole de la fenêtre

market_book_add

Abonne le terminal MetaTrader 5 aux événements de changements du Market Depth pour un symbole spécifié

market_book_get

Renvoie un tuple de BookInfo contenant des entrées du Market Depth pour le symbole spécifié

market_book_release

Annule l'abonnement du terminal MetaTrader 5 aux événements de changement de Market Depth pour un symbole spécifié

copy_rates_from

Retourne les barres du terminal MetaTrader 5 à partir de la date spécifiée

copy_rates_from_pos

Retourne les barres du terminal MetaTrader 5 à partir de l'index spécifié

copyrates_range

Retourne les barres du terminal MetaTrader 5 dans la plage de dates spécifiée

copy_ticks_from

Retourne les ticks du terminal MetaTrader 5 à partir de la date spécifiée

copy_ticks_range

Retourne les ticks du terminal MetaTrader 5 pour la plage de dates spécifiée

orders_total

Retourne le nombre d'ordre actifs.

orders_get

Retourne les ordres actifs avec la possibilité de filtrer par symbole ou ticket

order_calc_margin

Retourne la marge dans la devise du compte pour effectuer une opération de trading spécifiée

order_calc_profit

Retourne le profit dans la devise du compte pour une opération de trading spécifiée

order_check

Vérifie la suffisance des fonds pour effectuer une opération de trading désirée

order_send

Envoie une requête pour effectuer une opération de trading.

positions_total

Retourne le nombre de positions ouvertes

positions_get

Retourne les positions ouvertes avec la possibilité de filtrer par symbole ou ticket

history_orders_total

Retourne le nombre d'ordres dans l'historique de trading dans l'intervalle spécifié

history_orders_get

Retourne les ordres de l'historique de trading avec la possibilité de filtrer par ticket ou par position

history_deals_total

Retourne le nombre de transactions dans l'historique de trading dans l'intervalle spécifié

history_deals_get

Retourne les transactions de l'historique de trading avec la possibilité de filtrer par ticket ou par position

Exemple de connexion de Python à MetaTrader 5

  1. Téléchargez la dernière version de Python 3.8 depuis https://www.python.org/downloads/windows
  2. Lors de l'installation de Python, cochez "Ajouter Python 3.8 au PATH%" pour pouvoir exécuter des scripts Python à partir de la ligne de commande.
  3. Installez le module MetaTrader 5 à partir de la ligne de commande

  pip install MetaTrader5

  1. Ajoutez les packages matplotlib et pandas

  pip install matplotlib
  pip install pandas

  1. Lancez le script de test

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
 
# connexion à MetaTrader 5
if not mt5.initialize():
    print("initialize() a échoué")
    mt5.shutdown()
 
# demande l'état et les paramètres de connexion
print(mt5.terminal_info())
# récupère les données sur la version MetaTrader 5
print(mt5.version())
 
# demande 1000 ticks à EURAUD
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# demande les ticks de AUDUSD du 2019.04.01 13:00 au 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)
 
# récupère les barres de différents symboles de différentes manières
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))
 
# ferme la connexion à MetaTrader 5
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)
 
#DESSIN
# crée le DataFrame à partir des données obtenues
ticks_frame = pd.DataFrame(euraud_ticks)
# convertit le temps en secondes au format datetime
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# affiche les ticks sur le graphique
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# affiche les légendes
plt.legend(loc='upper left')
 
# ajoute l'en-tête
plt.title('EURAUD ticks')
 
# affiche le graphique
plt.show()

  1. Récupère les données et le graphique
    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)