Поэтому в код необходимо включить файл ExpertSignal.mqh класса CExpertSignal, используя директиву include.
Далее должна присутствовать информация о модуле сигналов, предназначенная для мастера MQL5, которая используется для распознавания модуля сигналов мастером MQL5 при создании эксперта в окне добавления сигналов, а также при генерации самого кода эксперта.
Без этой информации мастер MQL5 просто не добавит сигнал в свой интерфейс, хотя файл сигнала и будет расположен в папке MQL5\Include\Expert\Signal.
После создания модуля сигналов редактор MetaEditor необходимо перезагрузить, чтобы сигнал добавился в мастер MQL5.
Здесь строка Title отображается в списке сигналов окна мастера MQL5, строка Page указывает на раздел справки и должна быть пустой, строки Parameter описывают методы установки параметров сигнала и используются при генерации кода советника.
Далее идет объявление параметров и методов класса модуля сигналов.
Здесь объекты m_ma* представляют скользящие средние, используемые системой Сидуса, параметр m_numberOpenPosition представляет количество баров, на которых будет проверяться пересечение скользящих средних.
Для генерации сигналов определим три модели прогноза цены — пересечение скользящими средними 5WMA и 8 WMA скользящих средних 18 ЕМА и 28 ЕМА, пересечение скользящей средней 5WMA скользящую среднюю 8 WMA, и пересечение скользящей средней 18 ЕМА скользящую среднюю 28 ЕМА.
И здесь метод ValidationSettings проверяет на корректность параметры сигнала, метод InitIndicators инициализирует объекты m_ma*.
Генерируемый эксперт будет получать сигналы модуля с помощью методов CheckOpenLong. CheckOpenShort, CheckCloseLong, CheckCloseShort, CheckReverseLong, CheckReverseShort класса CExpertSignal.
Однако эти методы, в свою очередь, формируют свои возвращаемые значения на основе значений, которые возвращаются методами LongCondition и ShortCondition нашего модуля.
Методы LongCondition и ShortCondition как раз и оперируют моделями прогноза цены.
Потому в модуле сигналов достаточно определить эти два метода.
Далее определим конструктор класса и его методы.
Здесь в методе LongCondition мы реализуем три модели прогноза цены на покупку.
И в методе ShortCondition мы реализуем три модели прогноза цены на продажу.
С помощью мастера MQL5 сгенерируем код эксперта на основе созданного модуля сигналов.
При оптимизации параметров данного эксперта на часовом графике EUR/USD получим, что эксперт лучше всего работает со следующими значениями параметров:
Создание индикатора на основе модулей торговых сигналов эксперта
В качестве примера создадим индикатор на основе двух модулей сигналов SignalMA и SignalMACD, файлы которых находятся в каталоге MQL5\Include\Expert\Signal.
В мастере MQL5 создадим основу индикатора, выбрав вариант Пользовательский индикатор.
Теперь нам нужно указать свойства индикатора, а также определить функции OnInit и OnCalculate.
При создании индикатора на основе модулей торговых сигналов эксперта будем опираться на код сгенерированного с помощью MQL5 эксперта.
При работе такого эксперта, в функции OnTick, вызывается функция OnTick класса CExpert.
В этой функции сначала вызывается функция Refresh, обновляющая цены символа и значения индикаторов, а уже потом вызывается функция Processing, которая получает торговые сигналы и выставляет ордера.
Так как функция Refresh является защищенной, а нам нужно обновлять данные модулей торговых сигналов в нашей функции OnCalculate, создадим свой класс CExpertInd, расширяющий класс CExpert.
Здесь мы просто перенесли код функции Refresh из класса CExpert, сделав функцию Refresh публичной.
Посмотрев на классы CSignalMA и CSignalMACD, мы увидим, что функции LongCondition и ShortCondition, дающие рыночные модели, вызываются на текущем баре.
Нам же нужно вызывать эти функции на всей истории символа.
Кроме того, нам нужна функция BarsCalculated, возвращающая количество рассчитанных значений в модуле сигналов.
Поэтому создадим классы CSignalMAInd и CSignalMACDInd, расширяющие классы CSignalMA и CSignalMACD.
Здесь мы определили функцию BarsCalculated, возвращающую количество рассчитанных значений в модуле сигналов.
И изменили функции LongCondition и ShortCondition, передавая в них в качестве параметра индекс бара, на котором нужно вычислить сигнал.
Тоже самое сделаем и в классе CSignalMACDInd, расширяющем класс CSignalMACD.
Определим функцию BarsCalculated, возвращающую количество рассчитанных значений в модуле сигналов.
И изменим функции LongCondition и ShortCondition, передавая в них в качестве параметра индекс бара, на котором нужно вычислить сигнал.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии