Daily Percent Change 1.0

Author: 2019 Rob Rice
Price Data Components
Series array that contains open prices of each barSeries array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
Daily Percent Change 1.0
//+------------------------------------------------------------------+
//|                                         Daily Percent Change.mq5 |
//|                                          Copyright 2019, Rob Rice|
//+------------------------------------------------------------------+
#property copyright   "2019 Rob Rice"
#property description "Daily Percent Change"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_level1  0.85
#property indicator_level2 -0.85
#property indicator_type1   DRAW_LINE
#property indicator_color1  LightSeaGreen
#property indicator_label1  "Daily Percent Change"

//--- input params

//---- buffers
double DPCBuffer[];
double C,O;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorSetString(INDICATOR_SHORTNAME,"Daily Percent Change");
//---- index buffer
   SetIndexBuffer(0,DPCBuffer,INDICATOR_DATA);
   ArraySetAsSeries(DPCBuffer,true);
//   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,100);
   return(INIT_SUCCEEDED);

//---- OnInit done
  }
//+------------------------------------------------------------------+
//| Calculation                                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

//--- check for bars count
   if(rates_total<1440/Period())
      return(0); //exit with zero result 

//--- prevent total recalculation
   int i=rates_total-1;
   if(prev_calculated>0)
      i=rates_total-prev_calculated -1;

//--- current value should be recalculated
   if(i<0)
      i=0;
//---
   while(i>=0)
     {
      datetime date=iTime(NULL,0,i);
      int Hour=TimeHourMQL4(date);
      int Minute=TimeMinuteMQL4(date);
      //     Print("i = ",i," Hour = ",Hour," Minute = ",Minute);

      if(Hour==0 && Minute==0)
        {
         O=iOpen(NULL,0,i);
        }

      C=iClose(NULL,0,i);

      if(O==0)
         DPCBuffer[i]=0;
      else
         DPCBuffer[i]=NormalizeDouble(((C-O)/O*100),6);
      //     Print(date," i = ",i," Open = ",O," Close = ",C," DPC = ",DPCBuffer[i]);
      i--;

     }

//----
   return(rates_total);
  }
//+------------------ Functions -----------------------------------------------+

int TimeHourMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.hour);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TimeMinuteMQL4(datetime date)
  {
   MqlDateTime tm;
   TimeToStruct(date,tm);
   return(tm.min);
  }
//+------------------------------------------------------------------+

Comments