Цена закрытия предыдущего месяца в тестере стратегий

 
Добрый вечер!

Есть индикатор, который отображает уровни максимума, минимума и уровень закрытия предыдущего месяца и отображает их на текущее время. В реальном времени все работает, но если его запустить в тестере стратегий, то он при начальном запуске все правильно просчитывает но как только появляется новый месяц - он начинает работать и ошибкой:

На скриншоте видно ошибку, индикатор почему-то промахивается на пару лет: цена закрытия 1.3313 это цена закрытия апреля, но не 2014 а закрытие АПРЕЛЯ 2010 года!

Никак не могу понять в чем проблема...

Код:

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1  DRAW_LINE
#property indicator_label1 "Month"
#property indicator_color1 clrDarkBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2



MqlRates Arr[2];
double IndiArr[];

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[])
   {
   for(int i=0;i<rates_total-1;i++)
   {
      CopyRates(NULL,PERIOD_MN1,time[i],2,Arr);
      IndiArr[i]=Arr[1].close;
   }
   return(rates_total);
   }

int OnInit()
  {
      SetIndexBuffer(0,IndiArr,INDICATOR_DATA);
      ArraySetAsSeries(Arr,true);
      return(INIT_SUCCEEDED);
  }

 

Вот это в режиме визуализации не работает, если запускать не на МN1

CopyRates(NULL,PERIOD_MN1,time[i],2,Arr);
 
evillive:

Вот это в режиме визуализации не работает, если запускать не на МN1

Разберёмся

Вы упомянули режим визуализации. Если без визуализации, то работает?

 
stringo:

Разберёмся

Вы упомянули режим визуализации. Если без визуализации, то работает?

Это защита MTF индикаторов от "заглядывания в будущее" в тестере стратегий и только при обращении к ТФ отличного от PERIOD_CURRENT из индикатора.

Но если разобраться что такое будущее, то легко можно понять, что значение индикатора старшего ТФ текущего бара, это может быть и да, может быть это будущее. Но каким образом получается будущим значение индикатора закрытого бара? Что-то тут не корректно сделано...

 
AlexeyVik:

Это защита MTF индикаторов от "заглядывания в будущее" в тестере стратегий и только при обращении к ТФ отличного от PERIOD_CURRENT из индикатора.

Но если разобраться что такое будущее, то легко можно понять, что значение индикатора старшего ТФ текущего бара, это может быть и да, может быть это будущее. Но каким образом получается будущим значение индикатора закрытого бара? Что-то тут не корректно сделано...

Это понятно (про будущее). Но:

1. Узнается и отображается цена закрытия ПРЕДЫДУЩЕГО бара старшего таймфрейма. А это уже история))

2. А про текущий бар старшего таймфрейма: Разве его закрытие не должно быть равно цене закрытия текущего таймфрейма. И здесь тоже при отображении ошибка. Цена закрытия текущего месяца РАВНА цене ТЕКУЩЕГО закрытия, т.е. цене в реальном времени.

Ошибки возникают только если бросать индикатор на график, если его использовать через эксперта - то ошибок нет, так как эксперт запускает индикатор на расчет каждый раз заново...

 
stringo:

Разберёмся

Вы упомянули режим визуализации. Если без визуализации, то работает?

Ошибки возникают только если бросать индикатор на график в режиме визуализации.

Если его использовать через эксперта - то ошибок нет, так как эксперт запускает индикатор на расчет каждый раз заново... Но весь смысл использовать индикатор в режиме визуализации, дабы наглядно смотреть.

И еще интересно почему ошибка на 4 ГОДА??? ведь месяц он правильно берет ошибается только в году, причем история подгружена намного дальше, примерно до 1992 года (и D1 и MN1)

 
andrex:
Это понятно (про будущее). Но:

1. Узнается и отображается цена закрытия ПРЕДЫДУЩЕГО бара старшего таймфрейма. А это уже история))

2. А про текущий бар старшего таймфрейма: Разве его закрытие не должно быть равно цене закрытия текущего таймфрейма. И здесь тоже при отображении ошибка. Цена закрытия текущего месяца РАВНА цене ТЕКУЩЕГО закрытия, т.е. цене в реальном времени.

Ошибки возникают только если бросать индикатор на график, если его использовать через эксперта - то ошибок нет, так как эксперт запускает индикатор на расчет каждый раз заново...

2. Это было бы так, если бы тестер моделировал тики для всех ТФ, но увы, для чужих ТФ берутся только цены OHLC. Так что при попытке узнать цену закрытия текущего месяца с меньшго ТФ тестер вернёт цену закрытия месяца на котором началось тестирование. Раньше тестер возвращал цену закрытия текущего месяца, но при этом происходило "путешествие во времени", ведь цена-то из будущего, раз месяц ещё не закрыт, а тестер недостаточно гибок, чтобы подставить текущую цену из родного ТФ. Разработчики решили что нефиг в будущее смотреть, у цыган хлеб отнимать, вот и пресекли )))

Хотя было бы лучше просто немного логику включить и сделать подмену цены закрытия со старшего ТФ на цену закрытия, смоделированную для родного ТФ, цена-то та же, если в реальном времени смотреть...

 
evillive:

...Было бы лучше ... сделать подмену цены закрытия со старшего ТФ на цену закрытия, смоделированную для родного ТФ, цена-то та же, если в реальном времени смотреть...
Вот тоже думаю - это же логично и правильно - для старших периодов брать текущую цену закрытия с тестируемого периода, она же - Bid тестируемого периода.