Почему не открываются ордера?

 

Вот кусок кода:

void OnTick()

{
   if(CountBuy()!=0)
   {
      OrderSend(Symbol(), OP_BUYSTOP, Lots, PriceB, 5, 0, 0, "", 100500, 0, Green);
   }
  
   if(CountSell()!=0)
   {
      OrderSend(Symbol(), OP_SELLSTOP, Lots, PriceS, 5, 0, 0, "", 100500, 0, Red);
   }
 
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_SELLSTOP);
         count++;
      }
   }}
   return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)){
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUYSTOP);
         count++;
      }}
   }
   return(count);

}


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

Подскажите, что не так, а то уже весь мозг сломал.

 

Потому что в условиях открытия указано: открывать новый ордер, если уже есть орде buy или sell. Если же ордеров нет, то новые открываться не будут.

P. S.  Вставляйте код правильно .

 
Scriptong:

Потому что в условиях открытия указано: открывать новый ордер, если уже есть орде buy или sell. Если же ордеров нет, то новые открываться не будут.

P. S.  Вставляйте код правильно .

Упс. Исправил, но теперь только один ордер на покупку открывается и все.
 
calvuscaput:
Упс. Исправил, но теперь только один ордер на покупку открывается и все.
Покажите, что именно исправили.
 
Scriptong:
Покажите, что именно исправили.
void OnTick()
{
   if(CountBuy()==0)
   {
      OrderSend(Symbol(), OP_BUYSTOP, Lots, LastUpFractal(), 5, 0, 0, "", 100500, 0, Green);
   }
   
   else if(CountSell()==0)
   {
      OrderSend(Symbol(), OP_SELLSTOP, Lots, LastDownFractal(), 5, 0, 0, "", 100500, 0, Red);
   }
  
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_SELLSTOP);
         count++;
      }
   }}
   return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)){
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUYSTOP);
         count++;
      }}
   }
   return(count);
}
 
calvuscaput:

Точка с запятой лишние в обоих функциях в этих фрагментах

if(OrderType()==OP_SELLSTOP);
if(OrderType()==OP_BUYSTOP);
Причина обращения: