Многие торговые стратегии основаны на пересечении индикаторов. К примеру, пересечение быстрой и медленной скользящей средней: сигнал на вход срабатывает, когда быстрая МА пересекает медленную МА. Если вы хотите создать свой собственный советник, важно научиться обнаруживать пересечение индикаторов с помощью MQL. В этой статье мы рассмотрим, как это можно сделать.
Посмотрим на несколько примеров пересечения индикаторов, чтобы у вас было лучшее представление о том, как это можно использовать:
Пересечение скользящих средних:
Пересечение главной и сигнальной линии стохастика:
Пересечение линий индикатора MACD:
Неважно, какой индикатор мы будем использовать. Всегда есть две закономерности:
Линия 2 пересекает линию 1 снизу вверх:
Линия 2 пересекает линию 1 сверху вниз:
Чтобы запрограммировать на MQL пересечение, нам нужно определить его математически. Мы можем получить значения линии 1 и линии 2 в определенные моменты времени и далее сравнить эти значения.
Мы определяем:
- I1 (t1) как значение линии 1 в момент времени t1.
- I1 (t2) как значение линии 1 в момент t2.
- I2 (t1) как значение линии 2 в момент времени t1.
- I2 (t2) как значение линии 2 в момент времени t2.
Имея эти значения, мы можем установить правила для пересечения.
Линия 2 пересекает линию 1 снизу, если I2 (t1) меньше I1 (t1), а I2 (t2) больше I1 (t2):
Линия 2 пересекает линию 1 сверху, если I2 (t1) больше I1 (t1) и I2 (t2) меньше I1 (t2):
Рассмотрим пример MQL4 кода, который обнаруживает пересечение быстрой скользящей средней и медленной скользящей средней:
//Определяем две переменные, которые будут являться истинными в случае пересечения. bool CrossToBuy=false; bool CrossToSell=false; //Определим периоды индикатора. int MASlowPeriod=50; int MAFastPeriod=10; //Напишем функцию для проверки на пересечение. void CheckMACross(){ CrossToBuy=false; CrossToSell=false; //iMA - функция для получения значения индикатора скользящей средней. //MASlowCurr - значение медленной скользящей средней на текущей свече. double MASlowCurr=iMA(Symbol(),0,MASlowPeriod,0,MODE_SMA,PRICE_CLOSE,0); //MASlowPrev - значение медленной скользящей средней на последней закрытой свече. double MASlowPrev=iMA(Symbol(),0,MASlowPeriod,0,MODE_SMA,PRICE_CLOSE,1); //MAFastCurr - значение быстрой скользящей средней на текущей свече. double MAFastCurr=iMA(Symbol(),0,MAFastPeriod,0,MODE_SMA,PRICE_CLOSE,0); //MAFastPrev - значение быстрой скользящей средней на последней закрытой свече. double MAFastPrev=iMA(Symbol(),0,MAFastPeriod,0,MODE_SMA,PRICE_CLOSE,1); //Далее мы сравниваем значения и определяем, произошло ли одно из пересечений. if(MASlowPrev>MAFastPrev && MASlowCurr<MAFastCurr){ CrossToBuy=true; } if(MASlowPrev<MAFastPrev && MASlowCurr>MAFastCurr){ CrossToSell=true; }
Приведенный выше код может быть адаптирован к любым советникам, индикаторам и скриптам для определения пересечения.