CODING IS HARD!!! I did something similar with MAs. Figured it out on my own. Having trouble with RSI. Please help!!

 
//+------------------------------------------------------------------+
//|                                        My B.A.C.A. Indicator.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 6
#property indicator_plots   2
//--- plot Up
#property indicator_label1  "Up"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Down
#property indicator_label2  "Down"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrFuchsia
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters

//--- indicator buffers
double         UpBuffer[];
double         DownBuffer[];
double         RSI_Buffer[];
//double         Tmp_Buffer[];

int            RSI_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,UpBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,DownBuffer,INDICATOR_DATA);
   
   SetIndexBuffer(2,RSI_Buffer,INDICATOR_CALCULATIONS);
   
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
   
   RSI_handle=iCustom(_Symbol,_Period,"Examples\\RSI",14);
   
   return(0);
   
//---
   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[])
  {
//---

//CopyBuffer(RSI_handle,0,BarsCalculated(RSI_handle)-0,-1,Tmp_Buffer);

//This code puts an up arrow on low if 9 SMA > 20 SMA and price close below 9 SMA and then price closes above 9 SMA.
//The opposite for short set ups.
   CopyBuffer(RSI_handle,0,BarsCalculated(RSI_handle),-1,RSI_Buffer);
   
   for (int i = 0; i < rates_total; i++)
      {
      /*int mycalc=CopyBuffer(RSI_handle,0,BarsCalculated(RSI_handle)-i-1,1,Tmp_Buffer);
      if(mycalc=0)
       {return(0);}
       RSI_Buffer[i]=Tmp_Buffer[0];*/
      //--- If the current Close price is higher than the previous one, draw an arrow
      
      if(RSI_Buffer[i-2] < 55 && RSI_Buffer[i-1] < 55 && RSI_Buffer[i] >= 55)
         {UpBuffer[i]=low[i];}
      
      else if(RSI_Buffer[i-2] > 45 && RSI_Buffer[i-1] > 45 && RSI_Buffer[i] <= 45)
         DownBuffer[i]=high[i];
         }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Never mind. I figured it out.
 
You can use iRSI instead of iCustom this is faster, and do you really want to copy the whole indicator buffer on every tick?
Reason: