Download MetaTrader 5

Any help about this code

To add comments, please log in or register
kemalturgay
265
kemalturgay 2014.11.01 20:03 

I'm trying to learn MQL5 from working codes from the code base.

For example ...

When correcting the draw begin in the following code (underlined row in the code) ... I think that it should be if(begin>0) PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartCalcPosition) ... right?

//+------------------------------------------------------------------+ //|                                                     Momentum.mq5 | //|                        Copyright 2009, MetaQuotes Software Corp. | //|                                              http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link      "http://www.mql5.com" //---- indicator settings #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots   1 #property indicator_type1   DRAW_LINE #property indicator_color1  DodgerBlue //---- input parameters input int InpMomentumPeriod=14; // Period //---- indicator buffers double    ExtMomentumBuffer[]; //--- global variable int       ExtMomentumPeriod; //+------------------------------------------------------------------+ //| Custom indicator initialization function                         | //+------------------------------------------------------------------+ void OnInit()   { //--- check for input value    if(InpMomentumPeriod<0)      {       ExtMomentumPeriod=14;       Print("Input parameter InpMomentumPeriod has wrong value. Indicator will use value ",ExtMomentumPeriod);      }    else ExtMomentumPeriod=InpMomentumPeriod; //---- buffers      SetIndexBuffer(0,ExtMomentumBuffer,INDICATOR_DATA); //---- name for DataWindow and indicator subwindow label    IndicatorSetString(INDICATOR_SHORTNAME,"Momentum"+"("+string(ExtMomentumPeriod)+")"); //--- sets first bar from what index will be drawn    PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtMomentumPeriod-1); //--- sets drawing line empty value    PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); //--- digits    IndicatorSetInteger(INDICATOR_DIGITS,2);   } //+------------------------------------------------------------------+ //|  Momentum                                                        | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total,                 const int prev_calculated,                 const int begin,                 const double &price[])   { //--- start calculation    int StartCalcPosition=(ExtMomentumPeriod-1)+begin; //---- insufficient data    if(rates_total<StartCalcPosition)       return(0);

//--- correct draw begin    if(begin>0) PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartCalcPosition+(ExtMomentumPeriod-1));

//--- start working, detect position    int pos=prev_calculated-1;    if(pos<StartCalcPosition)       pos=begin+ExtMomentumPeriod; //--- main cycle    for(int i=pos;i<rates_total && !IsStopped();i++)      {       ExtMomentumBuffer[i]=price[i]*100/price[i-ExtMomentumPeriod];      } //--- OnCalculate done. Return new prev_calculated.    return(rates_total);   } //+------------------------------------------------------------------+   

To add comments, please log in or register