- Установка Python и пакета MetaTrader5
- Обзор функций пакета MetaTrader5 для Python
- Подключение скрипта Python к терминалу и счету
- Проверка ошибок: last_error
- Получение информации о торговом счете
- Получение информации о терминале
- Получение информации о финансовых инструментах
- Подписка на стакан цен
- Чтение котировок
- Чтение истории тиков
- Вычисление маржинальных требований и оценка прибыли
- Проверка и отправка торгового приказа
- Получение количества и списка действующих ордеров
- Получение количества и списка открытых позиций
- Чтение истории ордеров и сделок
Получение информации о финансовых инструментах
Группа функций пакета MetaTrader5 предоставляет информацию о финансовых инструментах.
Функция symbol_info возвращает информацию об одном финансовом инструменте в виде структуры именованного кортежа.
namedtuple symbol_info(symbol)
Имя интересующего вас финансового инструмента задается в параметре symbol.
За один вызов предоставляется вся информация, которую можно получить с помощью трех функций MQL5 со всеми свойствами: SymbolInfoInteger, SymbolInfoDouble и SymbolInfoString. Названия полей в именованном кортеже совпадают с названиями элементов перечислений, используемых в указанных функциях, но без префикса "SYMBOL_" и в нижнем регистре.
В случае ошибки функция возвращает None.
Внимание! Для успешного выполнения функции запрашиваемый символ должен быть выбран в Обзоре рынка. Это можно сделать из Python с помощью вызова symbol_select (см. далее).
Пример (MQL5/Scripts/MQL5Book/Python/eurjpy.py):
import MetaTrader5 as mt5
|
Результат:
SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session_sell_orders=0, ... EURJPY: spread = 17, digits = 3 Show symbol_info()._asdict(): custom=False chart_mode=0 select=True visible=True ... time=1585069682 digits=3 spread=17 spread_float=True ticks_bookdepth=10 trade_calc_mode=0 trade_mode=4 ... trade_exemode=1 swap_mode=1 swap_rollover3days=3 margin_hedged_use_leg=False expiration_mode=7 filling_mode=1 order_mode=127 order_gtc_mode=0 ... bid=120.024 ask=120.041 last=0.0 ... point=0.001 trade_tick_value=0.8977708350166538 trade_tick_value_profit=0.8977708350166538 trade_tick_value_loss=0.8978272580355541 trade_tick_size=0.001 trade_contract_size=100000.0 ... volume_min=0.01 volume_max=500.0 volume_step=0.01 volume_limit=0.0 swap_long=-0.2 swap_short=-1.2 margin_initial=0.0 margin_maintenance=0.0 margin_hedged=100000.0 ... currency_base=EUR currency_profit=JPY currency_margin=EUR ... |
bool symbol_select(symbol, enable = None)
Функция symbol_select включает указанный символ в Обзор рынка или исключает из него. Символ задается первым параметром. Во втором параметре передается True или False, что означает, соответственно показ или скрытие символа.
Если второй необязательный неименованный параметр опущен, то по правилам приведения типов Python, bool(None) эквивалентно False.
Функция является аналогом SymbolSelect.
int symbols_total()
Функция symbols_total возвращает количество всех инструментов в терминале MetaTrader 5, с учетом пользовательских и не показанных в данный момент в окне Обзор рынка. Аналог функции SymbolsTotal(false).
Следующая функция symbols_get возвращает массив кортежей с информацией о всех инструментах или избранных инструментах с названиями, удовлетворяющими заданному фильтру в необязательном именованном параметре group.
tuple[] symbols_get(group = "PATTERN")
Каждый элемент в кортеже-массиве является именованным кортежем с полным набором свойств по символу (подобный кортеж мы видели выше в контексте описания функции symbol_info).
Поскольку параметр только один, его название при вызове функции можно опускать.
В случае ошибки функция вернет специальное значение None.
Параметр group позволяет выбирать символы по имени, при необходимости используя знак подстановки '*' в начале и/или конце искомой строки. '*' означает 0 или несколько любых символов. Таким образом можно организовать поиск подстроки, которая встречается в имени с произвольным количеством других символов до или после указанного фрагмента. Например, "EUR*" означает символы, начинающиеся на "EUR" и имеющие любое продолжение имени (или просто "EUR"). Фильтр "*EUR*" вернет символы, в имени которых подстрока "EUR" встретится в любом месте.
Также параметр group может содержать несколько условий, разделенных запятыми. Каждое условие можно задавать как маску с использованием '*'. Для исключения инструментов можно использовать знак логического отрицания '!'. При этом все условия применяются последовательно, то есть сначала необходимо указать условия включения, а затем условия исключения. Например, group="*, !*EUR*" означает, что сначала нужно выбрать все символы и затем исключить те из них, что содержат в имени "EUR" (в любом месте).
Например, для вывода информации о кросс-курсах валют за исключением 4-х основных валют Forex, можно выполнить такой запрос:
crosses = mt5.symbols_get(group = "*,!*USD*,!*EUR*,!*JPY*,!*GBP*")
|
Пример результата:
len(*,!*USD*,!*EUR*,!*JPY*,!*GBP*): 10 AUDCAD : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session... AUDCHF : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session... AUDNZD : SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session... CADCHF : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... NZDCAD : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... NZDCHF : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... NZDSGD : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... CADMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... CHFMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... NZDMXN : SymbolInfo(custom=False, chart_mode=0, select=False, visible=False, session_deals=0, session_buy_orders=0, sessi... |
Функция symbol_info_tick позволяет получить последний тик по указанному финансовому инструменту.
tuple symbol_info_tick(symbol)
В единственном обязательном параметре задается имя финансового инструмента.
Информация возвращается в виде кортежа с такими же полями, как в структуре MqlTick. Функция является аналогом SymbolInfoTick.
В случае ошибки возвращается None.
Для нормальной работы функции нужно, чтобы символ был включен в Обзор рынка. Продемонстрируем это в скрипте MQL5/Scripts/MQL5Book/Python/gbpusdtick.py.
import MetaTrader5 as mt5
|
Результат должен быть примерно таким:
Tick(time=1585070338, bid=1.17264, ask=1.17279, last=0.0, volume=0, time_msc=1585070338728, flags=2, volume_real=0.0) Show symbol_info_tick._asdict(): time=1585070338 bid=1.17264 ask=1.17279 last=0.0 volume=0 time_msc=1585070338728 flags=2 volume_real=0.0 |