Помогите с ошибкой - array out of range

 
//+------------------------------------------------------------------+
//|                                                           mac.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot DW
#property indicator_label2  "DW"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

//--- indicator buffers
double         UPBuffer[];
double         DWBuffer[];
double         OL_Buffer[];
double         SP_Buffer[];

int Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,UPBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,DWBuffer,INDICATOR_DATA);

   SetIndexBuffer(2,OL_Buffer,INDICATOR_CALCULATIONS);

   Handle=iMACD(_Symbol,PERIOD_CURRENT,12,26,9,PRICE_CLOSE);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,    // размер массива price[];
                 const int prev_calculated,// количество доступных баров ;
                 // на предыдущем вызове;
                 const int begin,// с какого индекса в массиве
                 // price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
//---      
   static bool error=true;
   int start;
   if(prev_calculated==0) // Первое выполнение функции OnCalculate() после запуска индикатора
     {
      error=true; // Установим значение true, что бы индикатор был рассчитан для всех баров
     }
   if(error) // Значение переменной error=true, значит это первое выполнение функции после
      // запуска индикатора, или на предыдущем запуске была ошибка копирования данных
     {
      start=begin+1;
      error=false;
     }
   else
     {
      start=prev_calculated-1;
     }

   if(CopyBuffer(Handle,0,0,rates_total-start,OL_Buffer)==-1) // Копирования данных главной лини индикатора
     {
      error=true; // Не удалось скопировать данные, устанавливаем переменной error значение true, чтобы полностью пересчитать
                  // индикатор при следующем вызове функции OnCalculate()

      return(0);  // Завершаем работу функции
     }

   for(int i=start;i<rates_total;i++)
     {
      Print(DoubleToString(OL_Buffer[i]));
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Здравсвуйте! Помогите разобраться. Не могу понять почему ошибка - array out of range ?  Код и сам индикатор прилагаю
Файлы:
mac.mq5  7 kb
 
#property indicator_buffers 2
#property indicator_plots   2

В этом индикаторе три буфера в индикаторе, должно быть так:

#property indicator_buffers 3
#property indicator_plots   2


 

 
Спасибо!
Причина обращения: