Пересечение двух МА

 

Прошу помочь с вопросом, как правильно в индикаторе  прописать момент пересечения двух МА с разным периодом. Важно именно определить в индикаторе появление алерта в момент соприкосновения двух МА на текущем баре.


double imaCurrent60 = NormalizeDouble(iMA (NULL, 0, MA_Period60, 0, MODE_EMA, PRICE_CLOSE, 0),5);

double imaPrevious60 = NormalizeDouble(iMA (NULL, 0, MA_Period60, 0, MODE_EMA, PRICE_CLOSE, 1),5);

double imaCurrent14 = NormalizeDouble(iMA (NULL, 0, MA_Period14, 0, MODE_EMA, PRICE_CLOSE, 0),5);

double imaPrevious14 = NormalizeDouble(iMA (NULL, 0, MA_Period14, 0, MODE_EMA, PRICE_CLOSE, 1),5);


   if (imaCurrent60 <= imaCurrent14 && imaPrevious60 >= imaPrevious14)

// Да, есть сигнал на покупку

{

string  messageBuy =  StringConcatenate("Envelop (", Symbol(), ", ", Period(), ")  -  BUY!!!","-"  ,TimeToStr(TimeLocal(),TIME_SECONDS));

Alert(messageBuy);

return(BUY);}

// есть сигнал на продажу - выход за пределы верхнего канала

if (imaCurrent60 >= imaCurrent14 && imaPrevious60 <= imaPrevious14)

// Да, есть сигнал на продажу

{

string  messageSell =  StringConcatenate("Envelop (", Symbol(), ", ", Period(), ")  -  SELL!!!","-"  ,TimeToStr(TimeLocal(),TIME_SECONDS));

Alert(messageSell);

return(SELL);}

// Сигнала нет


может есть другие варианты

Документация по MQL5: Строковые функции / StringConcatenate
Документация по MQL5: Строковые функции / StringConcatenate
  • www.mql5.com
StringConcatenate - Строковые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sportoman:

Прошу помочь с вопросом, как правильно в индикаторе  прописать момент пересечения двух МА с разным периодом. Важно именно определить в индикаторе появление алерта в момент соприкосновения двух МА на текущем баре.


double imaCurrent60 = NormalizeDouble(iMA (NULL, 0, MA_Period60, 0, MODE_EMA, PRICE_CLOSE, 0),5);

double imaPrevious60 = NormalizeDouble(iMA (NULL, 0, MA_Period60, 0, MODE_EMA, PRICE_CLOSE, 1),5);

double imaCurrent14 = NormalizeDouble(iMA (NULL, 0, MA_Period14, 0, MODE_EMA, PRICE_CLOSE, 0),5);

double imaPrevious14 = NormalizeDouble(iMA (NULL, 0, MA_Period14, 0, MODE_EMA, PRICE_CLOSE, 1),5);


   if (imaCurrent60 <= imaCurrent14 && imaPrevious60 >= imaPrevious14)

// Да, есть сигнал на покупку

{

string  messageBuy =  StringConcatenate("Envelop (", Symbol(), ", ", Period(), ")  -  BUY!!!","-"  ,TimeToStr(TimeLocal(),TIME_SECONDS));

Alert(messageBuy);

return(BUY);}

// есть сигнал на продажу - выход за пределы верхнего канала

if (imaCurrent60 >= imaCurrent14 && imaPrevious60 <= imaPrevious14)

// Да, есть сигнал на продажу

{

string  messageSell =  StringConcatenate("Envelop (", Symbol(), ", ", Period(), ")  -  SELL!!!","-"  ,TimeToStr(TimeLocal(),TIME_SECONDS));

Alert(messageSell);

return(SELL);}

// Сигнала нет


может есть другие варианты

других вариантов - не брать 0-й бар для цен Close :-)

то есть считать для баров 1,2 а не 0,1 как у вас

---

0-й бар это текущий, незакрытый, там цена Close постоянно меняется и "пересечений" MA вверх/вниз может быть много-много.

ещё нюанс, о котором мало знают, а кто знает старается не вспоминать : в момент когда бар закрывается/открывается, новые цены close[1] и open[0] могут быть не равны предыдущему close[0]..

 
Maxim Kuznetsov #:

других вариантов - не брать 0-й бар для цен Close :-)

то есть считать для баров 1,2 а не 0,1 как у вас

---

0-й бар это текущий, незакрытый, там цена Close постоянно меняется и "пересечений" MA вверх/вниз может быть много-много.

ещё нюанс, о котором мало знают, а кто знает старается не вспоминать : в момент когда бар закрывается/открывается, новые цены close[1] и open[0] могут быть не равны предыдущему close[0]..

Важно именно на текущей свече  сигнал получать

 
sportoman #:

Важно именно на текущей свече  сигнал получать

на текущей свече невозможно получить значение её конечного Close - будущее не определено

но можете спуститься таймфреймом ниже и там поиграть с MA и прочими, с какой-то вероятностью