Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное - Тимур Машнин
Шрифт:
Интервал:
Закладка:
Функция OnTick
Как уже было сказано, в функции OnTick, код, как правило, перед вычислениями торговой стратегии начинается с различного рода проверок, хотя некоторые проверки можно выполнить и в функции OnInit.
Информацию о счете клиента можно получить с помощью функций AccountInfoDouble, AccountInfoInteger и AccountInfoString.
В качестве аргумента этих функций указывается идентификатор свойства, значение которого нужно получить.
Для функции AccountInfoInteger это следующие свойства:
— ACCOUNT_LOGIN — функция возвращает номер счета.
— ACCOUNT_TRADE_MODE — функция возвращает тип торгового счета. Функция возвращает 0 для демонстрационного торгового счета, 1 для конкурсного торгового счета, 2 для реального торгового счета.
— ACCOUNT_LEVERAGE — возвращает размер кредитного плеча счета, например, для плеча 1:100, функция вернет 100.
— ACCOUNT_LIMIT_ORDERS — функция возвращает максимальное разрешенное количество отложенных ордеров. Такое ограничение устанавливается брокером, и если ограничений нет, функция возвращает 0.
— ACCOUNT_MARGIN_SO_MODE — в чем задается минимально допустимый уровень залоговых средств, в процентах или в деньгах. Минимально допустимый уровень залоговых средств это уровень залоговых средств, при котором требуется или пополнение счета, или уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции. Минимально допустимый уровень залоговых средств устанавливается брокером и функция возвращает 0, если уровень задается в процентах, и возвращает 1, если уровень задается в деньгах.
— ACCOUNT_TRADE_ALLOWED — функция возвращает 0, если для счета запрещена торговля в случае подключения к счету в режиме инвестора, отсутствия соединения к серверу, запрета торговли на стороне сервера, если счет отправлен в архив. Функция возвращает 1, если торговля на счете разрешена.
— ACCOUNT_TRADE_EXPERT — функция возвращает 0, если брокер запрещает автоматическую торговлю, и возвращает 1, если автоматическая торговля разрешена.
Свойство ACCOUNT_LOGIN может быть использовано для защиты эксперта с помощью его привязки к конкретному счету.
Для этого можно объявить константу, представляющую валидный номер счета и в функции OnInit сравнить ее с текущим счетом.
Значение свойства ACCOUNT_TRADE_MODE можно вывести в виде перечисления, для этого возвращаемое функцией значение нужно привести к перечислению, а затем конвертировать в строку.
Свойство ACCOUNT_TRADE_MODE можно использовать для проверки в функции OnInit () запуска эксперта на реальном счете.
Здесь мы сравниваем значение свойства ACCOUNT_TRADE_MODE с ACCOUNT_TRADE_MODE_REAL.
И открываем диалоговое окно для пользователя.
При этом отобразится диалоговое окно, которое при выборе кнопки Да позволит дальнейшее выполнение кода.
Свойство ACCOUNT_LIMIT_ORDERS может быть использовано для проверки и установки максимального количества отложенных ордеров.
Здесь мы получаем общее количество отложенных ордеров с помощью функции OrdersTotal.
Затем с помощью свойства ACCOUNT_LIMIT_ORDERS получаем максимальное разрешенное количество отложенных ордеров.
И устанавливаем значение максимального количества отложенных ордеров.
Далее мы сравниваем общее количество отложенных ордеров с максимальным количеством отложенных ордеров.
Теперь объявим входной параметр — максимальное количество ордеров, и вызовем определенную нами функцию.
Проверку свойств ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT можно организовать в функции OnInit.
Здесь мы с помощью свойства TERMINAL_CONNECTED проверяем соединение с сервером брокера.
Затем с помощью свойства ACCOUNT_TRADE_ALLOWED проверяем возможность торговли для данного счета.
И с помощью свойства ACCOUNT_TRADE_EXPERT проверяем возможность автоматической торговли.
Дополнительно отдельно проверку соединения с сервером можно сделать в функции OnTick.
Для функции AccountInfoDouble определены следующие свойства.
ACCOUNT_BALANCE — баланс счета. Соответствует значению Баланс вкладке Торговля клиентского терминала.
ACCOUNT_CREDIT — размер предоставленного кредита. Типичная ситуация, когда это значение равно 0.
ACCOUNT_PROFIT — размер текущей прибыли на счете. Соответствует столбцу Прибыль во вкладке Торговля клиентского терминала.
ACCOUNT_EQUITY — значение собственных средств на счете. Соответствует значению Средства вкладке Торговля клиентского терминала.
ACCOUNT_MARGIN — размер зарезервированных залоговых средств на счете. Соответствует значению Маржа вкладке Торговля клиентского терминала. Если открытых позиций нет, это значение равно 0.
ACCOUNT_MARGIN_FREE — размер свободных средств на счете, доступных для открытия позиции. Соответствует значению Свободная маржа вкладке Торговля клиентского терминала.
ACCOUNT_MARGIN_LEVEL — уровень залоговых средств на счете в процентах. Соответствует значению Уровень маржи вкладке Торговля клиентского терминала. Рассчитывается как Средства/Маржа*100 %. Если открытых позиций нет, это значение равно 0.
ACCOUNT_MARGIN_SO_CALL — уровень залоговых средств, при котором требуется пополнение счета (Margin Call).
В зависимости от установленного ACCOUNT_MARGIN_SO_MODE выражается в процентах либо в валюте депозита.
Margin Call это скорее информационный сигнал для трейдера, что его счет близок к закрытию, и не сопровождается действиями брокера.
Последствия наступают в случае возникновения Stop Out.
Например, при ACCOUNT_MARGIN_SO_CALL = 50 %, событие Margin Call наступит, когда размер средств на счете станет как половина от маржи.
ACCOUNT_MARGIN_SO_SO — уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out).
В зависимости от установленного ACCOUNT_MARGIN_SO_MODE выражается в процентах либо в валюте депозита.
Например, при ACCOUNT_MARGIN_SO_SO = 10 %, событие Stop Out наступит, когда размер средств на счете будет 10 % от маржи, при этом открытые позиции начнут принудительно закрываться брокером.
Другие свойства функции AccountInfoDouble.
ACCOUNT_MARGIN_INITIAL — размер средств, зарезервированных на счёте, для обеспечения гарантийной суммы по всем отложенным ордерам.
Как правило, эта величина равна 0.
ACCOUNT_MARGIN_MAINTENANCE — размер средств, зарезервированных на счёте, для обеспечения минимальной суммы по всем открытым позициям.
Как правило, эта величина равна 0.
ACCOUNT_ASSETS — текущий размер активов на счёте.
Как правило, эта величина равна 0.
ACCOUNT_LIABILITIES — текущий размер обязательств на счёте.
Как правило, эта величина равна 0.
ACCOUNT_COMMISSION_BLOCKED — текущая сумма заблокированных комиссий по счёту.
Как правило, эта величина равна 0.
С помощью свойств функции AccountInfoDouble можно организовать различного рода проверки в функции OnTick эксперта.
Например, наступление события Margin Call.
Здесь мы сравниваем значение свойства ACCOUNT_MARGIN_SO_CALL с размером средств на счете.
При проверке наступления события Stop Out, мы сравниваем значение свойства ACCOUNT_MARGIN_SO_SO с размером средств на счете.
Также можно организовать проверку размера свободных средств на счете, доступных для открытия позиции.
Здесь MqlTick это стандартная структура для хранения цен, которая заполняется значениями с помощью функции SymbolInfoTick.
Вызов