Создание экспертов

В этой главе мы начинаем изучение торгового API MQL5, используемого для реализации экспертов (советников). Данный тип программ является, пожалуй, наиболее сложным и требовательным в плане безошибочности кодирования и широты перечня задействованных технологий. В частности, нам потребуются многие навыки, полученные в процессе знакомства с материалами предыдущих глав, начиная от ООП и заканчивая прикладными аспектами работы с графическими объектами, индикаторами, символами и настройками программной среды.

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

  • скорости принятия решения и отправки приказов (для HFT — High Frequency Trading),
  • подбору оптимальной корзины инструментов на основе их корреляций и волатильности (для кластерной торговли),
  • динамическому расчету лотов и дистанции между ордерами (для мартингейла и сеточных стратегий),
  • анализу новостей или внешних источников данных (об этом речь пойдет в 7-ой части книги).

Все подобные особенности должны будут оптимальным образом накладываться разработчиком на описываемые торговые механизмы, предоставляемые MQL5 API.

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

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

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

В экспертах, также как и в индикаторах, работают Опорные события OnInit и OnDeinit — они не являются обязательными, но, как правило, присутствуют в коде для подготовки и штатного завершения работы программы: мы ими пользовались и еще будем пользоваться в примерах. В отдельном разделе был приведен Обзор всех функций обработки событий: некоторые из них мы к данному моменту уже подробно изучили (например, события индикаторов OnCalculate или таймера OnTimer), а события, характерные только для экспертов (OnTick, OnTrade, OnTradeTransaction), будут описаны в этой главе.

В качестве торговых сигналов эксперты могут использовать самый широкий спектр исходных данных: котировки, тики, стакан цен, торговую историю счета или показания индикаторов — в последнем случае принципы создания экземпляров индикаторов и чтение значений из их буферов ничем не отличаются от тех, что были рассмотрены в главе Использование готовых индикаторов из MQL-программ. В примерах экспертов в следующих разделах мы продемонстрируем большинство из этих приемов.

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