Download MetaTrader 5

OrderSelect and OrderModify Error

To add comments, please log in or register
Mirza Baig
2385
Mirza Baig  

Hi all,

I am trying to compile my EA, when I do I receive "Return value of OrderSelect and OrderModify should be checked" errors. Can an expert kindly help me on this, the code is given below:

 

Thank you 

 

//+------------------------------------------------------------------+
//|                                                        MA EA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lots =0.01;
extern double TakeProfit=50;
extern double StopLoss=50;
extern int TrailingStop=0;
extern int Slippage=3;
extern int MagicNumber=10001;

//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1)>iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1))) // BUY RULE
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"BUY TRADE",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET); 
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1)<iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1))) // SELL RULE
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"SELL TRADE",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
Marco vd Heijden
Moderator
4752
Marco vd Heijden  
Mirza Baig:

Hi all,

I am trying to compile my EA, when I do I receive "Return value of OrderSelect and OrderModify should be checked" errors. Can an expert kindly help me on this, the code is given below:

 

Thank you 

 

//+------------------------------------------------------------------+
//|                                                        MA EA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lots =0.01;
extern double TakeProfit=50;
extern double StopLoss=50;
extern int TrailingStop=0;
extern int Slippage=3;
extern int MagicNumber=10001;

//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1)>iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1))) // BUY RULE
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"BUY TRADE",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET); 
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1)<iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1))) // SELL RULE
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"SELL TRADE",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
the yellows are checked the reds need to be checked these functions return a value depending on if they were successful or not.
Roberto Jacobs
47221
Roberto Jacobs  
Mirza Baig:

Hi all,

I am trying to compile my EA, when I do I receive "Return value of OrderSelect and OrderModify should be checked" errors. Can an expert kindly help me on this, the code is given below:

 

Thank you 

 


Correction of your code:

//+------------------------------------------------------------------+
//|                                                        MA EA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lots =0.01;
extern double TakeProfit=50;
extern double StopLoss=50;
extern int TrailingStop=0;
extern int Slippage=3;
extern int MagicNumber=10001;

//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1)>iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1))) // BUY RULE
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"BUY TRADE",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         if(OrderSelect(result,SELECT_BY_TICKET)==true) 
         bool modif1=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((Hour()>15)&&(iMA(NULL,PERIOD_M15,50,1,MODE_EMA,PRICE_CLOSE,1)<iMA(NULL,PERIOD_M15,20,1,MODE_EMA,PRICE_CLOSE,1))) // SELL RULE
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"SELL TRADE",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         if(OrderSelect(result,SELECT_BY_TICKET)==true)
         bool modif2=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     bool modif3=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     bool modif4=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     if(OrderSelect(i,SELECT_BY_POS ,MODE_TRADES)==true) 
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
Marco vd Heijden
Moderator
4752
Marco vd Heijden  

that will only remove the compiler warning be advised that it does not actually check if the returned value was successful or not.

Roberto Jacobs
47221
Roberto Jacobs  
Marco vd Heijden:

that will only remove the compiler warning be advised that it does not actually check if the returned value was successful or not.

let him who created the code for checks the return value
To add comments, please log in or register