Custom indicator values disappears after new tick forms

 
//+------------------------------------------------------------------+
//|                                                        renko.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict



//---

//---

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   7


#define Point _Point
#define Digits _Digits



//==========================

//--- input parameters
input int points=250;
input double ratio = 1.8;
input double renko_slip = 0.010;

double boxsize = (points* Point);

int Bars=Bars(_Symbol,_Period);



//--- indicator buffers
double renko_open[];
double renko_close[];
double renko_high[];
double renko_low[];
double entry[];
double wickratio[];
double slip_condition[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,renko_open, INDICATOR_DATA);
   PlotIndexSetString(0,PLOT_LABEL,"renko OPEN");
   SetIndexBuffer(1,renko_high, INDICATOR_DATA);
   PlotIndexSetString(1,PLOT_LABEL,"renko HIGH");
   SetIndexBuffer(2,renko_low,INDICATOR_DATA);
   PlotIndexSetString(2,PLOT_LABEL,"renko LOW");
   SetIndexBuffer(3,renko_close,INDICATOR_DATA);
   PlotIndexSetString(3,PLOT_LABEL, "renko CLOSE");

   SetIndexBuffer(4,wickratio, INDICATOR_DATA);
   PlotIndexSetString(4,PLOT_LABEL,"wick");
   SetIndexBuffer(5,slip_condition, INDICATOR_DATA);
   PlotIndexSetString(5,PLOT_LABEL,"slip");
   SetIndexBuffer(6,entry, INDICATOR_DATA);
   PlotIndexSetString(6,PLOT_LABEL,"entry");


   ArraySetAsSeries(renko_open,true);
   ArraySetAsSeries(renko_close,true);
   ArraySetAsSeries(renko_high,true);
   ArraySetAsSeries(renko_low,true);
   ArraySetAsSeries(entry,true);
   ArraySetAsSeries(wickratio,true);
   ArraySetAsSeries(slip_condition,true);
   ArrayInitialize(renko_close,0.0);
   ArrayInitialize(renko_open,0.0);
   ArrayInitialize(renko_high,0.0);
   ArrayInitialize(renko_low,0.0);
   ArrayInitialize(entry,0.0);
   ArrayInitialize(slip_condition,0.0);
   ArrayInitialize(wickratio,0.0);
  



   IndicatorSetInteger(INDICATOR_DIGITS,Digits-1);


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])

//=======================================================Create renko===================================================================
{


  
   double Close[];
   ArraySetAsSeries(Close,true);
   CopyClose(_Symbol,_Period,0,Bars,Close);

   double Open[];
   ArraySetAsSeries(Open,true);
   CopyOpen(_Symbol,_Period,0,Bars,Open);

   double High[];   // number of elements to copy
   ArraySetAsSeries(High,true);
   CopyHigh(_Symbol,_Period,0,Bars,High);

   double Low[]; // number of elements to copy
   ArraySetAsSeries(Low,true);
   CopyLow(_Symbol,_Period,0,Bars,Low);





  

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+






for(int i = rates_total-3; i>=0 ; i--)
  {

   if(Close[i]>Open[i])
     {
      if(MathFloor(NormalizeDouble(Close[i],_Digits-1)/boxsize)*boxsize >= Open[i])
        {
         renko_close[i] = MathFloor(NormalizeDouble(Close[i],_Digits-1)/boxsize)*boxsize;
         renko_open[i] = renko_close[i] - boxsize;

        }
     }




   else
      if(Close[i]<Open[i])
        {
         if(MathCeil(NormalizeDouble(Close[i],_Digits-1)/boxsize)* boxsize <= Open[i])
           {
            renko_close[i] = MathCeil(NormalizeDouble(Close[i],_Digits-1)/boxsize) *  boxsize;
            renko_open[i] = renko_close[i] + boxsize;

           }
        }


      else
        {
         renko_close[i] = 0.0 ;
         renko_open[i] = 0.0;

        }


  }

//=================================================== erase=========================================================
for(int j = rates_total-3; j>=0; j--)
  {

   if(renko_close[j] != 0)
     {
      int count = 0;
      for(int k= j+1 ; k<rates_total-2 ; k++)
        {
         if(renko_close[k] == 0)
           { count = count +1;}
         else
           {
            count = count+1;
            break;
           }
        }



      if(renko_close[j] > renko_open[j])  // if current green
        {
         if(renko_close[j+count] < renko_open[j+count] && renko_close[j] < renko_open[j+count]+ boxsize)
           {
            renko_close[j]= 0.0;
            renko_open[j]= 0.0;
           }

         else
            if(renko_close[j+count]>renko_open[j+count] && renko_close[j] < renko_close[j+count]+ boxsize)
              {
               renko_close[j]= 0.0;
               renko_open[j]= 0.0;
              }
        }


      else
         if(renko_close[j] < renko_open[j])
           {
            if(renko_close[j+count] > renko_open[j+count] && renko_close[j] > renko_open[j+count]- boxsize)
              {
               renko_close[j]= 0.0;
               renko_open[j]= 0.0;
              }

            else
               if(renko_close[j+count] < renko_open[j+count] && renko_close[j] > renko_close[j+count]-boxsize)
                 {
                  renko_close[j]= 0.0;
                  renko_open[j]=0.0;
                 }
           }
     }
  }




//===================================================for subsequent bar==================================================================


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
for(int k = rates_total-3; k>=0; k--)
  {
   if(renko_close[k] != 0 && renko_close[k+1] ==0)
     {
      int count = 0;

      for(int n = k+1 ; n<rates_total-2 ; n++)
        {
         if(renko_close[n]==0)
           {
            count = count +1 ;
           }
         else
           {
            count =count+1;
            break;
           }
        }

      if(renko_close[k]>renko_open[k])
        {

         renko_low[k] = Close[iLowest(NULL,0,MODE_CLOSE, count, k)]+ (5*Point);
         if(renko_low[k]<= renko_open[k]-boxsize)
           {
            renko_low[k] = Close[iLowest(NULL,0,MODE_CLOSE, count, k)]+ (5*Point);
            renko_high[k]= renko_close[k];
           }

         else
           {
            renko_low[k] = renko_open[k];
            renko_high[k] = renko_close[k];
           }
        }

      else
         if(renko_close[k]<renko_open[k])
           {

            renko_high[k] = (Close[iHighest(NULL, 0,MODE_CLOSE, count, k)])+ (5*Point);
            if(renko_high[k] >= renko_open[k]+ boxsize)
              {
               renko_high[k] = (Close[iHighest(NULL, 0,MODE_CLOSE, count, k)])+ (5*Point);
               renko_low[k] = renko_close[k];
              }

            else
              {
               renko_high[k]= renko_open[k];
               renko_low[k] =renko_close[k];
              }
           }
     }
   else
      if((renko_close[k]!=0 && renko_close[k+1]!=0))
        {
         if(renko_close[k]>renko_open[k])
           {
            renko_low[k] = renko_open[k];
            renko_high[k] = renko_close[k];
           }

         else
            if(renko_close[k]<renko_open[k])
              {
               renko_low[k] = renko_close[k];
               renko_high[k] = renko_open[k];
              }
        }

..
return(rates_total)

Hi guys, I ran into this problem where indicator values appear and disappears after new ticks form. It was fine using the green play button on debugger but problems appear after i tried to insert the indicator to a chart. When debug using live price, it shows array out of range but i cant seem to find the problem to this. Will appreciate any suggestion/ solutions thanks!