Modulo MetaTrader per l'integrazione con Python

MQL5 è progettato per lo sviluppo di applicazioni di trading ad alte prestazioni nei mercati finanziari ed è impareggiabile tra gli altri linguaggi specializzati utilizzati nel trading algoritmico. La sintassi e la velocità dei programmi MQL5 sono il più vicino possibile al С++, c'è un supporto per OpenCL ed integrazione con MS Visual Studio. Statistiche, Logica Fuzzy e ALGLIB sono librerie disponibili, anche. Ll'ambiente di sviluppo MetaEditor fornisce supporto per le librerie .NET nativo con l'importazione funzioni "intelligente" eliminando la necessità di sviluppare wrapper speciali. È anche possibile utilizzare DLL C++ di terze parti. I file di codice sorgente di С++ (CPP e H) possono essere modificati e compilati in DLL direttamente dall'editor. Microsoft Visual Studio installato sul PC dell'utente può essere utilizzato per questo.

Python è un moderno linguaggio di programmazione ad alto livello per lo sviluppo di script ed applicazioni. Contiene librerie multiple per il machine learning, l'automazione dei processi, nonché l'analisi e la visualizzazione dei dati.

Il pacchetto MetaTrader per Python è progettato per ottenere in modo rapido e conveniente dati di scambio tramite comunicazione interprocessore direttamente dal terminale MetaTrader 5. I dati ricevuti in questo modo possono essere ulteriormente utilizzati per calcoli statistici ed apprendimento automatico.

Installazione del pacchetto dalla riga di comando:

  pip install MetaTrader5

Aggiornamento del pacchetto dalla riga di comando:

  pip install --upgrade MetaTrader5

Funzioni per l'integrazione di MetaTrader 5 e Python

Funzione

Azione

initialize

Stabilire una connessione con il terminale MetaTrader 5

login

Si collega ad un conto di trading utilizzando i parametri specificati

shutdown

Chiude la connessione precedentemente stabilita con il terminale MetaTrader 5

version

Restituisce la versione del terminale MetaTrader 5

last_error

Restituisce i dati sull'ultimo errore

account_info

Ottiene informazioni sull'account di trading corrente

terminal_Info

Ottiene status e parametri del terminale MetaTrader 5 collegato

symbols_total

Ottiene il numero di tutti gli strumenti finanziari nel terminale MetaTrader 5

symbols_get

Ottiene tutti gli strumenti finanziari dal terminale MetaTrader 5

symbol_info

Ottiene dati sullo strumento finanziario specificato

symbol_info_tick

Ottiene l'ultimo tick per lo strumento finanziario specificato

symbol_select

Seleziona un simbolo nella finestra MarketWatch finestra o rimuove un simbolo dalla finestra

market_book_add

Subscribes the MetaTrader 5 terminal to the Market Depth change events for a specified symbol

market_book_get

Returns a tuple from BookInfo featuring Market Depth entries for the specified symbol

market_book_release

Cancels subscription of the MetaTrader 5 terminal to the Market Depth change events for a specified symbol

copy_rates_from

Ottiene barre dal terminale MetaTrader 5 a partire dalla data specificata

copy_rates_from_pos

Ottiene barre dal terminale MetaTrader 5 a partire dall'indice specificato

copyrates_range

Ottiene barre nell'intervallo di date specificato dal terminale MetaTrader 5

copy_ticks_from

Ottiene tick dal terminale MetaTrader 5 a partire dalla data specificata

copy_ticks_range

Ottiene tick per l'intervallo di date specificato dal terminale MetaTrader 5

orders_total

Ottiene il numero di ordini attivi.

orders_get

Ottiene ordini attivi con la possibilità di filtrare per simbolo o ticket

order_calc_margin

Restituisce il margine nella valuta del conto per eseguire un'operazione di trading specificata

order_calc_profit

Restituisce il profitto nella valuta del conto per un'operazione di trading specificata

order_check

Verifica la sufficienza dei fondi per l'esecuzione di un' operazione di trading richiesta

order_send

Invia una richiesta per eseguire un'operazione di trading.

positions_total

Ottiene il numero di posizioni aperte

positions_get

Ottiene le posizioni aperte con la possibilità di filtrare per simbolo o ticket

history_orders_total

Ottiene il numero di ordini nella cronologia di trading entro l'intervallo specificato

history_orders_get

Ottiene ordini dalla cronologia di trading con la possibilità di filtrare per ticket o posizione

history_deals_total

Ottiene il numero di affari nella cronologia di trading entro l'intervallo specificato

history_deals_get

Ottiene affari dalla cronologia di trading con la possibilità di filtrare per biticket o posizione

Esempio di collegamento di Python a MetaTrader 5

  1. Scarica l'ultima versione di Python 3.8 dahttps://www.python.org/downloads/windows
  2. Quando si installa Python, selezionare "Aggiungi Python 3.8 a PATH%" per poter eseguire gli script Python dalla riga di comando.
  3. Installa il modulo MetaTrader 5 dalla riga di comando

  pip install MetaTrader5

  1. Aggiungi i pacchetti matplotlib e pandas

  pip install matplotlib
  pip install pandas

  1. Avvia lo script di 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
 
# connettiti a MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()
 
# richiesta status e parametri della connessione
print(mt5.terminal_info())
# ottiene dati sulla versione MetaTrader 5
print(mt5.version())
 
# richiesta 1000 tick da EURAUD
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# richiesta tick da AUDUSD entro il 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)
 
# ottiene barre da simboli diversi in vari modi
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))
 
# chiudi la connessione a 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)
 
#PLOT
# create DataFrame dai dati ottenuti
ticks_frame = pd.DataFrame(euraud_ticks)
# converti il tempo in secondi nel formato datetime
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# visualizza ticks sul chart
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# visualizza le legende
plt.legend(loc='upper left')
 
# aggiungi l'intestazione
plt.title('EURAUD ticks')
 
# visualizza il chart
plt.show()

  1. Ottiene dati e chart
    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)