order close error

 

Hi everyone I had a problem when trying to close an open order, here's my code:

void CloseOrders()
  {
   RefreshRates();     
      if(OrderSelect(OrderTicket(),SELECT_BY_TICKET))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_BUY)
              {
               if(CheckClosePosition()==1)
                 {
                  bool res = OrderClose(OrderTicket(),OrderLots(),Bid,0);
                  if(!res)
                     Print("Order failed to close for ticket # ",OrderTicket()," with error: ",GetLastError());
                 }
              }
            if(OrderType() == OP_SELL)
              {
               if(CheckClosePosition()==2)
                 {
                  bool res = OrderClose(OrderTicket(),OrderLots(),Ask,0);
                  if(!res)
                     Print("Order failed to close for ticket # ",OrderTicket()," with error: ",GetLastError());
                 }
              }
           }
        }
     }

When I tried to close open order it return with error 4108 (invalid ticket). I tried to save the order ticket into variable ticketBuy and ticketSell but it change with error 4051(Invalid function parameter value). Is anyone knows how to fix this?

 
if(OrderSelect(OrderTicket(),SELECT_BY_TICKET))

OrderTicket() will not necessarily have a value until an order is selected.

If it has already been selected somewhere, why are you selecting it again?

You are selecting by ticket but you don't check if it has already been closed or not.

 
Keith Watford #:

OrderTicket() will not necessarily have a value until an order is selected.

If it has already been selected somewhere, why are you selecting it again?

You are selecting by ticket but you don't check if it has already been closed or not.

Ok I Understand. I thought OrderTicket() is storing the ticket number automatically.
 
      if(OrderSelect(OrderTicket(),SELECT_BY_TICKET))

MT4: You can not use any Trade Functions until you first select an order.

Reason: