помогите найти ошибку

apelsinder

Новичок форума
нужно чтоб советник закрывал сделку при обратном сигнале
сейчас советник не закрывает сделки



if(total<1 && A<0 && B>0 && G<Bars)
{
Ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,0,Red);
G=Bars;
return(0);

//закрытие при обратном сигнале
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
if( total<1 && A>0 && B<0)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

return(0);
}
 

Юрий FT

Модератор
Вы пытаетесь закрыть не выбранный ордер, перед закрытием его нужно выбрать с помощью OrderSelect

Попробуйте так:

Код:
if(total<1 && A<0 && B>0 && G<Bars)
{
Ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,0,Red);
G=Bars;
} 


//закрытие при обратном сигнале
if(ChPos(1) && OrderSymbol()==Symbol())
{
if( total<1 && A>0 && B<0)
_OrderClose(0);
} 


 //проверяет есть ли открытые ордера
int ChPos(int type) 
{

   int i;bool col=false;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==EA_Magic){col=true;}
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==EA_Magic){col=true;}
       }
    }   
return(col);
}

//Закрывает позицю по типу
int _OrderClose(int type)
   {//http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=99
   
   int err;
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==EA_Magic)
         {
          err=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
          if(err<0){Print("OrderClose()-  Ошибка закрытия OP_BUY.  OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Bid "+Bid+" "+GetLastError());return(-1);}
         }
         if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()==EA_Magic)
         {
          err=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
          if(err<0){Print("OrderClose()-  Ошибка закрытия OP_SELL.  OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Ask "+Ask+" "+GetLastError());return(-1);}
         }
        }
       }
   return(0);
   }
 
Верх