Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader

 

Estamos preparando el módulo de MetaTrader 5 para Python.

Al igual que con el paquete R, por ahora estamos probando en funciones simples para extraer datos de una copia en ejecución de la terminal.

Cómo puedes probar la operación:

  1. Instale Python 3.7.6 x64 desde https://www.python.org/downloads/windows/ con la ruta %PATH% incluida

  2. Entregar el paquete matplotlib para soporte de gráficos
    pip install matplotlib
  3. Ejecute la instalación del paquete MetaTrader5
    pip install MetaTrader5
    
  4. Debe tener MetaTrader 5 build 2007 o posterior instalado en su PC.

  5. Ejecute el script de prueba
    python metatrader5-test.py
  6. El terminal MetaTrader 5 se ejecutará en segundo plano, se extraerán los datos, se mostrarán en la consola y se dibujará un gráfico



Código de prueba:

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()


Más adelante añadiremos más funciones y colocaremos el paquete en un repositorio público de paquetes de Python, para que pueda instalarse de forma inmediata.

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

Un ejemplo de dibujo rápido de una matriz de correlación:

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()


Archivos adjuntos:
 

Cuando una solicitud de historial proviene de Python, ¿se generan los correspondientes hst y tkc en Terminal?


Me gustaría entender cómo es posible trabajar con mil símbolos simultáneamente(AMPGlobalUSA-Demo), para cada uno de los cuales se cargan cien megabytes de ticks.

 
Si alguien sabe, que me muestre cómo crear rápidamente un gráfico similar de MT5 a partir de datos históricos en Python. Es decir, interactivo, no una imagen estática.
 
fxsaber:
Si alguien sabe, que me muestre cómo crear rápidamente una semblanza de un gráfico de MT5 a partir de datos históricos en Python. Es decir, interactivo, no una imagen estática.

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

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

plot.ly en general

 
Maxim Dmitrievsky:

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

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

plot.ly en general.

Soy un completo cero en Python. Me gustaría recibir un empujón de motivación que muestre la simplicidad y usabilidad de MT5-Python. Habrá un ejemplo de dicha conexión, por favor comparta el código.

Se ve muy bien. Me gustaría ver un código de trabajo para MT5.
 
fxsaber:

Soy un completo cero en Python. Me gustaría recibir un empujón de motivación que vea la simplicidad y usabilidad de MT5-Python. Habrá un ejemplo de dicha conexión, por favor comparta el código.

Estoy a favor de MO principalmente, apenas visualizo nada. Las cosas modernas de MO no son realistas para reescribirlas de forma natural, sólo se puede usar lo ya hecho. Es decir, la motivación obvia para mí es ésta.

 
fxsaber:

Se ve muy bien. Me gustaría ver un código de trabajo para MT5.

puede ser codificado más tarde... de hecho hay ejemplos listos en los enlaces

 
A veces necesito ver rápidamente los ticks en una forma más o menos conveniente, para eso uso el indicador ZoomPrice. Pero la visualización es mucho más fría en los enlaces. Si es muy fácil transferir de MT5 a Python y obtener un gráfico de ticks genial, no es una mala motivación para mucha gente.
 
fxsaber:
A veces necesito ver rápidamente los ticks de forma más o menos práctica, para ello uso el indicador ZoomPrice. Pero la visualización es mucho mejor en los enlaces. Si es muy sencillo pasar de MT5 a Python y obtener un gráfico de ticks muy chulo, no es una mala motivación para mucha gente.

Por el momento, cualquier información (que no sean las comillas) puede ser enviada/retornada a través de sockets en tiempo real. La única limitación es que aún no funcionan en el probador.

 
Maxim Dmitrievsky:

Por el momento, cualquier información (que no sean las comillas) puede ser enviada/retornada a través de sockets en tiempo real. La única limitación es que aún no funciona en el probador.

Desgraciadamente, sin los códigos fuente, esta función no es más que palabras para mí. Mucho no sé, y el inicio del autoaprendizaje debería ser probablemente algo práctico para empezar, que se pueda hilar enseguida.