Новая статья: Универсальный торговый эксперт: Пользовательские стратегии и вспомогательные торговые классы (Часть 3)

 

На mql5.com опубликована статья Универсальный торговый эксперт: Пользовательские стратегии и вспомогательные торговые классы (Часть 3):

В этой статье мы продолжим описание алгоритмов торгового движка CStrategy. В третьей части серии статей подробно разобраны примеры написания конкретных торговых стратегий с использованием данного подхода. Также большое внимание уделено вспомогательным алгоритмам — системе логирования эксперта и доступу к биржевым данным с помощью обычного индексатора (Close[1], Open[0] и т.п.).

В данной части серии статей продолжается знакомство с торговым движком CStrategy. Напомним краткое содержимое ее предыдущих частей. В первой части "Универсальный торговый эксперт: Торговые режимы стратегий" подробно разбирались торговые режимы, благодаря которым можно гибко конфигурировать логику работы своего эксперта в зависимости от времени и дня недели. Во второй статье "Универсальный торговый эксперт: Cобытийная модель и прототип торговой стратегии" мы подробно рассмотрели событийную модель на основе централизованной обработки событий, а также основные алгоритмы базового класса CStrategy, лежащего в основе пользовательского эксперта.

В третьей части серии мы подробно опишем примеры советников на основе торгового движка CStrategy, а также некоторые вспомогательные алгоритмы, которые могут понадобиться для разработки советника. Особое внимание уделяется процедуре логирования. В самом деле, логирование, несмотря на свою сугубо вспомогательную функцию, очень важный элемент любой более-менее сложной системы. С хорошим логировщиком можно быстро понять причины неисправности и найти место, в котором эта неисправность произошла. Данный логировщик написан с помощью специального приема программирования, называемого паттерн "Одиночка" (Singleton). Его рассмотрение будет интересным для тех, кто интересуется не только организацией торгового процесса, но и созданием алгоритмов для решения нестандартных задач.

Также в этой статье описываются алгоритмы, которые позволяют обращаться к рыночным данным через удобные и интуитивно понятные индексы. Действительно, работать с данными через индексы вроде Close[1] или High[0] — это многими любимая особенность работы в MetaTrader 4. Так зачем отказываться от нее, если ее точно так же можно использовать в MetaTrader 5? Эта статья объясняет, как это сделать, и подробно описывает алгоритмы, которые это реализуют.


Методы, которые необходимо переопределить пользовательскому эксперту

В первой статье "Универсальный торговый эксперт: Торговые режимы стратегий" мы подробно рассмотрели торговые режимы стратегии и ее основные методы, которые необходимо переопределить. Теперь настало время заняться практикой.

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

Виртуальный метод Событие/действие Назначение
OnSymbolChanged Вызывается при изменении названия торгового символа В случае смены торгового инструмента индикаторы эксперта необходимо переинициализировать. Данное событие позволяет выполнить переинициализацию индикаторов эксперта.
OnTimeframeChanged Смена рабочего таймфрейма В случае смены рабочего таймфрейма индикаторы эксперта необходимо переинициализировать. Данное событие позволяет выполнить переинициализацию индикаторов эксперта.
ParseXmlParams Парсинг пользовательских параметров стратегии, загруженных через XML-файл Стратегии необходимо самостоятельно распознать XML-параметры, переданные в данный метод, и сконфигурировать свои настройки соответствующим образом.
ExpertNameFull Возвращает полное имя эксперта Полное имя эксперта состоит из названия стратегии и, как правило, уникального набора параметров самой стратегии. Экземпляр стратегии должен самостоятельно определить для себя полное имя. Это имя также используется в визуальной панели, в раскрывающем списке Agent.
OnTradeTransaction Возникает в случае возникновения торгового события Некоторым стратегиям для своей работы необходимо анализировать торговые события. Это событие позволяет передать конечному эксперту торговое событие и проанализировать его.
InitBuy Инициирует покупку Один из основных методов, который необходимо переопределить. В данном методе необходимо совершить покупку, если сформировались подходящие торговые условия для нее.
InitSell Инициирует продажу Один из основных методов, который необходимо переопределить. В данном методе необходимо совершить продажу, если сформировались подходящие торговые условия для нее.
SupportBuy Сопровождает ранее открытую длинную позицию Ранее открытую длинную позицию необходимо сопроводить. Например, поставить для нее защитную остановку Stop Loss или закрыть позицию в случае возникновения сигнала на выход из позиции. Все эти действия необходимо выполнить в данном методе.
SupportSell Сопровождает ранее открытую короткую позицию Ранее открытую короткую позицию необходимо сопроводить. Например, поставить для нее защитную остановку Stop Loss или закрыть позицию в случае возникновения сигнала на выход из позиции. Все эти действия необходимо выполнить в данном методе.

 Таблица 1. Виртуальные методы и их назначение

Наиболее важные методы, которые необходимо переопределить, это InitBuy, InitSell, SupportBuy и SupportSell. В таблице они выделены жирным шрифтом. Если, например, забыть переопределить метод InitBuy, то пользовательская стратегия не будет совершать покупок. Если не переопределить один из Support методов, то открытая позиция может быть никогда не закрыта. Поэтому при создании эксперта крайне внимательно относитесь к переопределению этих методов.

Автор: Vasiliy Sokolov