Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
![Советники](https://c.mql5.com/i/code/expert.png)
Мастер MQL5 - Торговые сигналы по пересечению линий индикатора Alligator - эксперт для MetaTrader 5
- Просмотров:
- 6163
- Рейтинг:
- Опубликован:
- 2011.01.14 18:35
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В статье Создание эксперта без программирования с помощью Мастера MQL5 описаны шаги по автоматическому созданию кода советника при помощи Мастера MQL5.
Мы рассмотрим стратегию, основанную на пересечении линий технического индикатора Alligator, описанного в книге Б. Вилльямса "Торговый хаос". Эта стратегия включена в стандартную поставку терминала, в Мастере MQL5 она называется "Signals based on the Alligator".
Эта система представляет собой комбинацию трех смещенных скользящих средних (линии Lips, Teeth и Jaw) и осцилляторов, построенных на их основе. Линии индикатора Alligator генерируют сигнал на открытие позиции, когда они пересекаются в одной точке и выходят из нее, расположившись в соответствии со своими периодами.
При движении рынка вверх самой верхней скользящей средней будет средняя с минимальным периодом (линия Lips), затем идет средняя с коротким периодом (линия Teeth) и ниже всех располагается средняя с самым большим периодом (линия Jaw). Аналогичным образом при движении рынка вниз самой нижней будет линия Lips, затем следует линия Teeth, и самой высокой будет линия Jaw.
Основные положения стратегии:
- Открытие длинной позиции: пересечение линий Аллигатора и их расхождение после пересечения при движении вверх;
- Закрытие длинной позиции: линия Lips пересекает линию Jaw снизу вверх;
- Открытие короткой позиции: пересечение линий Аллигатора и их расхождение после пересечения при движении вниз;
- Закрытие короткой позиции: Lips линия пересекает линию Jaw сверху вниз.
Торговая стратегия реализована в классе CSignalAlligator.
Рисунок 1. Торговые сигналы стратегии, торгующей по пересечению линий индикатора Alligator
Торговые сигналы
Модуль с торговыми сигналами по данной стратегии реализован в классе CSignalAlligator, для удобства проверки условий торговли в нем есть несколько защищенных (protected) методов, которые используются для доступа к значениям индикаторов:
double Jaw(int ind) // возвращает значение линии Jaw (челюсть Аллигатора) на заданном баре double Teeth(int ind) // возвращает значение линии Teeth (зубы Аллигатора) на заданном баре double Lips(int ind) // возвращает значение линии Lips (губы Аллигатора) на заданном баре double LipsTeethDiff(int ind) // возвращает разность между линиями Lips и Teeth заданном баре double TeethJawDiff(int ind) // возвращает разность между линиями Teeth и Jaw на заданном баре double LipsJawDiff(int ind) // возвращает разность между линиями Lips и Jaw на заданном баре bool CheckCross(); // используется для проверки факта пересечения линий
1. Открытие длинной позиции
Поскольку индикаторные линии строятся со смещениями (индикаторные линии сдвинуты в будущее), то проверка условий имеет особенности.
Условия открытия длинной позиции:
- При помощи метода CheckCross проверяется факт "расхождения" линий;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) и LipsTeethDiff(-1)>=LipsTeethDiff(0); проверка монотонности "расхождения" между линиями Lips и Teeth;
- LipsTeethDiff(0)>=0.0; линия Lips располагается выше линии Teeth;
- TeethJawDiff(-2) >=TeethJawDiff(-1) и TeethJawDiff(-1) >=TeethJawDiff(0) ; проверка монотонности "расхождения" между линиями Teeth и Jaw;
- TeethJawDiff(0) >=0.0; линия Teeth располагается выше линии Jaw.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для покупки | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. Закрытие длинной позиции
Условия закрытия длинной позиции (см. выше примечание о смещении линий):
- LipsTeethDiff(-1)<0; линия Lips для следующего бара (за счет сдвига) располагается ниже линии Teeth;
- LipsTeethDiff(0)>=0; линия Lips на текущем баре располагается выше или на линии Teeth;
- LipsTeethDiff(1)>0; линия Lips предыдущего (сформированного) бара находится выше линии Teeth.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия длинной позиции | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. Открытие короткой позиции
Условия открытия короткой позиции:
- При помощи метода CheckCross проверяется факт "расхождения" линий;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) и LipsTeethDiff(-1)<=LipsTeethDiff(0); проверка монотонности "расхождения" между линиями Lips и Teeth;
- LipsTeethDiff(0)<=0.0; линия Lips располагается ниже линии Teeth;
- TeethJawDiff(-2)<=TeethJawDiff(-1) и TeethJawDiff(-1)<=TeethJawDiff(0); проверка монотонности "расхождения" между линиями Teeth и Jaw;
- TeethJawDiff(0) <=0.0; линия Teeth располагается ниже линии Jaw;
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для продажи | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. Закрытие короткой позиции
Условия закрытия короткой позиции:
- LipsTeethDiff(-1)>0; линия Lips для следующего бара (за счет сдвига) располагается выше линии Teeth;
- LipsTeethDiff(0)<=0; линия Lips на текущем баре располагается ниже или на линии Teeth;
- LipsTeethDiff(1)<0; линия Lips предыдущего (сформированного) бара находится ниже линии Teeth.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия короткой позиции | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
Создание эксперта на основе торговых сигналов при помощи Мастера MQL5
Чтобы создать торгового робота по данной стратегии при помощи Мастера MQL5, выберите на втором шаге тип сигналов "Signals based on the Alligator":
Рисунок 2. Выбор модуля сигналов, основанный на пересечении линий индикатора Alligator
На последующих шагах укажите нужный тип трейлинга и систему управления капиталом. Код эксперта будет создан автоматически, теперь его нужно скомпилировать и можно приступать к тестированию.
Результаты тестирования
Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
В данном советнике использовался модуль торговли фиксированным объемом 0.1 лота (Trading Fixed Lot), трейлинг не использовался (Trailing not used).
Рисунок 3. Результаты тестирования советника, использующего стратегию пересечения линий индикатора Аллигатор
Результаты торговли советника могут быть значительно улучшены, если в торговой системе учитывать временные особенности рынка. Класс CSignalITF предоставляет функционал по реализации фильтрации сделок по времени. Наиболее удачные времена для торговли можно найти при помощи Тестера стратегий терминала MetaTrader 5.
Пример реализации временного фильтра см. в Мастер MQL5 - Торговые сигналы по пересечению двух EMA с фильтрацией сделок по времени.
Файл SignalAlligator.mqh, содержащий класс торговых сигналов CSignalAlligator нужно скопировать в папку:
каталог_данных_терминала\MQL5\Include\Expert\Signal.
Код советника, созданного Мастером MQL5, прилагается в файле expert_alligator.mq5.
![Профессиональный ZigZag](https://c.mql5.com/i/code/indicator.png)
ZigZag, лишенный большинства недостатков типового.
![Мастер MQL5 - Торговые сигналы по пересечению основной и сигнальной линий индикатора MACD](https://c.mql5.com/i/code/expert.png)
Торговые сигналы по пересечению основной и сигнальной линий индикатора MACD "Signals based on crossover of main and signal MACD lines" (класс CSignalMACD из Стандартной библиотеки).
![sChartsSynchroScroll_v2](https://c.mql5.com/i/code/script.png)
Новая версия скрипта sChartsSynchroScroll.
![Мастер MQL5 - Торговые сигналы по факту формирования Разворотной свечной модели](https://c.mql5.com/i/code/expert.png)
Торговые сигналы по факту формирования "разворотной" свечной модели "Signals based on reversal candlestick patterns".