MetaTrader 5 Python User Group - Come usare Python in Metatrader

 

Stiamo preparando il modulo MetaTrader 5 per Python.

Come per il pacchetto R, stiamo testando su semplici funzioni per estrarre dati da una copia in esecuzione del terminale per ora.

Come si può testare il funzionamento:

  1. Installare Python 3.7.6 x64 da https://www.python.org/downloads/windows/ con il percorso %PATH% incluso

  2. Consegnare il pacchetto matplotlib per il supporto ai grafici
    pip install matplotlib
  3. Esegui l'installazione del pacchetto MetaTrader5
    pip install MetaTrader5
    
  4. Devi avere MetaTrader 5 build 2007 o successivo installato sul tuo PC.

  5. Eseguire lo script di test
    python metatrader5-test.py
  6. Il terminale MetaTrader 5 verrà eseguito in background, i dati verranno estratti, mostrati nella console e verrà disegnato un grafico



Codice di prova:

from datetime import datetime
from MetaTrader5 import *

MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

ticks1 = MT5CopyTicksFrom("EURAUD", datetime(2019,1,28,13), 10000, MT5_COPY_TICKS_ALL)
ticks2 = MT5CopyTicksRange("AUDUSD", datetime(2019,1,27,13), datetime(2019,1,28,13,1), MT5_COPY_TICKS_ALL)

rates1 = MT5CopyRatesFrom("EURUSD", MT5_TIMEFRAME_M1, datetime(2019,1,28,13), 1000)
rates2 = MT5CopyRatesFromPos("EURGBP", MT5_TIMEFRAME_M1, 0, 1000)
rates3 = MT5CopyRatesRange("EURCAD", MT5_TIMEFRAME_M1, datetime(2019,1,27,13), datetime(2019,1,28,13))

MT5Shutdown()

#DATA
print('ticks1(', len(ticks1), ')')
for val in ticks1[:10]: print(val)
print('ticks2(', len(ticks2), ')')
for val in ticks2[:10]: print(val)
print('rates1(', len(rates1), ')')
for val in rates1[:10]: print(val)
print('rates2(', len(rates2), ')')
for val in rates2[:10]: print(val)
print('rates3(', len(rates3), ')')
for val in rates3[:10]: print(val)

#PLOTTING
x_time = [x.time for x in rates2]
y_open = [y.open for y in rates2]
y_close = [y.close for y in rates2]

import matplotlib.pyplot as plt

plt.plot(x_time, y_open, 'g-')
plt.plot(x_time, y_close, 'r-')

plt.show()


Aggiungeremo altre caratteristiche in seguito e metteremo il pacchetto in un repository pubblico di pacchetti Python, in modo che possa essere installato out-of-the-box.

Python Releases for Windows
Python Releases for Windows
  • www.python.org
The official home of the Python Programming Language
File:
 

Un esempio di disegno veloce di una matrice di correlazione:

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

# Create currency watchlist for which correlation matrix is to be plotted
sym = ['EURUSD','GBPUSD','USDJPY','USDCHF','AUDUSD','GBPJPY']

# Copying data to dataframe
d = pd.DataFrame()
for i in sym:
     rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates]

# Deinitializing MT5 connection
MT5Shutdown()

# Compute Percentage Change
rets = d.pct_change()

# Compute Correlation
corr = rets.corr()

# Plot correlation matrix
plt.figure(figsize=(10, 10))
plt.imshow(corr, cmap='RdYlGn', interpolation='none', aspect='auto')
plt.colorbar()
plt.xticks(range(len(corr)), corr.columns, rotation='vertical')
plt.yticks(range(len(corr)), corr.columns);
plt.suptitle('FOREX Correlations Heat Map', fontsize=15, fontweight='bold')
plt.show()


File:
 

Quando una richiesta di cronologia proviene da Python, i corrispondenti hst e tkc sono generati nel Terminale?


Vorrei capire come è possibile lavorare con mille simboli simultaneamente(AMPGlobalUSA-Demo), per ognuno dei quali vengono caricati cento megabyte di tick.

 
Se qualcuno lo sa, mi mostri come creare rapidamente un grafico MT5 simile dai dati storici in Python. Cioè interattivo, non un'immagine statica.
 
fxsaber:
Se qualcuno lo sa, mi mostri come creare rapidamente una parvenza di grafico MT5 da dati storici in Python. Cioè interattivo, non un'immagine statica.

https://plot.ly/~pari/67/stock-chart-per-netflix-inc/#//

https://plot.ly/python/candlestick-charts/

plot.ly in generale

 
Maxim Dmitrievsky:

https://plot.ly/~pari/67/stock-chart-per-netflix-inc/#//

https://plot.ly/python/candlestick-charts/

plot.ly in generale.

Sono uno zero assoluto in Python. Mi piacerebbe avere una spinta motivazionale, che mostra la semplicità e l'usabilità di MT5-Python. Ci sarà un esempio di tale connessione, si prega di condividere il codice.

Sembra molto bello. Vorrei vedere un codice funzionante per MT5.
 
fxsaber:

Sono uno zero assoluto in Python. Vorrei avere una spinta motivazionale che veda la semplicità e l'usabilità di MT5-Python. Ci sarà un esempio di tale connessione, si prega di condividere il codice.

Io sono per il MO per lo più, non visualizzando quasi mai nulla. La roba moderna di MO non è realistica da riscrivere naturalmente, usate solo roba già pronta. Cioè la motivazione ovvia per me è questa.

 
fxsaber:

Sembra molto bello. Vorrei vedere un codice funzionante per MT5.

può essere codificato in seguito... infatti ci sono esempi pronti nei link

 
A volte ho bisogno di visualizzare rapidamente i tick in una forma più o meno comoda, per questo uso l'indicatore ZoomPrice. Ma la visualizzazione è molto più fredda sui link. Se è molto facile trasferire da MT5 a Python e ottenere un bel grafico in tick, questa non è una cattiva motivazione per molte persone.
 
fxsaber:
A volte ho bisogno di visualizzare rapidamente i tick in forma più o meno comoda, uso l'indicatore ZoomPrice per questo. Ma la visualizzazione è molto meglio sui link. Se è molto semplice trasferire da MT5 a Python e ottenere un bel grafico in tick, questa non è una cattiva motivazione per molte persone.

Al momento qualsiasi informazione (a parte le virgolette) può essere inviata/restituita tramite socket in tempo reale. L'unica limitazione è che non funzionano ancora nel tester.

 
Maxim Dmitrievsky:

Al momento qualsiasi informazione (diversa dalle virgolette) può essere inviata/restituita tramite socket in tempo reale. L'unica limitazione è che non funziona ancora nel tester.

Purtroppo, senza codici sorgente, questa funzione è solo parole per me. Molto non lo so, e l'inizio dell'autoapprendimento dovrebbe probabilmente essere qualcosa di pratico per iniziare, che possa essere filato subito.

Motivazione: