Download MetaTrader 5
To add comments, please log in or register
Download documentation as one file. It is easy!
mrgoodprice144
42
mrgoodprice144 2016.03.28 15: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());
            }
            }
            
            
            
          }
      }  
      
      
      
      
    } 
whroeder1
13627
whroeder1 2016.03.28 18: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.
mrgoodprice144
42
mrgoodprice144 2016.03.28 20:22  
Still does not work !! 
Keith Watford
Moderator
7955
Keith Watford 2016.03.28 21:51  
mrgoodprice144:
Still does not work !! 
Show what you have done
mrgoodprice144
42
mrgoodprice144 2016.03.29 07: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 .
Keith Watford
Moderator
7955
Keith Watford 2016.03.29 08: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

/
To add comments, please log in or register