- Установка Python и пакета MetaTrader5
- Обзор функций пакета MetaTrader5 для Python
- Подключение скрипта Python к терминалу и счету
- Проверка ошибок: last_error
- Получение информации о торговом счете
- Получение информации о терминале
- Получение информации о финансовых инструментах
- Подписка на стакан цен
- Чтение котировок
- Чтение истории тиков
- Вычисление маржинальных требований и оценка прибыли
- Проверка и отправка торгового приказа
- Получение количества и списка действующих ордеров
- Получение количества и списка открытых позиций
- Чтение истории ордеров и сделок
Обзор функций пакета MetaTrader5 для Python
Функции API, доступные в Python, можно условно разделить на 2 группы: функции, имеющие полные аналоги в MQL5 API, и функции, доступные только в Python. Наличие второй группы отчасти обусловлено тем, что соединение Python и MetaTrader 5 должно быть организовано технически, прежде чем можно будет использовать прикладные функции. Это объясняет наличие и назначение пары функций initialize и shutdown: первая устанавливает подключение к терминалу, а вторая — завершает.
Важно, что в процессе инициализации может быть запущена требуемая копия терминала (если она еще не выполнялась) и выбран конкретный торговый счет. Кроме того, имеется возможность изменить торговый счет в контексте уже открытого подключения к терминалу: это делается функцией login.
После подключения к терминалу Python-скрипт может узнать краткую информацию о версии терминала с помощью функции version. Полная информация о терминале доступна через terminal_info — это полный аналог тройки TerminalInfo-функций, как бы объединенных в одном вызове.
В следующей таблице приведены прикладные функции Python и их аналоги в MQL5 API.
Python |
MQL5 |
|---|---|
last_error |
GetLastError (Внимание! в Python собственные коды ошибок) |
account_info |
AccountInfoInteger, AccountInfoDouble, AccountInfoString |
terminal_info |
TerminalInfoInteger, TerminalInfoDouble, TerminalInfoDouble |
symbols_total |
SymbolsTotal (все символы, включая пользовательские и отключенные) |
symbols_get |
SymbolsTotal + SymbolInfo-функции |
symbol_info |
SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString |
symbol_info_tick |
SymbolInfoTick |
symbol_select |
SymbolSelect |
market_book_add |
MarketBookAdd |
market_book_get |
MarketBookGet |
market_book_release |
MarketBookRelease |
copy_rates_from |
CopyRates (по количеству баров, начиная с даты/времени) |
copy_rates_from_pos |
CopyRates (по количеству баров, начиная с номера бара) |
copy_rates_range |
CopyRates (в диапазоне дат/времени) |
copy_ticks_from |
CopyTicks (по количеству тиков, начиная с указанного времени) |
copy_ticks_range |
CopyTicksRange (в указанном временном диапазоне) |
orders_total |
OrdersTotal |
orders_get |
OrdersTotal + OrderGet-функции |
order_calc_margin |
OrderCalcMargin |
order_calc_profit |
OrderCalcProfit |
order_check |
OrderCheck |
order_send |
OrderSend |
positions_total |
PositionsTotal |
positions_get |
PositionsTotal + PositionGet-функции |
history_orders_total |
HistoryOrdersTotal |
history_orders_get |
HistoryOrdersTotal + HistoryOrderGet-функции |
history_deals_total |
HistoryDealsTotal |
history_deals_get |
HistoryDealsTotal + HistoryDealGet-функции |
Функции из API Python имеют несколько особенностей.
Как уже было отмечено, функции могут иметь именованные параметры: при вызове функции такие параметры указываются вместе с именем и значением, в каждой паре имени и значения они объединены знаком равенства '='. Порядок указания именованных параметров неважен (в отличие от позиционных параметров, которые используются в MQL5 и должны следовать в строгом порядке, оговоренном прототипом функции).
Функции Python работают с типами данных, присущими Python. Сюда входят не только привычные числа и строки, но и несколько составных типов, отчасти аналогичных массивам и структурам MQL5.
Так многие функции возвращают специальные структуры данных Python: кортежи (tuple) и именованные кортежи (namedtuple).
Кортеж — это последовательность элементов произвольного типа. Её можно рассматривать как массив, но в отличие от массива, элементы кортежа могут быть разных типов. Также кортеж можно рассматривать как набор полей структуры.
Еще большее сходство со структурой можно найти у именованных кортежей, где каждый элемент получает идентификатор. Если в обычном кортеже для доступа к элементу можно использовать только индекс (в квадратных скобках, как и в MQL5, то есть [i]), то к именованному кортежу мы можем применить оператор разыменования (точку '.'), чтобы получить его "свойство" точно также как в структуре MQL5 (tuple.field).
Кроме того, кортежи и именованные кортежи не могут редактироваться в коде (то есть, являются константами).
Еще одним востребованным типом является словарь — ассоциативный массив, в котором хранятся пары ключ и значение, причем типы того и другого могут варьироваться. Доступ к значению словаря осуществляется с помощью оператора [], а между квадратных скобок указывается ключ (какого бы типа он ни был, например, строка), и в этом плане словари похожи на массивы. В словаре не может быть двух пар с одним и тем же ключом, то есть ключи всегда уникальны. В частности, именованный кортеж легко превратить в словарь с помощью метода namedtuple._asdict().