MetaTrader 5 Python User Group - как использовать Python в Метатрейдере

 

Мы готовим модуль MetaTrader 5 для Python.

Как и пакете для R, мы пока тестируемся на простых функциях извлечения данных из работающей копии терминала.

Как можно протестировать работу:

  1. Установите Python 3.7.6 x64 со страницы https://www.python.org/downloads/windows/ с включением в %PATH% путь

  2. Доставьте пакет matplotlib для поддержки графиков
    pip install matplotlib
  3. Запустите инсталляцию пакета MetaTrader5
    pip install MetaTrader5
    
  4. На компьютере должен стоять MetaTrader 5 build 2007 или выше

  5. Запустите тестовый скрипт
    python metatrader5-test.py
  6. В фоне запустится терминал MetaTrader 5, будут извлечены данные, показаны в консоли и нарисован график



Тестовый код:

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


Позже мы добавим больше функций и разместим пакет в публичном хранилище Python пакетов, чтобы можно было инсталлировать штатно.

Python Releases for Windows
Python Releases for Windows
  • www.python.org
The official home of the Python Programming Language
Файлы:
 

Пример быстрого рисования корреляционной матрицы:

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


Файлы:
 

Когда из Питона идет запрос истории, в Терминале формируются соответствующие hst и tkc?


Хочется понять, как можно работать одновременно с тысячей символов (AMPGlobalUSA-Demo), по каждому из которых загружены тики на сотню мегабайт.

 
Если кто знает, покажите, как в Питоне быстро создать подобие MT5-чарта из исторических данных. Т.е. интерактивный, а не статичная картинка.
 
fxsaber:
Если кто знает, покажите, как в Питоне быстро создать подобие MT5-чарта из исторических данных. Т.е. интерактивный, а не статичная картинка.

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

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

либа plot.ly в общем

 
Maxim Dmitrievsky:

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

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

либа plot.ly в общем

В Питоне я абсолютный ноль. Хочется получить мотивационный толчок, в котором видна простота и удобство работы MT5-Python. Будет пример такого соединения, поделитесь кодом.

Выглядит очень круто. Хочется увидеть рабочий код для MT5.
 
fxsaber:

В Питоне я абсолютный ноль. Хочется получить мотивационный толчок, в котором видна простота и удобство работы MT5-Python. Будет пример такого соединения, поделитесь кодом.

мне для МО в основном, почти никогда ничего не визуализирую. Современные МОшные штуки нереально переписывать естественно, только пользовать готовое. Т.е. для меня очевидная мотивация в этом.

 
fxsaber:

Выглядит очень круто. Хочется увидеть рабочий код для MT5.

можно будет накодить потом попозже.. по сути там готовые примеры по ссылкам

 
Иногда нужно посмореть быстро тики в более-менее удобнов виде, для этого использую индикатор ZoomPrice. Но по ссылкам визуализация на порядки круче. Если очень просто из MT5 перекинуть в Python и получить крутой чарт тиков - это уже не хилая мотивация для многих.
 
fxsaber:
Иногда нужно посмореть быстро тики в более-менее удобнов виде, для этого использую индикатор ZoomPrice. Но по ссылкам визуализация на порядки круче. Если очень просто из MT5 перекинуть в Python и получить крутой чарт тиков - это уже не хилая мотивация для многих.

на данный момент можно любую инфо (помимо котировок) передать/вернуть через сокеты реалтайм. Единственное ограничение - в тестере пока не работают.

 
Maxim Dmitrievsky:

на данный момент можно любую инфо (помимо котировок) передать/вернуть через сокеты реалтайм. Единственное ограничение - в тестере пока не работают.

К сожалению, без исходных кодов данная возможность остается для меня только словами. Очень многого не знаю, а начало самообучения, наверное, должен с чего-то практического стартовать, что можно сразу покрутить.