- Получение списков доступных символов и Обзора рынка
- Редактирование списка Обзора рынка
- Проверка символа на существование
- Проверка актуальности данных по символу
- Получение последнего тика по символу
- Расписания торговых и котировочных сессий
- Маржинальные коэффициенты по символу
- Обзор функций получения свойств символа
- Проверка состояния символа
- Тип цены для построения графиков по символу
- Базовая, котировочная и маржинальная валюты инструмента
- Точность представления и шаг изменения цен
- Разрешенные объемы торговых операций
- Разрешения на торговлю
- Торговые условия и режимы исполнения приказов по символу
- Маржинальные требования
- Правила истечения сроков отложенных ордеров
- Спреды и отступы приказов от текущей цены
- Получение величины свопов
- Текущая рыночная информация (тик)
- Описательные свойства символов
- Глубина стакана цен
- Свойства пользовательских символов
- Специфические свойства (биржа, срочный рынок, облигации)
Разрешенные объемы торговых операций
В следующих главах, посвященных программированию торговых советников, нам потребуется контролировать множество характеристик символов, от которых зависит успех отправки торговых приказов. В частности, это относится к той части спецификации символа, где оговариваются разрешенные объемы операций. Соответствующие свойства доступны и в MQL5. Все они имеют тип double и запрашиваются функцией SymbolInfoDouble.
Идентификатор |
Описание |
---|---|
SYMBOL_VOLUME_MIN |
Минимальный объем сделки в лотах |
SYMBOL_VOLUME_MAX |
Максимальный объем сделки в лотах |
SYMBOL_VOLUME_STEP |
Минимальный шаг изменения объема сделки в лотах |
SYMBOL_VOLUME_LIMIT |
Максимально допустимый совокупный объем открытой позиции и отложенных ордеров в одном направлении (покупка или продажа) |
SYMBOL_TRADE_CONTRACT_SIZE |
Размер торгового контракта = 1 лот |
Попытки купить или продать финансовый инструмент объемом меньше минимального, больше максимального или не кратным шагу приведут к ошибке. В главе про торговые API мы реализуем код для унификации необходимых проверок и нормализации объемов перед вызовом торговых функций MQL5 API.
Кроме всего прочего MQL-программе следует проверять и SYMBOL_VOLUME_LIMIT. Например, при ограничении в 5 лотов можно иметь открытую позицию на покупку объемом 5 лотов и выставить отложенный ордер Sell Limit объемом 5 лотов. Но при этом нельзя выставить отложенный ордер Buy Limit (поскольку совокупный объем в одном направлении превысит ограничение) или выставить Sell Limit объемом более 5 лотов.
В качестве вводного примера рассмотрим скрипт SymbolFilterVolumes.mq5, который выводит в журнал значения вышеперечисленных свойств для выбранных символов. Во входные параметры добавим переменную MinimalContractSize, чтобы можно было фильтровать символы по свойству SYMBOL_TRADE_CONTRACT_SIZE: выводим только те, у которых размер контракта больше указанного (по умолчанию, 0, то есть все символы удовлетворяют условию).
#include <MQL5Book/SymbolFilter.mqh>
|
В начале OnStart определим объект фильтра, выходные массивы для получения списков имен и значений свойств в виде векторов double на 4 поля. Перечень интересующих нас 4-х свойств указываем в массиве volumeIds.
void OnStart()
|
Далее применяем фильтр по размеру контракта (должен быть больше указанного) и получаем поля спецификации, связанные с объемами, для подошедших символов.
f.let(SYMBOL_TRADE_CONTRACT_SIZE, MinimalContractSize, SymbolFilter::IS::GREATER)
|
Для настроек по умолчанию скрипт может показать примерно следующие результаты (с сокращениями).
===== Volume limits of the symbols (13) =====
|
Некоторые символы могут не иметь ограничений по SYMBOL_VOLUME_LIMIT (значение равно 0). Вы можете сравнить результаты со спецификациями символов: они должны совпасть.