Помогите разобраться с расчетом и построением сигнальной линии по данным индикатора

 

Пытаюсь постороить сигнальную DEMA в коде от вычесленных значений индикатора. Не могу понять как подбирается begin, вследствии чего очень часто получаются на выходе сигнальной либо пустые значения, либо нулевые.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
   
  if (rates_total<InpBars) return(0);
  int limit;
  if(prev_calculated>0) limit=1;
  else
   limit=ShiftBars; // Кол-во баров для отображения индикатора
  for(int i = limit-1; i >=0; i--) 
   {
    //--- Предварительный расчет
    .....
    .....
    .....
    //---
    OUY[i]=....;//Заполнение масива индикатора
   }  
//--- calculate EMA
   ExponentialMAOnBuffer(rates_total,prev_calculated,1,InpPeriodEMA,OUT,Ema);
//--- calculate EMA on EMA array
   ExponentialMAOnBuffer(rates_total,prev_calculated,InpPeriodEMA-1,InpPeriodEMA,Ema,EmaOfEma);
//--- calculate DEMA
   for(int i=InpPeriodEMA;i<rates_total && !IsStopped();i++)
      DemaBuffer[i]=2*Ema[i]-EmaOfEma[i]; // Сигнальная линия
  return(rates_total);
   }