Обзор функций пакета 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().