Inserindo média móvel no indicador OBV

 

Bom dia pessoal!


Estou tentando criar uma estratégia com base no OBV, mas para isso preciso inserir uma média móvel simples sobre o indicador OBV.

Sou novo em programação, e tentei criar uma lógica conforme o código abaixo.

Porém, dessa forma, ele me retorna somente uma linha reta horizontal.... 

Se puderem me ajudar eu agradeço muito. E espero em breve poder contribuir também com a comunidade!

//+------------------------------------------------------------------+
//|                                                   OBV_MEDIAS.mq5 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Rafael O. Carvalho"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot OBV
#property indicator_label1  "OBV"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlack
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Média Curta
#property indicator_label2  "Média Curta"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlueViolet
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         OBVBuffer[];
double         MediaCurtaBuffer[];
//--- Indicator Controlers
int OBVHandle;
//--- Inputs
input int INP_PeriodMediaCurta = 12;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OBVBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MediaCurtaBuffer,INDICATOR_DATA);
   
   ArraySetAsSeries(OBVBuffer, true);
   ArraySetAsSeries(MediaCurtaBuffer, true);
//---
   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[])
  {
      //--- Cálculo OBV 
      OBVHandle = iOBV(_Symbol,_Period,VOLUME_TICK);
      CopyBuffer(OBVHandle,0,0,rates_total,OBVBuffer);
      
      MediaCurta(rates_total);

   

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void MediaCurta(int countCandles)
   {   
      //--- Cálculo Média Curta
      for(int i = 1 ; i < countCandles - INP_PeriodMediaCurta - 1 ; i++)
         {
            double prevOBV = 0;
            for(int j = 1 ; j <= INP_PeriodMediaCurta ; j++)
              {
                  prevOBV = prevOBV + (OBVBuffer[j] / INP_PeriodMediaCurta);
              }
            MediaCurtaBuffer[i-1] = prevOBV;
         }        
   }
Razão: