подскажите по iBarShift в тестере

 

функция  iBarShift не работает возвращает 0,  в чем проблема?

тело цикла  i=1(закрытый бар), советник тестируется на М5 (по ценам открытия, и по тикам пробовал).

datetime tam=Time[i];

int shift=iBarShift(_Symbol, PERIOD_D1,tam, true );

int err=GetLastError();   Print ("&&& shift=",shift," err=",err," time=",tam," t=",TimeToStr(tam)); 

if (shift<0) {shift=lastshift;  Print ("err НЕТ КОТИРОВОК на D1 " );}


в отчете

 &&& shift=0 err=0 time=1420445400 t=2015.01.05 08:10

 &&& shift=0 err=0 time=1420445700 t=2015.01.05 08:15

 &&& shift=0 err=0 time=1420446000 t=2015.01.05 08:20


последние котировки  закачаны   M5, D1   2015.01.16


если запускаю тест на D1 выдает правильно shift=1

 
Потому, что 5 минут чуть меньше суток и закрытие пятиминутной свечи не означает закрытие дневной. 
 
tara:
Потому, что 5 минут чуть меньше суток и закрытие пятиминутной свечи не означает закрытие дневной. 
  спасибо понял, в индикаторе конструкция должна работать, в тестере это всегда будет формирующаяся свеча на D1 с индексом 0, shift можно не расчитывать
 
Не так. Тестер или нет - без разницы. Всегда будет 0, если таймфрейм меньше 1440. 
 
tara:
Не так. Тестер или нет - без разницы. Всегда будет 0, если таймфрейм меньше 1440. 

почему тогда на мульти-таймфреймовых индикаторах делают расчет

https://forum.mql4.com/ru/5977#24876

for(n=limit;n>=0;n--)
      {
      n1=iBarShift(Symbol(),p1,Time[n]);
      n2=iBarShift(Symbol(),p2,Time[n]);
      n3=iBarShift(Symbol(),p3,Time[n]);
      SRC1[n]=iCustom(NULL,p1,"SpearmanRankCorr",
               rangeN,CalculatedBars,Maxrange,0,n1);
      SRC2[n]=iCustom(NULL,p2,"SpearmanRankCorr",
               rangeN,CalculatedBars,Maxrange,0,n2);
      SRC3[n]=iCustom(NULL,p3,"SpearmanRankCorr",
             rangeN,CalculatedBars,Maxrange,0,n3);
      }
 
Потому, что там n принимает разные значения и пока n*ТФ>p1, значение n1 больше нуля. 
Причина обращения: