Интеграция MetaTrader 5 с Python для начинающих

 

Минимум, который необходим:

1. Python, пакет MetaTrader для Python, пакеты matplotlib и pandas. Описание по установке доступно и проверочный скрипт доступны в документации в разделе Модуль MetaTrader для интеграции с Python 

Пошаговая инструкция

1.1. Скачайте последнюю версию Python 3.8 со страницы https://www.python.org/downloads/windows

Прокручиваем страницу, находим релиз 3.8.0:

Рис. 1. Выбор релиз 3.8.0

и загружаем обычный инсталляционный файл для Windows:

Рис. 2. Скачивается файл 'python-3.8.0-amd64.exe'

После установки Python запустите редактор MetaEditor - в настройках должен самостоятельно прописаться путь к Python:

Рис. 3. Путь к Python в настройках MetaEditor 

1.2. При установке Python отметьте чек-бокс "Add Python 3.8 to PATH%", чтобы можно было из командной строки запускать скрипты на Python.

1.3. Установите модуль MetaTrader5: в командной строке Windows 10 

pip install MetaTrader5

1.4. Добавьте пакеты matplotlib и pandas

pip install matplotlib
pip install pandas

2. Ещё нужен Jupyter Notebook (среда разработки для Python, позволяющая видеть результаты выполнения кода на Python). Предполагается, что Python уже установлен - установите пакет из командной строки

pip install notebook
Запуск Jupyter Notebook производится через командную строку:
jupyter notebook


 

Три способа запуска скрипта Python: редактор MetaEditor, терминал MetaTrader 5 и Jupyter Notebook

Подготовка скрипта - со страницы  Модуль MetaTrader для интеграции с Python берём скрипт и добавляем обработки ошибок (  ). Сам скрипт:

# Copyright 2021, MetaQuotes Ltd.
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 
  
# подключимся к MetaTrader 5 
if not mt5.initialize(): 
    print("initialize() failed") 
    mt5.shutdown() 
  
# запросим статус и параметры подключения 
print(mt5.terminal_info()) 
# получим информацию о версии MetaTrader 5 
print(mt5.version()) 
  
# запросим 1000 тиков с EURAUD  
euraud_ticks = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 1000, mt5.COPY_TICKS_ALL) 
# запросим тики с AUDUSD в интервале 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) 
  
# получим бары с разных инструментов разными способами 
eurusd_rates = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000) 
print('type(eurusd_rates)=',type(eurusd_rates))
if eurusd_rates is None:
   print('mt5.copy_rates_from(EURUSD) failed. error=',mt5.last_error())

eurgbp_rates = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000) 
if eurgbp_rates is None:
   print('mt5.copy_rates_from(EURGBP) failed. error=',mt5.last_error())

eurcad_rates = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13)) 
if eurcad_rates is None:
   print('mt5.copy_rates_from(EURCAD) failed. error=',mt5.last_error())
  
# завершим подключение к MetaTrader 5 
mt5.shutdown() 
  
#DATA 
if euraud_ticks is not None:
   print('euraud_ticks(', len(euraud_ticks), ')') 
   for val in euraud_ticks[:10]: print(val) 
else:
   print("No data in euraud_ticks")
   
if audusd_ticks is not None:  
   print('audusd_ticks(', len(audusd_ticks), ')') 
   for val in audusd_ticks[:10]: print(val) 
else:
   print("No data in audusd_ticks")

  
if eurusd_rates is not None:
   print('eurusd_rates(', len(eurusd_rates), ')') 
   for val in eurusd_rates[:10]: print(val) 
else:
   print("No data in eurusd_rates")
  
if eurgbp_rates is not None:
   print('eurgbp_rates(', len(eurgbp_rates), ')') 
   for val in eurgbp_rates[:10]: print(val) 

  
if eurcad_rates is not None:
   print('eurcad_rates(', len(eurcad_rates), ')') 
   for val in eurcad_rates[:10]: print(val) 
else:
   print("No data in eurcad_rates")

  
