What's wrong with my code.

 
This indicator is supposed to paint the candles based on RSI settings. Don't know why it isn't working right.
//+------------------------------------------------------------------+
//|                                                  RSI CANDLES.mq5 |
//|                                          Copyright 2019, Jiemasu |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Jiemasu"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   1
//--- input parameters
input int      RSI_Period=7;
//--- plot Bullish
#property indicator_label1  "Bullish"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrLime
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- plot Neutral
#property indicator_label2  "Neutral"
#property indicator_type2   DRAW_COLOR_CANDLES
#property indicator_color2  clrBlue;
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
//--- plot Bearish
#property indicator_label3  "Bearish"
#property indicator_type3   DRAW_COLOR_CANDLES
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  3
//input    int RSI_Period=7

//--- indicator buffers
double         BullishBuffer1[];
double         NeutralBuffer1[];
double         BearishBuffer1[];

double         Candle_Colors[];
double         buffer_tmp[];
double         buffer_RSI[];
int            handle_RSI=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BullishBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,NeutralBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,BearishBuffer1,INDICATOR_DATA);
   
   SetIndexBuffer(3,Candle_Colors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(4,buffer_RSI,INDICATOR_CALCULATIONS);
   
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);
   
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Lime);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Blue);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,Red);
   
   handle_RSI=iCustom(_Symbol,_Period,"Examples\\RSI,7");
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   for(int i=prev_calculated;i<=rates_total-1;i++)
      {
         CopyBuffer(handle_RSI,0,BarsCalculated(handle_RSI)-i-1,1,buffer_tmp);
         buffer_RSI[i]=buffer_tmp[0];
         
         if(buffer_RSI[i]>55)
         {
            Candle_Colors[i]=0;
         }
         else if(buffer_RSI[i]<45)
            {
               Candle_Colors[i]=2;
            }
            else
            {Candle_Colors[i]=1;} 
      }
   
  
   
//--- return value of prev_calculated for next call
   return(rates_total-1);
  }
//+------------------------------------------------------------------+
 
Why do not you assign any value to the indicator buffers?
Reason: