Почему советник не срабатывает?

 

привет.

Написал советник, но притестировании он ниоткрыл ни одной позиции. у меня сомнение правильно ли я задал условия покупки/продажи????

заранее благодарен за помощь!

extern double Lots = 0.1;
extern double TrailingStop = 30;// расстояние после которого будем устанавливать безубыток
extern double X=5;//установка в + 5 пунктов! 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double FlatUp1,FlatUp2,Str_1,Stb_1,ADXg_1,ADXr_1;
   double P_up0,P_down0,P_up1,P_down1;
   int cnt,ticket,total;
 
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   P_up0=iCustom(0,0,"Ценовой канал",11,0,0);
   P_down0=iCustom(0,0,"Ценовой канал",11,1,0);
   P_up1=iCustom(0,0,"Ценовой канал",11,0,1);
   P_down1=iCustom(0,0,"Ценовой канал",11,1,1);
   FlatUp1=iCustom(0,0,"Новый ишимоку",9,26,53,4,1);
   FlatUp2=iCustom(0,0,"Новый ишимоку",9,26,53,4,2);
   Str_1=iCustom(0,0,"Сила тренда",10,10000,0,1);
   Stb_1=iCustom(0,0,"Сила тренда",10,10000,1,1);
   ADXg_1=iCustom(0,0,"ADX пересечение",21,10000,0,1);
   ADXr_1=iCustom(0,0,"ADX пересечение",21,10000,1,1);
//задали все данные 
 
   total=OrdersTotal();
   if(total<1) 
     {
      // Проверка свободной маржи
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // Условие открытие позиции BUY
      if(ADXg_1<ADXr_1&&Str_1<Stb_1&&FlatUp1==0||
      FlatUp1>0&&FlatUp1==0&&Str_1<Stb_1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // Условие открытие позиции SELL
      if(ADXg_1>ADXr_1&&Str_1>Stb_1&&FlatUp1==0||
      FlatUp1>0&&FlatUp1==0&&Str_1>Stb_1)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
    
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   // длинная позиция открыта
           {
            // условие закрытие длинной позиции
            if(P_down1>P_down0)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0); 
                }
            if(TrailingStop>0)  
              {                  
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop && OrderStopLoss()!=OrderOpenPrice()+X*Point)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+X*Point,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            // условие закрытия короткой позиции
            if(P_up1<P_up0)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
               return(0); 
              }
            if(TrailingStop>0)  
              {               
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if(NormalizeDouble(OrderStopLoss(),Digits) != NormalizeDouble(OrderOpenPrice()-X*Point,Digits))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-X*Point,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
 
На первый взгляд ошибок нет. Разве что нужно проверить условия открытия по индюкам. Я обычно в таких случаях (если не открывается) вставляю ПРИНТ после условий -
if(ADXg_1<ADXr_1&&Str_1<Stb_1&&FlatUp1==0||
      FlatUp1>0&&FlatUp1==0&&Str_1<Stb_1)    {
Print("есть сигнал!-- хи-хи ___ тра-ля-ля");

я не знаю, что там за индюки, но вот это условие

  && FlatUp1==0
мне видится сомнительным....
 
попробуйте поставить скобки в условии на открытие, а то там не понятно что получается - очередность операций может быть не та, которую Вы себе представляете...
 

Я этого лог условия не пойму

if(ADXg_1>ADXr_1 && Str_1>Stb_1 && FlatUp1==0 ||
FlatUp1>0 && FlatUp1==0 && Str_1>Stb_1)

Сразу больше 0 и равен ему же...

Нада именно его исправить... а то что то здесь не ладное

 

to StatBars: ошибку исправил, но все по прежнему. попродавал по другому: начал искать какие индикаторы не сработывают, путем тестирования части условия покупка/продажа. оказалось несрабатывает У меня он называется "Новый ишимоку". что делаю не так?

вот ссылка где качал индикатор https://www.mql5.com/ru/code/7335

extern double Lots = 0.1;
extern double TrailingStop = 18;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double FlatUp1,FlatUp2,Str_1,Stb_1,ADXg_1,ADXr_1;
   double P_up0,P_down0,P_up1,P_down1;
   int cnt,ticket,total;
 
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   P_up0=iCustom(0,0,"Ценовой канал",11,0,0);
   P_down0=iCustom(0,0,"Ценовой канал",11,1,0);
   P_up1=iCustom(0,0,"Ценовой канал",11,0,1);
   P_down1=iCustom(0,0,"Ценовой канал",11,1,1);
   FlatUp1=iCustom(0,0,"Новый ишимоку",9,26,53,4,1);
   FlatUp2=iCustom(0,0,"Новый ишимоку",9,26,53,4,2);
   Str_1=iCustom(0,0,"Сила тренда",10,10000,1,1);
   Stb_1=iCustom(0,0,"Сила тренда",10,10000,0,1);
   ADXg_1=iCustom(0,0,"ADX пересечение",21,10000,1,1);
   ADXr_1=iCustom(0,0,"ADX пересечение",21,10000,0,1);
   
//задали все данные 
 
   total=OrdersTotal();
   if(total<1) 
     {
      // Проверка свободной маржи
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // Условие открытие позиции BUY
      if(ADXg_1>ADXr_1&&Str_1<Stb_1&&FlatUp1<20)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-20*Point,0,"",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // Условие открытие позиции SELL
      if(ADXg_1<ADXr_1&&Str_1>Stb_1&&FlatUp1<20)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+20*Point,0,"",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
    
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   // длинная позиция открыта
           {
            // условие закрытие длинной позиции
            if(P_down1>P_down0)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0); 
                }
                             
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              
           }
         else 
           {
            // условие закрытия короткой позиции
            if(P_up1<P_up0)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
               return(0); 
              }
                             
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              
           }
        }
     }
   return(0);
  }
Файлы:
Причина обращения: