i have a hard time deleting a pending order !!

Back to topics list To post a new topic, please log in or register
avatar
14
mrgoodprice144 2016.03.28 17:39
 

I got this code that send 2 pending orders than i got an other code where u try to delete the one that did not got hit unstead my code his deleting both pending orders before they get hit

here is the code:


 for(int i=OrdersTotal()-1; i>=0; i--)  
   {
      if(!OrderSelect(i,SELECT_BY_POS, MODE_TRADES) == true) continue;
      { 
        if( OP_BUYSTOP>0     )
          {  
           if( OP_BUY>0 )
          { 
          
          if(!OrderDelete(OrderTicket(),clrNONE)){ // <-- try to close the order
            Print("Order Delete failed, order number: ",OrderTicket()," Error: ",GetLastError(), " On: ", OrderSymbol()); 
            }
            else{
            Print("Pending Order was deleted: ", OrderTicket(), " On: ", OrderSymbol());
            }
            
            }
          }
      }     
      if(!OrderSelect(i,SELECT_BY_POS, MODE_TRADES) == true) continue;
      { 
        if(  OP_SELLSTOP>0)
          {  
           if( OP_SELL>0)
          {  
          
          if(!OrderDelete(OrderTicket(),clrNONE)){ // <-- try to close the order
            Print("Order Delete failed, order number: ",OrderTicket()," Error: ",GetLastError(), " On: ", OrderSymbol()); 
            }
            else{
            Print("Pending Order was deleted: ", OrderTicket(), " On: ", OrderSymbol());
            }
            }
            
            
            
          }
      }  
      
      
      
      
    } 
avatar
12983
WHRoeder 2016.03.28 20:39 #
 
  1. Why are you comparing constants? Order Properties - Trade Constants - Standard Constants, Enumerations and Structures - MQL4 Reference



           if( OP_BUYSTOP>0     )
              {  
               if( OP_BUY>0 )
    You can only delete pending orders. When OrderType() > OP_SELL
           if( 4>0     ) // Always true
              {  
               if( 0>0 ) // Never true.

  2. if(!OrderSelect(i,SELECT_BY_POS, MODE_TRADES) == true) continue;
    You would never write if( (2+2 == 4) == true) would you? if(2+2 == 4) is sufficient. So Don't write if(bool == true), just use if(bool) or if(!bool). Code becomes self documenting when you use meaningful variable names, like bool isLongEnabled. Long_Entry sounds like a trigger price or a ticket number and "if long entry" is an incomplete sentence.
avatar
14
mrgoodprice144 2016.03.28 22:22 #
 
Still does not work !! 
avatar
Moderator
3404
GumRai 2016.03.28 23:51 #
 
mrgoodprice144:
Still does not work !! 
Show what you have done
avatar
14
mrgoodprice144 2016.03.29 09:42 #
 
for(int i=OrdersTotal()-1; i>=0; i--)  
   {
      if(!OrderSelect(i,SELECT_BY_POS, MODE_TRADES))   
      { 
        
            
           if(OP_BUY)
          { 
          
          if(!OrderDelete(OrderTicket(),clrNONE)){  
            Print("Order Delete failed, order number: ",OrderTicket()," Error: ",GetLastError(), " On: ", OrderSymbol()); 
            }
            else{
            Print("Pending Order was deleted: ", OrderTicket(), " On: ", OrderSymbol());
            }
            
            
          }
         
      if(!OrderSelect(i,SELECT_BY_POS, MODE_TRADES ))
      { 
      
           if(  OP_SELL)
          {  
          
          if(!OrderDelete(OrderTicket(),clrNONE)){  
            Print("Order Delete failed, order number: ",OrderTicket()," Error: ",GetLastError(), " On: ", OrderSymbol()); 
            }
            else{
            Print("Pending Order was deleted: ", OrderTicket(), " On: ", OrderSymbol());
            }
            }
            
            
            
          }
     
      
      
      
    } 
  }
Whys is it  so comlicated to write a logical code i got 2 pending orders if one get hit the second one is deleted that 's it .
avatar
Moderator
3404
GumRai 2016.03.29 10:24 #
 
mrgoodprice144:
Whys is it  so comlicated to write a logical code i got 2 pending orders if one get hit the second one is deleted that 's it .

WHRoeder has already told you. Code like

 if(OP_BUY)

Makes no sense

Maybe tou intend

           if(OrderType()==OP_BUY)

but if it is a triggered buy, you cannot delete it, you can only close it. But again, you don't want to close the triggered buy, you want to delete the pending sell.

So make your code loop through the orders and if it finds a triggered buy, loop through the orders again and delete any pending orders that have been placed by the EA

Back to topics list  

To add comments, please log in or register