Как вам такой подход кнаписанию кастом индикаторов на примере RSI?

 
Мне кажется локаничнее хоть и не изменяется значение на последнем не сформировавшемся нулевом баре.
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
 
extern int n = 14;
 
double values[], up, down;
int newBars, lastBars, value;
string shortName;
 
int init() {
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, values);
   shortName = "mut_rsi(" + n + ")";
   IndicatorShortName(shortName);
   SetIndexLabel(0, shortName);
   SetIndexDrawBegin(0, n);
   return(0);
}
 
int deinit() {
   return(0);
}
 
int start() {
   if(Bars <= lastBars)
      return(0);
   for(int b = Bars - lastBars; b >= 1; b--) {
      if(Close[b] > Close[b + 1]) {
         up = (up * (n - 1) + Close[b] - Close[b + 1]) / n;
         down = down * (n - 1) / n;
      } else {
         up = up * (n - 1) / n;
         down = (down * (n - 1) + Close[b + 1] - Close[b]) / n;
      }
      if(down == 0)
         values[b] = 0;
      else
         values[b] = 100 - 100 / (1 + up / down);
   }
   values[0] = values[1];
   lastBars = Bars;
}