#PLOT 
# создадим из полученных данных DataFrame 
ticks_frame = pd.DataFrame(euraud_ticks) 
# сделаем отрисовку тиков на графике 
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask') 
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid') 
  
# выведем легенды  
plt.legend(loc='upper left') 
  
# добавим заголовок  
plt.title('EURAUD ticks') 
  
# покажем график 
plt.show()


Редактор MetaEditor

Запуск Python скрипта осуществляется через кнопку 'Скомпилировать' 

Compile


Терминал MetaTrader

В терминале в окне 'Навигатор' находим скрипт и перетаскиваем его на график. Например у меня он расположен здесь:


Jupyter Notebook

Запуск скрипта по кнопке 'Запуск'

 
хороший язык питон все по порядку . непонятно исполняемы файл где будет. 
 

Получить справку (которая встроена в дополнительный модуль) можно так - пример скрипта Python для модуля 'MetaTrader5'

help('MetaTrader5')

Результат (привожу только первые несколько  строк ... )

2021.07.21 11:16:35.105 Python  "C:\Users\barab\AppData\Local\Programs\Python\Python38\python.exe" -u "C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Scripts\Python\MyScr\Script 1.py" AUDUSD 1
2021.07.21 11:16:35.325 Python  Help on package MetaTrader5:
2021.07.21 11:16:35.325 Python  
2021.07.21 11:16:35.325 Python  NAME
2021.07.21 11:16:35.325 Python      MetaTrader5
2021.07.21 11:16:35.325 Python  
2021.07.21 11:16:35.325 Python  PACKAGE CONTENTS
2021.07.21 11:16:35.325 Python      _core
2021.07.21 11:16:35.325 Python  
2021.07.21 11:16:35.325 Python  FUNCTIONS
2021.07.21 11:16:35.325 Python      Buy(symbol, volume, price=None, *, comment=None, ticket=None)
2021.07.21 11:16:35.325 Python          # Buy order
2021.07.21 11:16:35.325 Python      
2021.07.21 11:16:35.325 Python      Close(symbol, *, comment=None, ticket=None)
2021.07.21 11:16:35.325 Python          # Close all specific orders
2021.07.21 11:16:35.325 Python      
2021.07.21 11:16:35.325 Python      Sell(symbol, volume, price=None, *, comment=None, ticket=None)
2021.07.21 11:16:35.325 Python          # Sell order
 
import os
path_module=os.getcwd()
print ("Start path os,getcwd():",path_module)
ddir=path_module.split("\\")
print (ddir)
#===============
print ('end')

ожидалось получить путь к исполняемому модулю. но если запускать из-под метаэдитора:

2021.07.22 18:11:00.665 Python "C:\Program Files\Python37\python.exe" -u "C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Scripts\Python\py\testPathBug.py" ETHRUB 15

2021.07.22 18:11:00.919 Python Start path os,getcwd(): C:\Program Files\Swissquote Bank MT5 Client Terminal

2021.07.22 18:11:00.919 Python ['C:', 'Program Files', 'Swissquote Bank MT5 Client Terminal']

2021.07.22 18:11:00.919 Python end

под MS VCode все ок:

Microsoft Windows [Version 10.0.19043.1110]

