Проблема с вложением оператора if в mql4!

 

Доброго дня!

Прошу сильно не пинать! Это мой первый эксперт!

И у меня возникла проблема с вложенными if (возможно после последнего обновления mql4 т. к. до него данное вложение работало).

Вот собственно код которые не работает, а работал:

void OpenSell()

   {

      if(BarHigh > PrevBarHigh)                    

         if(BarLow > PrevBarLow)                   

            if(BarClose < (BarLength/2+BarLow))    

               if(BarClose < BandCenter)           

                  if(BarHigh > Band1Low)           

                     if((Bid+(BarHigh+DeviationSL*Point))>MaxSL*Point)

                        {

                           TiketSell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SellSL,0,"Gambit",123123,0);

                           Print("Открыт ордер SELL №"," ",TiketSell);

                           Terminal();

                        }                                

   } 

А в таком виде работает:

if((DaysDecr==10)&&(PrevBarHigh<BarHigh)&&(PrevBarLow<BarLow)&&(BarClose<(BarLength/2+BarLow))&&(BarClose<BandCenter)&&(BarLow>=Band1Low)&&((Bid+(BarHigh+DeviationSL*Point))>MaxSL*Point))

        {

          SellOpen=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SellSL,0,"Gambit",123123,0); //Band2Low-100*Point

          Print("SellOpen"," ",SellOpen);

        }

Подскажите пож. в чем может быть проблема!???

Заранее Спасибо! 

       

 

Надо расставить скобки. Прочти комментарии к твоему коду.

void OpenSell()

   {

      if(BarHigh > PrevBarHigh)                    // Если условие не выполнено

         if(BarLow > PrevBarLow)                   // то эта строка не выполняется

            if(BarClose < (BarLength/2+BarLow))    // а эта уже будет выполняться. И дальше так-же, если это условие выполнено

               if(BarClose < BandCenter)           // эта строка выполняется и условие не выполнено то 

                  if(BarHigh > Band1Low)           // эта строка не выполняется

                     if((Bid+(BarHigh+DeviationSL*Point))>MaxSL*Point) // и соответственно это условие может проверяться, а может и нет.

                        {

                           TiketSell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SellSL,0,"Gambit",123123,0);

                           Print("Открыт ордер SELL №"," ",TiketSell);

                           Terminal();

                        }                                

   } 
 
PavelKo:
Вы проверяли все ли условия выполняются? И какие ошибки выдает терминал?
 
AlexeyVik:

Надо расставить скобки. Прочти комментарии к твоему коду.



void OpenBuy()
   {
      if(BarHigh < PrevBarHigh)
         {
            if(BarLow < PrevBarLow)
               {
                  if(BarClose > (BarLength/2+BarLow))
                     {
                        if(BarClose > BandCenter)
                           {
                              if(BarLow > Band1Up)
                                 {
                                    if((Ask-(BarLow-DeviationSL*Point))<MaxSL*Point)
                                       {
                                          TiketBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,BarLow-DeviationSL*Point,0,"Gambit",123123,0);
                                          Print("Открыт ордер BUY №"," ",TiketBuy);
                                          Terminal();
                                       }
                                 }
                           }
                     }
               }
         }
   } 
 
Vinin:
Вы проверяли все ли условия выполняются? И какие ошибки выдает терминал?
Прости может вопрос глупый, но как проверить всели выполняются условия!!?
я запускал эксперта в тестере с нач. 2015! Я точно знаю, что есть места точно соответствующие условиям. Это условия для открытия сделки по стратегии Гамбит!
 
PavelKo:

Доброго дня!

Прошу сильно не пинать! Это мой первый эксперт!

И у меня возникла проблема с вложенными if (возможно после последнего обновления mql4 т. к. до него данное вложение работало).

Вот собственно код которые не работает, а работал:

void OpenSell()

   {

      if(BarHigh > PrevBarHigh)                    

         if(BarLow > PrevBarLow)                   

            if(BarClose < (BarLength/2+BarLow))    

               if(BarClose < BandCenter)           

                  if(BarHigh > Band1Low)           

                     if((Bid+(BarHigh+DeviationSL*Point))>MaxSL*Point)

                        {

                           TiketSell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SellSL,0,"Gambit",123123,0);

                           Print("Открыт ордер SELL №"," ",TiketSell);

                           Terminal();

                        }                                

   } 

А в таком виде работает:

if((DaysDecr==10)&&(PrevBarHigh<BarHigh)&&(PrevBarLow<BarLow)&&(BarClose<(BarLength/2+BarLow))&&(BarClose<BandCenter)&&(BarLow>=Band1Low)&&((Bid+(BarHigh+DeviationSL*Point))>MaxSL*Point))

        {

          SellOpen=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SellSL,0,"Gambit",123123,0); //Band2Low-100*Point

          Print("SellOpen"," ",SellOpen);

        }

Подскажите пож. в чем может быть проблема!???

Заранее Спасибо! 

       

Проблема в том, что условия сформулированы по-разному.

По крайней мере 2 отличия

Видимо, неважное отличие

(DaysDecr==10)

А вот это кардинальное отличие. Условие

if(BarHigh > Band1Low)

отличается от

&&(BarLow>=Band1Low)