MQL4- Can we plot the Indicators using an EA?

To add comments, please log in or register
Arunkumar Kalyanasundaram
70
Arunkumar Kalyanasundaram  

Hello Gurus

Can we plot the indicator using an EA, for example if I have an EA trading 5-MA 15 MA cross, can I plot those indicator lines in EA- I badly need this way for some testing purposes

Please share some example or a tutorial, I tried for days but couldnt do it in MT4; Thanks


Regards

Arun

Seng Joo Thio
541
Seng Joo Thio  
Arunkumar Kalyanasundaram:

Can we plot the indicator using an EA, for example if I have an EA trading 5-MA 15 MA cross, can I plot those indicator lines in EA- I badly need this way for some testing purposes

Please share some example or a tutorial, I tried for days but couldnt do it in MT4; Thanks

You can obtain the values of 5-MA (for example) using codes like these:

int P = 5; // Period of Moving Average
int S = 0; // Shift of Moving Average
int B = 1; // Bar that you're interested in

double MA5 = iMA(_Symbol,_Period,P,S,MODE_SMA,PRICE_CLOSE,B);

There is no need for your EA to plot those lines on the chart, since it should be even more straightforward to just drop the moving average indicator on the chart.

William Roeder
18873
William Roeder  
  1. EAs have no eyes. If you want to see the indicators on the chart, put them there.
  2. Why did you post your MT4 question in the Root / MT5 EA section instead of the MQL4 section, (bottom of the Root page?)
              General rules and best pratices of the Forum. - General - MQL5 programming forum
    Next time post in the correct place. The moderators will likely move this thread there soon.

Arunkumar Kalyanasundaram
70
Arunkumar Kalyanasundaram  
Seng Joo Thio:

You can obtain the values of 5-MA (for example) using codes like these:

There is no need for your EA to plot those lines on the chart, since it should be even more straightforward to just drop the moving average indicator on the chart.

Tk u, I do have an EA and an Indicator developed however when I back test I see the Indicator crossover and the EA open trades differing and the values when printed differs as well, so I'm trying to draw the indicator thru the EA to visualize the buy and sell, is there a way that we can do it? like using dll or some other way

Seng Joo Thio
541
Seng Joo Thio  
Arunkumar Kalyanasundaram:

Tk u, I do have an EA and an Indicator developed however when I back test I see the Indicator crossover and the EA open trades differing and the values when printed differs as well, so I'm trying to draw the indicator thru the EA to visualize the buy and sell, is there a way that we can do it? like using dll or some other way

You can always draw trendlines without ray, from within your EA to depict the exact point that the crossover happened:

            ObjectCreate(ChartID(),<Name1>,OBJ_TREND,0,T1,P1,T2,P2); // Draws '/'
            ObjectSet(<Name1>,OBJPROP_RAY,FALSE);
            ObjectCreate(ChartID(),<Name2>,OBJ_TREND,0,T1,P3,T2,P4); // draws '\'
            ObjectSet(<Name2>,OBJPROP_RAY,FALSE);

Just have to generate appropriate names dynamically.

But I think the right way, given that you've already printed the values from the EA and they differ from what the indicators provided, is to check through your code for all parameters used to calculate the moving averages, rather than to plot out the lines via your EA - it serves no real purpose.

Arunkumar Kalyanasundaram
70
Arunkumar Kalyanasundaram  
Seng Joo Thio:

You can always draw trendlines without ray, from within your EA to depict the exact point that the crossover happened:

Just have to generate appropriate names dynamically.

But I think the right way, given that you've already printed the values from the EA and they differ from what the indicators provided, is to check through your code for all parameters used to calculate the moving averages, rather than to plot out the lines via your EA - it serves no real purpose.

Thank you, I will try this code to draw the lines, and I did check the code, its all exactly the same, I even tried the iMA function- as below (Please check the code and kindly guide me if there is something wrong... because the difference between both Indi and EA MAs are varies and sometimes really huge upto 400 points difference... ex if Indi MA5 value is 1.32300 the EA MA5 prints 1.32700 I'm totally lost and have no clue why... I tried with different forex companies demo accounts, still the same issue

//Indicator

//INIT Function
   int shift_begin=int(MathSqrt(period)+period+1);
   IndicatorShortName("Name");
   SetIndexBuffer(0,MA5);
   SetIndexBuffer(1,MA10);

   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);

   SetIndexDrawBegin(1,shift_begin);
   SetIndexDrawBegin(2,shift_begin);

//onCal function

   int limit=rates_total-prev_calculated;
   if(prev_calculated==0)limit--;
   else  limit++;

   for(i=0; i<limit && !IsStopped(); i++)
                MA5[i]  =       iMA(Symbol(), PERIOD_CURRENT, 5,0, 3, 0,Shift);
   for(i=0; i<limit && !IsStopped(); i++)
                MA10[i] =       iMAOnArray(MA5,0,(int)MathRound(period),0,3,i);

//------------------------------------------------------------------------
//EA Code
//------------------------------------------------------------------------

//Calc MA Function

   double MA5[],MA10[];
   ArraySetAsSeries(MA5,true);
   ArraySetAsSeries(MA10,true);

   max=1000;

   ArrayResize(MA5,max);
   ArrayResize(MA10,max);

   for(int i=max-1; i>=0; i--)
                MA5[i]  =       iMA(Symbol(), PERIOD_CURRENT, 5, 0, 3, 0,Shift);
   for(int i=max-1; i>=0; i--)
                MA10[i] =       NormalizeDouble(iMAOnArray(MA5,0,(int)MathRound(period),0,3,i),_Digits);
Seng Joo Thio
541
Seng Joo Thio  
Arunkumar Kalyanasundaram:

Thank you, I will try this code to draw the lines, and I did check the code, its all exactly the same, I even tried the iMA function- as below (Please check the code and kindly guide me if there is something wrong... because the difference between both Indi and EA MAs are varies and sometimes really huge upto 400 points difference... ex if Indi MA5 value is 1.32300 the EA MA5 prints 1.32700 I'm totally lost and have no clue why... I tried with different forex companies demo accounts, still the same issue

Since you have the indicator, you can just use iCustom in your EA to retrieve the values calculated by it, as follows:

  double MA5 = iCustom(Symbol(),PERIOD_CURRENT,<Indicator Name>,<Indicator parameters>,0,Bar);
  double MA10 = iCustom(Symbol(),PERIOD_CURRENT,<Indicator Name>,<Indicator parameters>,1,Bar);

This way, you can just focus on checking that the calculations within your indicator are exactly what you expected. 

I have tested, and these lines are able to retrieve the MA5 and MA10 values from your indicator, without any discrepancy.

To add comments, please log in or register