Проблема с уровнями MACD

 

Уже который день бьюсь над написанием советника который открывает позиции при пробитии уровней MACD. Проблема стала в том что когда MACD пробивает уровень - позиция Sell должна открыться при пересечении MACDом своей сигнальной линии сверху вниз и быть ниже сигнальной, но при этом обе линии индикатора должны находиться выше этого уровня. На деле получается, что позиция открывается при пересечении сигнальной и главной линий, а уровень остается как бы не при чем.

void Rass (string Val , int Fast , int Slow , int Sig , int Uroven )
{
   if (!ExistOrder(Mag , Val)&& OrdersTotal()<MaxOrder) 
   {
   double       M1= iMACD(Val,PERIOD_H1,Fast, Slow , Sig ,PRICE_CLOSE , MODE_MAIN , 0 );
   double       M2= iMACD(Val,PERIOD_H1,Fast, Slow , Sig ,PRICE_CLOSE , MODE_SIGNAL , 0 );
   if ((NormalizeDouble(M1,4)>NormalizeDouble(Uroven/100000,4))&&(NormalizeDouble(M1,4)<NormalizeDouble(M2,4)))
      {
             OrderSend(Val,OP_SELL,Lot,MarketInfo(Val,MODE_BID),ss,MarketInfo(Val,MODE_ASK)+SL*piatiznak*MarketInfo(Val, MODE_POINT),MarketInfo(Val,MODE_BID)-TP*piatiznak*MarketInfo(Val, MODE_POINT),"Мультик",Mag,0,Green);
        }

   if ((NormalizeDouble(M1,4)<NormalizeDouble(-Uroven/100000,4))&&(NormalizeDouble(M1,4)>NormalizeDouble(M2,4)))
      {
            OrderSend(Val,OP_BUY,Lot,MarketInfo(Val,MODE_ASK),ss,MarketInfo(Val,MODE_BID)-SL*piatiznak*MarketInfo(Val, MODE_POINT),MarketInfo(Val,MODE_ASK)+TP*piatiznak*MarketInfo(Val, MODE_POINT),"Мультик",Mag,0,Green);
      }


}
return(0);

}
Подскажите, что я забыл дописать.
 
dem220:


Подскажите, что я забыл дописать.
Пересечение линий - это не просто if (одна ниже другой), а скорее if ((сейчас первая ниже второй) && (а была первая выше второй))