Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попробовал сделать функцию такого вида:
где переменная TimeNow задаётся в области видимости всей программы и определяется в функции OnCalculate как время последнего текущего бара из массива time. На графике и в тестере работает, а на указанную ошибку попробую данный вариант в понедельник во время работы рынка. Параметр exact оставлен исключительно для "совместимости"...
У вас нет параметра exact, кроме того данная конструкция напоминает приведённый мною выше кусок текущего кода, который не работает в описанной ситуации.
Напоминать - не значит быть. Пока не попробуете, не поймёте.
Я пробовал вот эту вашу конструкцию https://www.mql5.com/ru/forum/160683/page5#comment_3834201
картину получил подобную.
Я пробовал вот эту вашу конструкцию https://www.mql5.com/ru/forum/160683/page5#comment_3834201
картину получил подобную.
Я проверял - работает идентично iBarShift()
Вы ищите дальше.
Поиск по статьям и форуму дал несколько вариантов, но все они имеют одну проблему. После нажатия на кнопку "обновить" контекстного меню графика, все значения смещаются вперёд. На скринах пример.
после обновить ->
а это пробовали?
https://www.mql5.com/ru/code/1864
Вычисляем Bars за промежуток времени. Это и будет искомая функция
https://www.mql5.com/ru/docs/series/bars
а это пробовали?
https://www.mql5.com/ru/code/1864
Да всё перепробовал, многие функции работают корректно в тестере и на графике, за исключением описанной мною ситуации, к ней решения пока так и не нашёл... Буфера смещаются при таком варианте обновления, не исключено, что дело не в функции поиска номера бара, а в чём-то другом...
К сожалению, у лучших решений, которые я находил на этом форуме, был общий дефект, который выражается вот этим 'чуть'
Единственное, что требуется учесть, так это тот факт, что knownTime должно попадать четко на время открытия бара (или быть чуть "правее" него). Иначе результат будет на 1 меньше.
И поэтому они не более полезны чем штатный Bars. Гарантированно правильный результат даёт единственный вариант - примитивный перебор баров со счётчиком
Мне кажется там проблема в нулевой секунде бара. Получается бар в нулевую секунду в одном использовании времени считается, а в другом нет. Даже была тема с настоятельным, но не очень внятным объяснением этой проблемы и в связи с этой невнятностью топик-стартера неоднократно банили и в результате ничего не изменилось.
В общем, я как-то проверял функцию Bars и помню что получалось правильнее если указывать не текущее время, а время открытия нулевого бара. И ещё к стартовому времени прибавить единицу. Но прежде чем это использовать проверьте сами.
Мне кажется там проблема в нулевой секунде бара. Получается бар в нулевую секунду в одном использовании времени считается, а в другом нет. Даже была тема с настоятельным, но не очень внятным объяснением этой проблемы и в связи с этой невнятностью топик-стартера неоднократно банили и в результате ничего не изменилось.
В общем, я как-то проверял функцию Bars и помню что получалось правильнее если указывать не текущее время, а время открытия нулевого бара. И ещё к стартовому времени прибавить единицу. Но прежде чем это использовать проверьте сами.
Алексей, объясни, а что в этой функции не так? Это от fxsaber
int GetBarShift(const string symbol_name, const ENUM_TIMEFRAMES timeframe, const datetime time) {
int res=-1;
datetime last_bar;
if(SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE,last_bar)) {
if(time>last_bar) res=0;
else {
const int shift=Bars(symbol_name,timeframe,time,last_bar);
if(shift>0) res=shift-1;
}
}
return(res);
}
//+------------------------------------------------------------------+
Много раз использую, и вродь нигде ещё не сталкивался с описываемыми багами.
Может чего проглядел?