OrderType() return a wrong value

 

I placed a BUYSTOP and a SELLSTOP; but after selecting the order, OrderType() return 0 or 1 instead of 4 or 6 (no other order type  placed)

 result=OrderSend(symbol,OP_BUYSTOP,lot,NormalizeDouble(Ask+2*boxSize,Digits),slippage,0,0,"",MAGICMA,0,CLR_NONE);

   for(int TradeNumber=(OrdersTotal()-1); TradeNumber>=0; TradeNumber--)
     {
      bool selected=OrderSelect(TradeNumber,SELECT_BY_POS,MODE_TRADES);

      if(Bid<slBuy && OrderType()==OP_BUY &&  OrderSymbol()==Symbol())
        {
         result=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Green);
         //HERE CLOSE THE BUYSTOP ORDER!!!!! WHY????
        }

      if(Ask>slSell && OrdeType()==OP_SELL &&  OrderSymbol()==Symbol())
        {
         result=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Green);
         //HERE CLOSE THE SELLSTOP ORDER!!!!! WHY????
        }
     }
 

Maybe because the pending orders had been triggered and were no longer stop orders.

Pending orders have to be deleted, not closed, so your code should not delete a pending order.

 
No, no pending orders triggered. Return wrong value immeditely, when orders are already pending. I don't want delete pending orders.
 
Use Ctrl+f and search for OrderDelete in your code as the order is probably being deleted elsewhere.
 
  1. Print your variable values used in your if statements.
  2. Check your return codes (OrderSend and OrderSelect) What are Function return values ? How do I use them ? - MQL4 forum and Common Errors in MQL4 Programs and How to Avoid Them - MQL4 Articles
 

I found I was doing the same thing.

OrderSelect, OrderType(), and for some reason OrderType() was returning an incorrect value (in this case 0, OP_BUY).

With fresh eyes in the morning, whilst I was focussing on the simple 

int ordertype = OrderType();

I'd not seen I'd that I had incorrectly called OrderSelect, so it was always calling the wrong order.

Definitely worth double check of the entire route of your code, saved me an embarrassing rant :)

Reason: