Вопрос про iBarshift MT5

 
Доброго времени суток! Столкнулся с такой проблемой: Период MN , iBarShift не находит бар по времени хотя время определяется нормально. Может кто подскажет как решить этот головняк.
 
 пример приведите. принтуйте ответ. Может Вы путаете индекс и цену, ну как понять это по вашему посту.
 
 
       
        tcp=(datetime)ObjectGetInteger(0,name_hlineCP[0],OBJPROP_TIME,0);
        t4=(datetime)ObjectGetInteger(0,name_trline[1],OBJPROP_TIME,1);
               
        if(ObjectFind(0,name_pnt[1])!=-1) ObjectGetInteger(0,name_pnt[1],OBJPROP_TIME,0,t4); 
              
       
     int bar1=iBarShift(Symbol(),PERIOD_CURRENT,tcp,false);
     int bar4=iBarShift(Symbol(),PERIOD_CURRENT,t4,false);
     
     int range=bar1-bar4;
     

     Print(">>>> bar1 >>> = ",bar1,">>>> bar4 >>> = ",bar4,">>>> range >>> = ",range," timeTCP =",TimeToString(tcp,TIME_DATE|TIME_MINUTES));

Пишет вот такое : (USDCHF,MN1) >>>> bar1 >>> = -1>>>> bar4 >>> = -1>>>> range >>> = 0 timeTCP =2006.10.01 00:00

 


 
А что такое range, что там должно быть?
 
Что этот код сделать должен вообще?
 
range это как видно из кода номер бара1- номер бара4 почему в данном случае -1-1=0 тоже не понятно. 
 
Artem Sulejmanov #:
range это как видно из кода номер бара1- номер бара4 почему в данном случае -1-1=0 тоже не понятно. 
Это вижу, а зачем это всё, надо цену получить или что.
 
данный код работает с линиями на графике но смысл в том что время бара он находит, а сам бар нет. Еще момент эта ситуация прекращается  и работает все нормально на более свежих годах. Хотя  iBars количество баров определяет нормально
 
G1G2G3 #:
Это вижу, а зачем это всё, надо цену получить или что.

как раз нужно и количество баров (range) и их местоположение относительно 0 бара

 
Мне кажется, Вы сами нашли причину. Нету бара значит такого.

Цитата из справки """Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact)."""
А уравнение равно нулю потому что у вас не "-1-1=0". А "x-z=a" x=-1; z=-1; Получилось -1-(-1)=0. Равенство верное.

Подставляйте значения вручную, не через функции. Я так все косяки в коде нахожу.

 
G1G2G3 #:
Мне кажется, Вы сами нашли причину. Нету бара значит такого.

Цитата из справки """Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact)."""
А уравнение равно нулю потому что у вас не "-1-1=0". А "x-z=a" x=-1; z=-1; Получилось -1-(-1)=0. Равенство верное.

Подставляйте значения вручную, не через функции. Я так все косяки в коде нахожу.

Насчет нуля согласен (не учел некоторые моменты), а вот насчет бара нет.

iBarShift

iBarShift Поиск бара по времени. Функция возвращает индекс бара, в который попадает указанное время.

iBarShift

exact=false  [in]  Возвращаемое значение, если бар на указанное время не найден. При значении exact=false iBarShift возвращает индекс ближайшего бара, у которого время открытия меньше указанного (time_open<time).

Заметьте время он определяет нормально, и Период тотже и время открытия бара норм.

Причина обращения: