Как определить момент пересечения линий графиков в MetaTrader?

 
Подскажите пожалуйста как определить момент пересечения линий графиков в MetaTrader? Ведь оно может произойти между тиками...
Заранее благодарен.
 
maag:
Подскажите пожалуйста как определить момент пересечения линий графиков в MetaTrader? Ведь оно может произойти между тиками...
Заранее благодарен.

Просто. Если вычисленные значения индикаторов в какой то момент равны, то это и есть пересечение.
 

Пример определения пересечения двух мувингов

//---- возьмём значения мувингов
   Ma8Current=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,0);
   Ma8Previous=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,1);
   Ma8Previous2=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,2);
   Ma13Current=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,0);
   Ma13Previous=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,1);
   Ma13Previous2=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,2);
//---- и проверим условие пересечения
   IsCrossDown=(Ma8Current<Ma13Current && Ma8Previous>=Ma13Previous && Ma8Previous2>Ma13Previous2);
   IsCrossUp  =(Ma8Current>Ma13Current && Ma8Previous<=Ma13Previous && Ma8Previous2<Ma13Previous2);
 
stringo:

Пример определения пересечения двух мувингов

//---- возьмём значения мувингов
   Ma8Current=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,0);
   Ma8Previous=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,1);
   Ma8Previous2=iMA(NULL,0,ExtPeriod1,0,MODE_EMA,PRICE_CLOSE,2);
   Ma13Current=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,0);
   Ma13Previous=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,1);
   Ma13Previous2=iMA(NULL,0,ExtPeriod2,0,MODE_EMA,PRICE_CLOSE,2);
//---- и проверим условие пересечения
   IsCrossDown=(Ma8Current<Ma13Current && Ma8Previous>=Ma13Previous && Ma8Previous2>Ma13Previous2);
   IsCrossUp  =(Ma8Current>Ma13Current && Ma8Previous<=Ma13Previous && Ma8Previous2<Ma13Previous2);


Спасибо! Но этот способ не работает в случае если Tenkan и Kijun в Ишимоку сошлись и идут некоторое время параллельно или +DM и -DM в ADX пересекаются по типу xx. Проблема в том, как определить момент пересечения дискретных графиков...
 
int IsMACross( int bar, int period1, int period2, int luft = 0 )
{
    double ma1 = iMA( Symbol(), Period(), period1, 0, MODE_EMA, PRICE_CLOSE, bar );
    double ma2 = iMA( Symbol(), Period(), period2, 0, MODE_EMA, PRICE_CLOSE, bar );
 
    int i;
    if ( NormalizeDouble( ma1 - ma2 - luft*_Point, _Digits ) >= 0.0 )
    {
        for ( i = bar + 1; i < Bars - 1; i ++ )
        {
            ma1 = iMA( Symbol(), Period(), period1, 0, MODE_EMA, PRICE_CLOSE, i );
            ma2 = iMA( Symbol(), Period(), period2, 0, MODE_EMA, PRICE_CLOSE, i );
            if ( NormalizeDouble( ma1 - ma2 - luft*_Point, _Digits ) >= 0.0 ) { return(0); }
            if ( NormalizeDouble( ma2 - ma1, _Digits ) >= 0.0 )
            {
                return(1);
            }
        }
    }
    if ( NormalizeDouble( ma2 - ma1 - luft*_Point, _Digits ) >= 0.0 )
    {
        for ( i = bar + 1; i < Bars - 1; i ++ )
        {
            ma1 = iMA( Symbol(), Period(), period1, 0, MODE_EMA, PRICE_CLOSE, i );
            ma2 = iMA( Symbol(), Period(), period2, 0, MODE_EMA, PRICE_CLOSE, i );
            if ( NormalizeDouble( ma2 - ma1 - luft*_Point, _Digits ) >= 0.0 ) { return(0); }
            if ( NormalizeDouble( ma1 - ma2, _Digits ) >= 0.0 )
            {
                return(-1);
            }
        }
    }
    return(0);
}
Функция находит пересечение 2-х МА.
Если ма1 пересекает ма2 вверх, возвращает "1", если вниз - "-1".
 
ЧТо вы ходите вокруг да около? Сделайте индикатор БыстраяМА-Медленная МА и анализируйте его значение. Заодно с Осмой познакомитесь.
Причина обращения: