Ordermodify error 1 From an EA I downloaded

 

hi


The following code whenever I back test it I keep getting an ordermodify error 1 but I don't know where in the source code to change it so I can put it right. Please if anyone can help me with this I would appreciate it.



//+------------------------------------------------------------------+ 
//| Big Dog Breakout - ALBERTO TORTELLA                              | 
//+------------------------------------------------------------------+ 

// CARATTERISTICHE
// ENTRATA ROTTURA RANGE DEFINITO A INIZIO MATTINATA.
// STOP LATO OPPPOSTO DEL RANGE, ASSENZA DI TAKE PROFIT
// TAKE PROFIT MIN/MAX ULTIME DUE BARRE PRECEDENTI

extern int    Box         =    4; // ampiezza del box di riferimento
extern int    Start_Trade =    7; // prima ora utile per aprire posizioni
extern int    Stop_Trade  =   15; // ultima ora utile per aprire posizioni
extern int    Close_Trade =   21; // orario chiusura posizioni aperte
extern int    Filter_In   =   20; // filtro da aggiungere al livello di breakout
extern int    Filter_Out  =   20; // filtro da aggiungere al livello di stop
extern double Risk        = 0.01; // rischio massimo accettabile su ogni trade
extern double FixedLots   = 0.00; // lasciare 0 per utilizzare il fixed fractional method

int  Num_Order_Long, Num_Order_Short, Lotti ;
bool Long, Short ;
bool Entry_Long, Entry_Short ;

bool can_trade_long    = false ; // variabile di controllo per breakout long
bool can_trade_short   = false ; // variabile di controllo per breakout short

double Line_Up, Line_Down;
double Distanza_Long, Distanza_Short ;     
double Potential_Loss_Long, Potential_Loss_Short, Punto ; 

double Spread, pipValue, Lots, Apertura, Trailing_Stop ;
double Min_Stop, Stop_Long, Stop_Short ;
double Lots_Long, Lots_Short;
int    a = 0, Contatore ;
 
int Ora_Entrata, cnt, total, ticket_long, ticket_short;
double lotStep;

#include <Punto.mqh>
#include <Lots_Long.mqh>
#include <Lots_Short.mqh>

//+------------------------------------------------------------------+ 
//| ESECUZIONE DELL'EXPERT                                           |                                              
//+------------------------------------------------------------------+ 
 
int start() 
  { 

//+------------------------------------------------------------------+ 
//| DEFINIZIONE DEL BOX                                              |                                              
//+------------------------------------------------------------------+ 

if(Hour()==7)
  { 
  Line_Up   = High[iHighest(NULL,0,MODE_HIGH,Box,1)] ; 
  Line_Down = Low [iLowest(NULL,0,MODE_LOW,Box,1)] ; 
  } 


// SE CAMBIA LA BARRA RESETTO LA VARIABILE "NO TRADE" 
if (Apertura != Open[0]) 
        {
        a=0;
        }          

// CONTROLLO CHE NON CI SIANO ORDINI APERTI SU QUESTO CROSS 
// DA QUESTO EXPERT
  
  total = OrdersTotal();
  Num_Order_Long  = 0;
  Num_Order_Short = 0;
  for(cnt=0;cnt<=total;cnt++)
     {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol()==Symbol() && OrderMagicNumber()==3) 
        {  // Controlla il cross e l'expert che ha aperto la posizione
        if (OrderType()==OP_BUY)
           { 
           Num_Order_Long++;
           }
        if (OrderType()==OP_SELL)
           { 
           Num_Order_Short++;
           }   
        }  
     }    
    
  if(Bid<Line_Up    &&  Num_Order_Long==0 )
    { 
    can_trade_long  = true;
    } 
  if(Bid>Line_Down  &&  Num_Order_Short==0 )
    { 
    can_trade_short = true;
    }  
 
   
//+------------------------------------------------------------------+ 
//| APERTURA POSIZIONI                                               |                                             
//+------------------------------------------------------------------+ 
           

Entry_Long  = Bid>=Line_Up+Filter_In/Punto() && High[1]<=Line_Up  ;               
                         
Entry_Short = Bid<=Line_Down-Filter_In/Punto() && Low[1]>=Line_Down ;                   

 
// POSIZIONI LONG

if(Entry_Long && can_trade_long && Hour()>=Start_Trade && Hour()<Stop_Trade)  
  { 
  Min_Stop      = Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)/Punto() ;
  Stop_Long     = MathMin(Line_Down-Filter_Out/Punto(),Min_Stop) ; 
  Distanza_Long = Bid - Stop_Long ; 
  Lots_Long     = Lots_Long(); 
  
  if (Lots_Long>=0.01)               
     {
     ticket_long = OrderSend(Symbol(),OP_BUY,Lots_Long,Ask,NULL,NULL,NULL,"Big Dog",3,0,Green) ;    
                           
     if(ticket_long>0) 
       { 
       if(OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES))
         {
         Print("Perdita potenziale è : ", (Potential_Loss_Long*Lots_Long)/AccountFreeMargin()*100 ); 
         can_trade_long = false;
         Apertura = Open[0];
         }
       else Print("Error opening BUY order: ",GetLastError()); 
       return(0); 
       }               
     }
  else if (a == 0)
     {
     Print("No trade man!");
     a = 1;
     Apertura = Open[0];
     }
  }
  
// POSIZIONI SHORT
 
 
if(Entry_Short && can_trade_short && Hour()>=Start_Trade && Hour()<Stop_Trade)  
  {    
  Min_Stop       = Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)/Punto() ;
  Stop_Short     = MathMax(Line_Up+Filter_Out/Punto(),Min_Stop) ;
  Distanza_Short = Stop_Short - Bid ; 
  Lots_Short     = Lots_Short();               
  
  if (Lots_Short>=0.01)                
     { 
     ticket_short = OrderSend(Symbol(),OP_SELL,Lots_Short,Bid,NULL,NULL,NULL,"Big Dog",3,0,Red);              
     
     if(ticket_short>0) 
       { 
       if(OrderSelect(ticket_short,SELECT_BY_TICKET,MODE_TRADES))
       {
       Print("Perdita potenziale è : ", (Potential_Loss_Short*Lots_Short)/AccountFreeMargin()*100 );
       can_trade_short = false;
       Apertura = Open[0];
       }
       else Print("Error opening SELL order : ",GetLastError()); 
       return(0); 
       }
     }  
  else if (a == 0)
     {
     Print("No trade man!");
     a = 1;
     Apertura = Open[0];
     }
  }
  
  
//+------------------------------------------------------------------+ 
//| INSERIMENTO STOP LOSS                                            | 
//+------------------------------------------------------------------+ 

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==3)  // SIMBOLO
        {
        if(OrderType()==OP_BUY)   // POSIZIONI LONG
          {
          // trailing stop 
          Min_Stop  = Bid - MarketInfo(Symbol(),MODE_STOPLEVEL)/Punto() ; 
          Stop_Long = MathMin(Line_Down-Filter_Out/Punto(),Min_Stop) ; 
          if(OrderStopLoss()==0)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),Stop_Long,OrderTakeProfit(),0,Blue);
              }   
          } // Chiude Long 
                    
        else // POSIZIONI SHORT
          { 
          // trailing stop  
          Min_Stop   = Bid + MarketInfo(Symbol(),MODE_STOPLEVEL)/Punto() ; 
          Stop_Short = MathMax(Line_Up+Filter_Out/Punto(),Min_Stop)+(Ask-Bid) ;
          if(OrderStopLoss()==0)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Stop_Short,OrderTakeProfit(),0,Blue);
            }        
                   
          }   // Chiude Short
          
        }    // Chiude Simbolo
     }      // Chiude Ciclo For  

//+------------------------------------------------------------------+ 
//| CHIUSURA POSIZIONI                                               | 
//+------------------------------------------------------------------+ 

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==3)  // SIMBOLO
        {
        if(OrderType()==OP_BUY)   // POSIZIONI LONG
          {
          // trailing stop  
          Trailing_Stop=Low[iLowest(NULL,0,MODE_LOW,2,1)]-Filter_Out/Punto();
          if(Apertura!=Open[0] && OrderStopLoss()<Trailing_Stop)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),Trailing_Stop,OrderTakeProfit(),0,Blue);
              } 
          // chiusura posizioni a fine giornata
          if(Hour()==Close_Trade)
            {
            OrderClose(OrderTicket(),OrderLots(),Bid,NULL,PaleGoldenrod);           
            } 
          // chiusura posizioni il venerdì sera
          if(DayOfWeek()==5 && Hour()==19 && Minute()==50)
              {
              OrderClose(OrderTicket(),0.01,Bid,NULL,Violet);           
              }    
          }           
        else // POSIZIONI SHORT
          { 
          // trailing stop  
          Trailing_Stop=High[iHighest(NULL,0,MODE_HIGH,2,1)]+Filter_Out/Punto()+(Ask-Bid);
          if(Apertura!=Open[0] && OrderStopLoss()>Trailing_Stop )
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Trailing_Stop,OrderTakeProfit(),0,Blue);
            } 
          // chiusura posizioni a fine giornata
          if(Hour()==Close_Trade)
            {
            OrderClose(OrderTicket(),OrderLots(),Ask,NULL,PaleGoldenrod);           
            }    
          // chiusura posizioni il venerdì sera 
          if(DayOfWeek()==5 && Hour()==19 && Minute()==50)
            {
            OrderClose(OrderTicket(),0.01,Ask,NULL,Violet);
            }  
                   
          }   // Chiude Short
          
        }    // Chiude Simbolo
     }      // Chiude Ciclo For
  
    
} // Chiude Start
 

You'll get an " ordermodify error 1" if you try to modify an order with the same values. So nothing was changed. To resolve the error test if at least one value was changed before executing the modify function.

hth

Russell

--edit-- fixed typo

Reason: