Download MetaTrader 5

Return Value Should Be Checked "Error"

To add comments, please log in or register
Do you know that MQL5 has structures?
awanje
12
awanje 2015.02.07 12:18 

Please Suggest me correction. I am getting error "Return Value Should Be Checked "

extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=05;
extern double TakeProfit=05;
extern int TrailingStop=0;
extern int Slippage=3;
//
//    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((iRSI(NULL,0,4,PRICE_CLOSE,0)<10)&&(iFractals(NULL,0,MODE_LOWER,0)<Close[0])) // Here is your open buy rule
     {
        result=OrderSend(Symbol(),OP_BUY,AdvancedMM(),Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",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))
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);}
        return(0);
     }
     if((iRSI(NULL,0,4,PRICE_CLOSE,0)>90)&&(iFractals(NULL,0,MODE_UPPER,0)>Open[0])) // Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,AdvancedMM(),Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",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);
}
double AdvancedMM()
{
 int i;
 double AdvancedMMLots = 0;
 bool profit1=false;
 int SystemHistoryOrders=0;
  for( i=0;i<OrdersHistoryTotal();i++)
  {  OrderSelect(i,SELECT_BY_POS ,MODE_HISTORY);
     if (OrderMagicNumber()==MagicNumber) SystemHistoryOrders++;
  }
 bool profit2=false;
 int LO=0;
 if(SystemHistoryOrders<2) return(Lots);
 for( i=OrdersHistoryTotal()-1;i>=0;i--)
  {
     if(OrderSelect(i,SELECT_BY_POS ,MODE_HISTORY))
     if (OrderMagicNumber()==MagicNumber) 
     {
        if(OrderProfit()>=0 && profit1) return(Lots);
        if( LO==0)
        {  if(OrderProfit()>=0) profit1=true;
           if(OrderProfit()<0)  return(OrderLots());
           LO=1;
        }
        if(OrderProfit()>=0 && profit2) return(AdvancedMMLots);
        if(OrderProfit()>=0) profit2=true;
        if(OrderProfit()<0 ) 
        {   profit1=false;
            profit2=false;
            AdvancedMMLots+=OrderLots();
        }
     }
  }
 return(AdvancedMMLots);
}
Stuart Browne
5818
Stuart Browne 2015.02.08 01:35  
Please use the SRC button when posting code. I've fixed it for you this time.

You need to check the result of all of your OrderModify() operations. It's a boolean and needs to be checked just like you have done with the OrderSend() operations. It's not an error, just a warning, but should be fixed or it can lead to unexpected results.

There's an example you can follow in the documentation
OrderModify - MQL4 Documentation
  • docs.mql4.com
OrderModify - MQL4 Documentation
Wajahat Awan
9
Wajahat Awan 2015.02.08 07:51  
Filter:
Please use the SRC button when posting code. I've fixed it for you this time.

You need to check the result of all of your OrderModify() operations. It's a boolean and needs to be checked just like you have done with the OrderSend() operations. It's not an error, just a warning, but should be fixed or it can lead to unexpected results.

There's an example you can follow in the documentation
But it do not compile?
Stuart Browne
5818
Stuart Browne 2015.02.08 08:06  
awanje786:
But it do not compile?
I just downloaded your code and it compiles just fine for me. As I said above, all you are seeing when you compile are warnings, not errors. Warnings do not stop your code compiling
Enrico Lambino
4323
Enrico Lambino 2015.02.08 08:49  

OrderModify() returns boolean and the compiler expects the program to check/get the value. Getting the value of the function should remove the warning, e.g.: 

OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);}

to:

bool res = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);

or:

if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green)) Print(GetLastError());
To add comments, please log in or register