Проблема с iMA по цене закрытия, подскажите!

 

Столкнулся с такой проблемой. Решил протестировать индикатор в тестере и вот что происходит, при загрузке тестера индикатор отображается как надо:

А вот после того когда я нажимаю start, линия по цене закрытия рисует белиберду:

Что я делаю не так?

#property strict

//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1  Blue
#property indicator_color2  Red
//---- input parameters
input ENUM_TIMEFRAMES InpHeadTimeframe=PERIOD_D1; // Старший таймфрейм
input int InpHeadPeriodMa=14; // Перид MA для старшего таймфрейма
input ENUM_MA_METHOD InptHeadMethodMa=MODE_EMA;
//---- indicator buffers
double BufferOpen[];
double BufferClose[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(void)
  {
   IndicatorDigits(Digits);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,BufferOpen);
   SetIndexBuffer(1,BufferClose);
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
//---- index labels
   SetIndexLabel(0,"Price open");
   SetIndexLabel(1,"Price close");

   ArraySetAsSeries(BufferOpen, true);
   ArraySetAsSeries(BufferClose, true);
  }
//+------------------------------------------------------------------+
//| Bill Williams' Alligator                                         |
//+------------------------------------------------------------------+
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[])
  {
   int limit=rates_total-prev_calculated;
   int IndexByHead=0;
//---- main loop
   for(int i=0; i<limit; i++)
     {
      if (iTime(NULL, 0, i) < iTime(NULL, InpHeadTimeframe, IndexByHead)) {
         IndexByHead++;
      }
      BufferOpen[i]=iMA(NULL,InpHeadTimeframe,InpHeadPeriodMa,0,InptHeadMethodMa,PRICE_OPEN,IndexByHead);
      BufferClose[i]=iMA(NULL,InpHeadTimeframe,InpHeadPeriodMa,0,InptHeadMethodMa,PRICE_CLOSE,IndexByHead);
     }
//---- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Красная линия у Вас рисуется по ценам закрытия. Т.е. на текущем баре при работе тестера закрытие меняется.
Открытие же остаётся одно на протяжении всего бара.

"Что я делаю не так?" - Трудно сказать, не зная что Вы хотите получить от этого индикатора.
То, что Вы написали в коде, то он и делает.
 
Andrei Fandeev:
Красная линия у Вас рисуется по ценам закрытия. Т.е. на текущем баре при работе тестера закрытие меняется.
Открытие же остаётся одно на протяжении всего бара.

Точно. Спасибо!