Читаем Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное полностью

Таким образом, глобальные переменные клиентского терминала это средство коммуникации между разными MQL5-приложениями.

Как правило, глобальные переменные клиентского терминала создаются экспертами для проверки на истечение временного лимита для предыдущей сделки.

Сами по себе глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.

При тестировании эксперта глобальные переменные клиентского терминала эмулируются, и они никак не связаны с настоящими глобальными переменными терминала.

Все операции с глобальными переменными терминала при тестировании эксперта производятся вне клиентского терминала в агенте тестирования.

Принудительно глобальные переменные клиентского терминала можно уничтожить с помощью вызова функции GlobalVariableDel или GlobalVariablesDeleteAll.

В функции OnTick эксперта сначала производится проверка возможности торговли на данном счете, достаточности средств на счете, достаточности загруженной ценовой истории для расчетов торговой стратегии.

Затем устанавливаются временные фильтры для совершения торговых операций, проверяется наличие открытых позиций, производятся вычисления торговой стратегии и на основании ее сигналов открываются или закрываются позиции или выставляются отложенные ордера.

Функция OnTimer позволяет создать альтернативную модель эксперта, который будет производить вычисления торговой стратегии не при наступлении нового тика в функции OnTick, а через определенные функцией EventSetTimer промежутки времени.

При этом в функции OnDeinit эксперта нужно удалить таймер с помощью вызова функции EventKillTimer.

Функция OnTrade позволяет обработать завершение торговой операции.

Торговая операция это не только открытие или закрытие позиции, это также установка, модификация или удаление отложенного ордера, отмена отложенного ордера при нехватке средств либо по истечении срока действия, срабатывание отложенного ордера, модификация открытой позиции.

Например, функцию OnTrade можно использовать для временного ограничения торговли при срабатывании Stop Loss.

Изменение состояния торгового счета происходит в результате серии транзакций, например, создание ордера, исполнение ордера, удаление ордера из списка открытых, добавление в историю ордеров, добавление сделки в историю, создание новой позиции.

Каждая такая транзакция сопровождается вызовом функции OnTradeTransaction, в которой можно обрабатывать выполнение транзакции.

В частности, в функции OnTradeTransaction можно обрабатывать результат исполнения торгового запроса на сервере, отправленного функцией OrderSendAsync.

При тестировании эксперта в режиме тестирования с использованием генетического алгоритма производится подбор наилучшей комбинации входных параметров эксперта по критерию оптимизации.

Изначально тестер предлагает набор предопределенных критериев оптимизации, таких как максимальный баланс счета, баланс + максимальная прибыльность, баланс + минимальная просадка и другие.

Функция OnTester позволяет определить свой критерий оптимизации, так как при оптимизации тестер всегда ищет локальный максимум возвращаемого значения функции OnTester, которая автоматически вызывается после окончания очередного прохода тестирования эксперта на заданном интервале дат.

Для использования функции OnTester в тестере выбирается критерий оптимизации Максимум пользовательского критерия.

Функции OnTesterInit (), OnTesterPass (), OnTesterDeinit () позволяют организовать динамическую обработку результатов оптимизации параметров эксперта в тестере при каждом проходе оптимизации.

Функция OnBookEvent позволяет разработать советник или индикатор, использующий торговую стратегию, которая основана на стакане цен, если конечно дилинговый центр предоставляет такую возможность.

Функция OnChartEvent, так же как и функция OnTimer, позволяет создать альтернативную модель эксперта, который будет производить вычисления торговой стратегии не при наступлении нового тика в функции OnTick, а при получении событий от индикаторов, прикрепленных к графику символа.

<p>Функция OnTick</p>

Как уже было сказано, в функции OnTick, код, как правило, перед вычислениями торговой стратегии начинается с различного рода проверок, хотя некоторые проверки можно выполнить и в функции OnInit.

Информацию о счете клиента можно получить с помощью функций AccountInfoDouble, AccountInfoInteger и AccountInfoString.

В качестве аргумента этих функций указывается идентификатор свойства, значение которого нужно получить.

Для функции AccountInfoInteger это следующие свойства:

— ACCOUNT_LOGIN — функция возвращает номер счета.

— ACCOUNT_TRADE_MODE — функция возвращает тип торгового счета. Функция возвращает 0 для демонстрационного торгового счета, 1 для конкурсного торгового счета, 2 для реального торгового счета.

— ACCOUNT_LEVERAGE — возвращает размер кредитного плеча счета, например, для плеча 1:100, функция вернет 100.

Перейти на страницу:

Похожие книги