I have a problem in my EA

 

Hi, everyone. I worte down this code, but it doesn't work, can you find out the mistake please?

#include <Trade\Trade.mqh>
CTrade trade;

int MyRSIDefinition=0;
int MyEMA5Definition=0;
int MyEMA10Definition=0;
int MyStochasticDefinition=0;

int OnInit()
   {
     MyRSIDefinition=iRSI(_Symbol,_Period,14,PRICE_CLOSE);
     MyEMA5Definition=iMA(_Symbol,_Period,5,0,MODE_EMA,PRICE_CLOSE);
     MyEMA10Definition=iMA(_Symbol,_Period,10,0,MODE_EMA,PRICE_CLOSE);
     MyStochasticDefinition=iStochastic(_Symbol,_Period,14,3,3,MODE_SMA,STO_LOWHIGH);
     return INIT_SUCCEEDED;
   }

void OnTick()
  {
     double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
     double Balance=AccountInfoDouble(ACCOUNT_BALANCE);
     double Equity=AccountInfoDouble(ACCOUNT_EQUITY);
     
     double MyRSIArray[];
     double MyEMA5Array[];
     double MyEMA10Array[];
     double MyStochasticKArray[];
     double MyStochasticDArray[];
     int PositionsForThisCurrencyPair=0;
     
     ArraySetAsSeries(MyRSIArray,true);
     ArraySetAsSeries(MyEMA5Array,true);
     ArraySetAsSeries(MyEMA10Array,true);
     ArraySetAsSeries(MyStochasticKArray,true);
     ArraySetAsSeries(MyStochasticDArray,true);
     
     CopyBuffer (MyRSIDefinition,0,0,3,MyRSIArray);
     CopyBuffer (MyEMA5Definition,0,0,3,MyRSIArray);
     CopyBuffer (MyEMA10Definition,0,0,3,MyRSIArray);
     CopyBuffer (MyStochasticDefinition,0,0,3,MyStochasticKArray);
     CopyBuffer (MyStochasticDefinition,1,0,3,MyStochasticDArray);
     
     double MyRSIValue=NormalizeDouble(MyRSIArray[0],2);
     double MyEMA5Value=MyRSIArray[0];
     double MyEMA10Value=MyRSIArray[0];
     double MyStochasticKValue0=MyStochasticKArray[0];
     double MyStochasticDValue0=MyStochasticDArray[0];
     
     for (int conta=PositionsTotal()-1; conta>=0; conta--)
     {
         string symbol=PositionGetSymbol(conta);
         if (Symbol()==symbol)
         PositionsForThisCurrencyPair+=1;
     }
     
     if (PositionsForThisCurrencyPair==0)
     {
     if (MyEMA5Array[0]>MyEMA10Array[0] && MyEMA5Array[1]<MyEMA10Array[1] && MyRSIValue<50 && MyStochasticKValue0<MyStochasticDValue0)
         trade.Buy (0.01,NULL,Ask,NULL,NULL,NULL);
     if (MyEMA5Array[0]<MyEMA10Array[0] && MyEMA5Array[1]>MyEMA10Array[1] && MyRSIValue>50 && MyStochasticKValue0>MyStochasticDValue0)
         trade.Sell (0.01,NULL,Ask,0,NULL,NULL);
     }
     
     for (int conta=PositionsTotal()-1; conta>=0; conta--)
     {
         string symbol=PositionGetSymbol(conta);
         if (Symbol()==symbol)
         PositionsForThisCurrencyPair+=1;
     }
     
     if (PositionsForThisCurrencyPair==1)
      {
         for (int conta=PositionsTotal()-1; conta>=0; conta--)
         {
         string symbol=PositionGetSymbol(conta);
         if (Symbol()==symbol)
         {
         int ticket=PositionGetTicket(conta);	//line 78
         if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         {
            if (MyEMA5Array[0]<MyEMA10Array[0] && MyEMA5Array[1]>MyEMA10Array[1] || MyRSIValue>70)	//line 81
            trade.PositionClose(conta);
         }
         else
         {
            if (MyEMA5Array[0]>MyEMA10Array[0] && MyEMA5Array[1]<MyEMA10Array[1] || MyRSIValue<30)	//line 86
            trade.PositionClose(conta);
         }
         }
         }
      }
  }

3 warnings: line 78, line 81, line 86

Thanks.

 
Giorgio:

Hi, everyone. I worte down this code, but it doesn't work, can you find out the mistake please?

3 warnings: line 78, line 81, line 86

Thanks.

How about highlighting the lines and column. You may get more help.

What are the warnings?

 
Keith Watford:

How about highlighting the lines and column. You may get more help.

What are the warnings?

He already highlighted it as comments

         int ticket=PositionGetTicket(conta);	//line 78
         if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         {
            if (MyEMA5Array[0]<MyEMA10Array[0] && MyEMA5Array[1]>MyEMA10Array[1] || MyRSIValue>70)	//line 81
            trade.PositionClose(conta);
         }
         else
         {
            if (MyEMA5Array[0]>MyEMA10Array[0] && MyEMA5Array[1]<MyEMA10Array[1] || MyRSIValue<30)	//line 86
            trade.PositionClose(conta);
         }
 
It doesn't look like there's anything particularly wrong in my opinion. Just shows a warning on how its written.
 
Qoyyuum Kadir:

He already highlighted it as comments

Highlighted are much easier to spot

     if (MyEMA5Array[0]<MyEMA10Array[0] && MyEMA5Array[1]>MyEMA10Array[1] || MyRSIValue>70)
     if (MyEMA5Array[0]<MyEMA10Array[0] && MyEMA5Array[1]>MyEMA10Array[1] && MyRSIValue>70)

Giorgio

Was the || intended? or should it be &&

When mixing || with && you must make the operator precedence clear