(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.


C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Scripts\Python\py> cmd /C ""C:\Program Files\Python37\python.exe" c:\Users\Alex\.vscode\extensions\ms-python.python-2021.7.1053846006\pythonFiles\lib\python\debugpy\launcher 6875 -- c:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Scripts\Python\py\testPathBug.py "

Start path os,getcwd(): C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Scripts\Python\py

['C:', 'Users', 'Alex', 'AppData', 'Roaming', 'MetaQuotes', 'Terminal', 'BD115B570DAF19795DD0BA0C4463675D', 'MQL5', 'Scripts', 'Python', 'py']

end


C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Scripts\Python\py>

Файлы:
 

У меня так:

MetaEditor
2021.07.22 18:34:54.249 Python  Start path os,getcwd(): C:\Windows\system32
2021.07.22 18:34:54.249 Python  ['C:', 'Windows', 'system32']
2021.07.22 18:34:54.249 Python  end


MetaTrader 5
2021.07.22 18:38:29.152 os_getcwd (EURUSD,Daily)        Start path os,getcwd(): C:\Windows\system32
2021.07.22 18:38:29.152 os_getcwd (EURUSD,Daily)        ['C:', 'Windows', 'system32']
2021.07.22 18:38:29.152 os_getcwd (EURUSD,Daily)        end


jupyter notebook
Start path os,getcwd(): C:\Users\barab\OneDrive\Jupyter Examples
['C:', 'Users', 'barab', 'OneDrive', 'Jupyter Examples']
end


Python
== RESTART: C:/Users/barab/AppData/Local/Programs/Python/Python38/os_getcwd.py =
Start path os,getcwd(): C:\Users\barab\AppData\Local\Programs\Python\Python38
['C:', 'Users', 'barab', 'AppData', 'Local', 'Programs', 'Python', 'Python38']
end

Терминал:

2021.07.22 07:58:29.207 Terminal        MetaTrader 5 x64 build 3001 started for MetaQuotes Software Corp.
2021.07.22 07:58:29.207 Terminal        Windows 10 build 19043, Intel Core i7-9750H  @ 2.60GHz, 25 / 31 Gb memory, 816 / 947 Gb disk, IE 11, UAC, GMT+2
2021.07.22 07:58:29.207 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
 
Vladimir Karputov:

У меня так:

Дело в том, что я новичек в пайтоне, но модуль питона у меня в одном и том же месте.

os.getcwd() - текущая рабочая директория.  так пишут...

Но не в Windows  или Program Files же

2021.07.22 19:05:18.056 Terminal Swissquote Bank MT5 Client Terminal x64 build 3003 started for Swissquote Bank SA

2021.07.22 19:05:18.058 Terminal Windows 10 build 19043, Intel Core i5-4200U  @ 1.60GHz, 2 / 7 Gb memory, 78 / 913 Gb disk, IE 11, UAC, GMT+2

2021.07.22 19:05:18.058 Terminal C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D



 
Mikhail Dovbakh:

Дело в том, что я новичек в пайтоне, но модуль питона у меня в одном и том же месте.

os.getcwd() - текущая рабочая директория.  так пишут...

Но не в Windows  или Program Files же

2021.07.22 19:05:18.056 Terminal Swissquote Bank MT5 Client Terminal x64 build 3003 started for Swissquote Bank SA

2021.07.22 19:05:18.058 Terminal Windows 10 build 19043, Intel Core i5-4200U  @ 1.60GHz, 2 / 7 Gb memory, 78 / 913 Gb disk, IE 11, UAC, GMT+2

2021.07.22 19:05:18.058 Terminal C:\Users\Alex\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D



Я такой же как и Вы :). Поэтому создал тему где новички могут общаться: "Интеграция MetaTrader 5 с Python для начинающих". Хотите вынесу посты туда - может кто другой что-то подскажет ...?

"Интеграция MetaTrader 5 с Python для начинающих"
"Интеграция MetaTrader 5 с Python для начинающих"
  • 2021.07.18
  • www.mql5.com
Минимум, который необходим: 1. Python, пакет MetaTrader для Python, пакеты matplotlib и pandas...
 
Vladimir Karputov:

Я такой же как и Вы :). Поэтому создал тему где новички могут общаться: "Интеграция MetaTrader 5 с Python для начинающих". Хотите вынесу посты туда - может кто другой что-то подскажет ...?

Согласен. Но все дело видимо в ланчере Соde - он дает верную директорию модуля. А все остальные - рабочуюдиректорию главного модуля.( терминала или юпитера)

Но сам Пайтон ведет себя аналогично и ожидаемо:


 
Mikhail Dovbakh:

Согласен. Но все дело видимо в ланчере Соde - он дает верную директорию модуля. А все остальные - рабочуюдиректорию главного модуля.( терминала или юпитера)

Но сам Пайтон ведет себя аналогично и ожидаемо:


А Ваш терминал MetaTrader 5 случайно не с флагом 'Portable' запускается?

 

Не.

Ho Python 3.7, a у Вас 3.8

Причина обращения: