Определить пересечение двух средних

 

Здравсвтуйте!

Написал в функции такой код

double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);
Alert("Prosto long1 = ",dLongMA1, "long 2 = ", dLongMA2, "long3 = ", dLongMA1_1, "long4 = ", dLongMA2_2);

Запускаю тестирование.

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

Файлы:
forum.txt  5 kb
 
Могу сделать чтобы всякий раз после пересечения средних звучала сигнальная мелодия, но не бесплатно
 
GreenDo:

Здравсвтуйте!

Написал в функции такой код

double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);
Alert("Prosto long1 = ",dLongMA1, "long 2 = ", dLongMA2, "long3 = ", dLongMA1_1, "long4 = ", dLongMA2_2);

Запускаю тестирование.

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


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

double MA1_1 = iMA(Symbol(), trend_period, Period_MA1, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA1_2 = iMA(Symbol(), trend_period, Period_MA1, 0, MODE_EMA, PRICE_CLOSE, 2);
double MA2_1 = iMA(Symbol(), trend_period, Period_MA2, 0, MODE_EMA, PRICE_CLOSE, 1);
double MA2_2 = iMA(Symbol(), trend_period, Period_MA2, 0, MODE_EMA, PRICE_CLOSE, 2);


//--------------------------------------------------------------- 5 --
   // Вычисление торговых критериев
  
   if (MA2_2 - MA1_2 > 0 && MA1_1 - MA2_1 > 0)
        
         return(10);                      // Открытие Buy    
      
      
   if (MA1_2 - MA2_2 > 0 && MA2_1 - MA1_1 > 0)
   
        return(20);                      // Открытие Sell 
 
GreenDo:

double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);


Вы осознано пытаетесь смотреть пересечение на нулевом баре? Цена Close[0] - это текущая цена, которая постоянно меняется, соответственно машка учитывающая ее будет постоянно меняться. Быстрая машка может пересечеть медленную потом вернуться обратно, и так почти бесконечное количество раз. Мне сложно придумать практическое применение такому пересечению....

И еще у Вас в коде:

      // для коротких позиций
       
      double dShortMA1 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
      double dShortMA2 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
      double dShortMA1_1 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
      double dShortMA2_2 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
Ошибка с указанием периода мне кажется...
 

double Check2MAsCrossingDirection(int PFast, int PSlow, int bn)
{
double dMA[] = {0,0};
    dMA[0] = iMA(Symbol(), trend_period, PFast, 0, MODE_EMA, PRICE_CLOSE, bn) - 
             iMA(Symbol(), trend_period, PSlow, 0, MODE_EMA, PRICE_CLOSE, bn);
int  k = bn+1;
    dMA[1] = iMA(Symbol(), trend_period, PFast, 0, MODE_EMA, PRICE_CLOSE, k) - 
             iMA(Symbol(), trend_period, PSlow, 0, MODE_EMA, PRICE_CLOSE, k);
    if(dMA[0]*dMA[1]<0) 
        return(dMA[0]);
    return(0);
}
можно так, например.
 
Владислав, а не напишете в FAQ (в Субботник) ответ на очень распространенный вопрос "Как описать пересечение МА?". Может, еще что-нибудь приметили из повторяющихся наиболее часто?
 
granit77:
Владислав, а не напишете в FAQ (в Субботник) ответ на очень распространенный вопрос "Как описать пересечение МА?". Может, еще что-нибудь приметили из повторяющихся наиболее часто?
Запросто - будет время посмотрю. Этот вариант, в принципе, можно брать за основу для определения пересечания - я бы для универсальности еще порог добавил ....
 
VladislavVG:
Запросто - будет время посмотрю. Этот вариант, в принципе, можно брать за основу для определения пересечания - я бы для универсальтности еще порог добавил ....
Это радует, а то уже снится это пересечение. :))
 
granit77:
Это радует, а то уже снится это пересечение. :))

Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12

 
VladislavVG:

Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12

Спасибо! Уже в основном FAQ'е. Давайте еще!
Причина обращения: