Если последний тик "открывает" новый бар, то if(time>LastBar) становится ложным - потому что теперь time == LastBar
Не уверен, что вы имеете в виду? Я думаю, что "последний тик" не имеет значения. Когда вы используете функцию, либо время=LastBar, либо нет.
И позже мы приземляемся здесь:
А теперь shift == 0 , что возвращает -1 вместо 0!
Если time==Lastbar, то shift=1, а не 0. Так что ошибки нет (shift берется из Bars(), которая является счетчиком баров, поэтому мы возвращаем 'shift-1').
Поэтому я думаю, что это:
должно быть изменено на
Calli
Ваше исправление тоже будет работать, но случай 'time==LastBar' обрабатывается как "нормальный" случай.
Утверждение
if(time>LastBar)
было добавлено в качестве исправления ошибки, если время больше, чем время 0 текущего бара.
Thank you, I have to fix my code also when exact is true, as I misunderstood this parameter. English documentation for iBarShift is wrong.
I think this is my error too, iBarShift should return bar which contain specified time (not with exact open time).
Could I use your function in my library (with your copyrights, of course)? If it is faster and correct, why should I reinvent the wheel?)
I think this is my error too, iBarShift should return bar which contain specified time (not with exact open time).
Could I use your function in my library (with your copyrights, of course)? If it is faster and correct, why should I reinvent the wheel?)
Thank you, I have to fix my code also when exact is true, as I misunderstood this parameter. English documentation for iBarShift is wrong.
The mql5 bug is on Bars() function, I reported it to Service Desk.
В Build 880 исправлена ошибка в Bars(), и теперь все работает нормально.
косяковая версия. на м2 с м1 значения при тру, почему-то имеют значения не -1, а на нулевом баре идет возврат на 1-й бар.
Функция кривая как минимум в двух местах:
1) if(time>LastBar)
return(0);
Если exact=true, логика должна возвращать -1 в случае явной не принадлежности time последнему бару, т.е. если time>LastBar+PeriodSeconds(timeframe).
2) if(CopyTime(symbol,timeframe,time,1,checkcandle)==1)
...
return(-1);
Опять же, если exact=false, то должен быть возвращен ближайший бар, в этом случае Bars(symbol, timeframe)-1.
Я думаю, что в вашем коде есть небольшая ошибка:
Если последний тик "открывает" новый бар, то if(time>LastBar) становится ложным - потому что теперь time == LastBar
И позже мы попадаем сюда:
И теперь shift == 0, что возвращает -1 вместо 0!
Поэтому я думаю, что это:
должно быть изменено на
Calli
Я думаю, что в вашем коде есть небольшая ошибка:
Если последний тик "открывает" новый бар, то if(time>LastBar) становится ложным - потому что теперь time == LastBar
И позже мы приземляемся здесь:
А теперь shift == 0 , что возвращает -1 вместо 0!
Поэтому я думаю, что это:
должно быть изменено на
Calli
Ваше исправление тоже будет работать, но случай 'time==LastBar' обрабатывается как "нормальный" случай.
Утверждение
if(time>LastBar)было добавлено в качестве исправления ошибки, если время больше, чем время 0 текущего бара.