Установка Python и пакета MetaTrader5

Для изучения материалов данной Главы на компьютере должен быть установлен Python. Если его еще нет, скачайте последнюю версию Python (например, на момент написания книги — 3.10) со страницы https://www.python.org/downloads/windows.

При установке Python рекомендуется отметить флаг "Add Python to PATH", чтобы можно было запускать скрипты Python из командной строки, находясь в любой папке.

После того как Python скачан и работоспособен, установите модуль MetaTrader5 из командной строки (здесь pip — стандартная программа менеджер пакетов Python):

pip install MetaTrader5

Впоследствии можно проверять обновление пакета такой командной:

pip install --upgrade MetaTrader5

Для добавления других общеупотребительных пакетов используется аналогичный синтаксис. В частности, многие скрипты требуют пакеты анализа и визуализации данных — pandas и matplotlib, соответственно.

pip install matplotlib
pip install pandas

Создать новый скрипт на Python можно непосредственно из Мастера MQL5 в MetaEditor. Кроме имени скрипта пользователь может выбрать опции для импортирования нескольких пакетов, таких как TensorFlow, NumPy или Datetime.

Скрипты по умолчанию предлагается расположить в папке MQL5/Scripts. Вновь созданные и уже имеющиеся скрипты Python отображаются в навигаторе MetaTrader 5, помеченные особенной иконкой, и оттуда их можно запустить привычным способом. Python-скрипты могут выполняться на графике параллельно с другими MQL5-скриптами и советниками. Для остановки скрипта, если его исполнение зациклено, просто удалите его с графика.

Запуск скрипта Python в терминале

Запуск скрипта Python в терминале

Скрипту Python, запущенному из терминала, через параметры командной строки передается название символа и таймфрейм графика. Например, мы можем запустить на графике EURUSD,H1 следующий скрипт, в котором аргументы доступны в виде массива sys.argv:

import sys
   
print('The command line arguments are:')
for i in sys.argv:
   print(i)

Он выведет в журнал экспертов:

The command line arguments are:
C:\Program Files\MetaTrader 5\MQL5\Scripts\MQL5Book\Python\python-args.py
EURUSD
60

Кроме того, скрипт Python можно запускать непосредственно из MetaEditor, если указать размещение установки Python в диалоге Настроек редактора, на закладке Компиляторы — тогда команда компиляции для файлов с расширением *.py превращается в команду запуска.

Наконец, скрипты Python можно запускать и в своей родной среде, передавая их как параметры в вызовах python.exe из командной строки или из другой IDE (интегрированная среда разработки), адаптированной для Python, например, Jupyter Notebook.

Если в терминале разрешена алгоритмическая торговля, то по умолчанию разрешена и торговля из Python. Чтобы дополнительно защитить счета при использовании сторонних библиотек Python, в настройках платформы предусмотрена опция "Отключить автоматическую торговлю через внешний Python API". Таким образом, скриптам на Python можно избирательно заблокировать торговлю, оставив её доступной для MQL-программ. Когда эта опция включена, вызовы торговых функций в скрипте Python будут возвращать ошибку 10027 (TRADE_RETCODE_CLIENT_DISABLES_AT) — алготрейдинг запрещен клиентским терминалом.

MQL5 vs Python
 
Python является интерпретируемым языком, в отличие от компилируемого MQL5. Для нас, как разработчиков это облегчает жизнь, потому что не нужна отдельная фаза компиляции, чтобы получить работающую программу. Однако скорость выполнения скриптов на Python заметно ниже, чем откомпилированных на MQL5.
 
Python — это язык с динамической типизацией: тип переменной определяется тем, какое значение мы в неё положили. С одной стороны это дает гибкость, но и требует осторожности, чтобы избежать непредвиденных ошибок. В MQL5 используется статическая типизации, то есть при описании переменных мы должны явно задать их тип, и компилятор следит за совместимостью типов.
 
Python сам "занимается" "уборкой мусора", то есть освобождает память, выделенную прикладной программой под объекты. В MQL5 мы должны следить за своевременным вызовом delete для динамических объектов.
 
В синтаксисе Python важную роль играют отступы в исходном коде. Если требуется записать составной оператор (например, цикл или условный) с блоком из нескольких вложенных операторов, то в Python для этой цели используются отступы пробелами или табуляцией (они должны быть равной величины внутри блока). Смешивать табуляции и пробелы запрещено. Неправильный отступ приведет к ошибке. В MQL5 мы формируем блоки составных операторов, заключая их в фигурные скобки { ... }, но форматирование при этом не играет роли, и вы можете применить любой понравившийся вам стиль, не нарушая работоспособности программы.
 
В функциях Python поддерживаются параметры двух типов: именованные и позиционные. Второй тип соответствует тому, к чему мы привыкли в MQL5: значение для каждого параметра должно передаваться строго на своем порядковом месте в списке аргументов (согласно прототипу функции). В отличие от этого, именованные параметры передаются в виде сочетания имени и значения (между ними ставится знак '=') и потому их можно указывать в произвольном порядке, например, func(param2 = value2, param1 = value1).