Как получить сигнал при перечесении двух Moving Average c разными периодами

 

Написал такой код, установил советника, но при пересечении двух мувингов не получил сигнал, подскажите в чем проблема. Прошу не пинать - осваиваю только.

if (iMA(NULL,0,40,0,MODE_EMA,PRICE_CLOSE,0) == iMA(NULL,0,60,0,MODE_EMA,PRICE_CLOSE,0))
  Alert("Есть пересечение");
 
MRDA:

Написал такой код, установил советника, но при пересечении двух мувингов не получил сигнал, подскажите в чем проблема. Прошу не пинать - осваиваю только.


== - вот это "жесть". Мягче нужно задавать условия для сравнения, а то вы вообще сигналов не дождётесь.
 
MRDA:

Написал такой код, установил советника, но при пересечении двух мувингов не получил сигнал, подскажите в чем проблема. Прошу не пинать - осваиваю только.

проблема в том, что вы не читали как правильно работать с вещественными числами https://www.mql5.com/ru/articles/1561

ну а если разберетесь, тогда наверное так: на предыдущем баре инд1 выше ли равно инд2, а на текущем баре инд1 ниже или равно инд2 ИЛИ на предыдущем баре инд1 ниже ли равно инд2, а на текущем баре инд1 выше или равно инд2 --> было пересечение линий

наверноекактотак :)

 
MRDA:

Написал такой код, установил советника, но при пересечении двух мувингов не получил сигнал, подскажите в чем проблема. Прошу не пинать - осваиваю только.


Условие задано не верно. Вы работаетет со значениями на нулевой свече. Ситуация: Цены равны, советник решил, что пересечение есть, открыл позу. На следующем тике ситуация изменилась и равенство цен исчезло. А поза-то открыта. Это всё закончится тем, что Вы будут смотреть на историю своих торгов и недоумевать, почему же советник пооткрывал ордера, если пересечение отсутствует?

Попробуйте получить значения скользящих на второй свече и на первой. Если на второй свече первая скользящая менее или равна второй скользящей и при этом если на первой свече первая скользящая больше второй, то произошло пересечение - скользящая первая пересекла вторую снизу вверх. Для большинства скользящих это сработает. Если копать глубже, то тут на форуме есть целая статья о том, как обрабатывать показания скользящих.

 
Посмотрите вот тут - здесь рассмотрены вопросы не только пересечения скользящих, но и касания
 

Вот пример, открытие совпадает с историей, только к сожалению профита это не принесет ...

https://book.mql4.com/ru/samples/expert

 

Спасибо за науку. Разбираюсь только, вот и первая проблема.

Но только либо не дочитал, либо не понял. Изменил код, но также нет сигнала

MA_TB_13 = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0); //текущий бар
MA_TB_50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //текущий бар
MA_PB_13 = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,1); //предыдущий бар 
MA_PB_50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,1); //предыдущий бар
if ((( MA_TB_13 <= MA_TB_50 ) && (MA_PB_13 >= MA_PB_50)) || (( MA_TB_13 >= MA_TB_50 ) && (MA_PB_13 <= MA_PB_50)))
  Alert(Symbol() + " " + "Есть касание или пересечение");
 
Бальзам на душу...
Ребята, почаще заглядывайте в эту ветку, она придумана специально для вас!
 
При пересечении нужно использовать знаки сравнения больше или меньше. Равно в данном случае не поможет....
Причина обращения: