Запустил. Какую то фигню вы нагородили. На каждом тике срабатывает цикл в 41 итерацию.
Правильно, цикл прекращается, как только находит не нулевое значение функции iTime(...) Посмотрите, с какой даты у вас начинается график. Код я, кстати, другой прикрепил в конце 12 страницы. Там дата строкой показывается.
Теперь посмотрите на значение rates_total в логах. У вас 1000000 баров стоит в настройках макс. баров на графике. Так начиная с 1000001 бара индикатор видит бары (хотя их нет на графике), а iTime и друие с ней баров не видят.
Отсчёт идёт от текущего бара для простоты восприятия. А так это с 0 по 39 бар.
Правильно, цикл прекращается, как только находит не нулевое значение функции iTime(...) Посмотрите, с какой даты у вас начинается график.
Теперь посмотрите на значение rates_total в логах. У вас 1000000 баров стоит в настройках макс. баров на графике. Так начиная с 1000001 бара индикатор видит бары (хотя их нет на графике), а iTime и друие с ней баров не видят.
Отсчёт идёт от текущего бара для простоты восприятия. А так это с 0 по 39 бар.
Да, настройку макс баров вернул на 1000000. По rates_total получается всё что меньше ляма, то доступно для чтения, то что больше ляма 1000001, выход за пределы макс баров. Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. )) Используйте код который показал, проблем нет с ним.
Да, настройку макс баров вернул на 1000000. По rates_total получается всё что меньше ляма, то доступно для чтения, то что больше ляма 1000001, выход за пределы макс баров. Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. )) Используйте код который показал, проблем нет с ним.
Ну вот, я про это пишу. И при этом, то что больше ляма даже нет на графике.
Я вообще другой код делаю. Этот написал просто для демонстрации не согласованности работы функций iTime (и других) и таймсерий индикатора.
Andrey Kaunov #: Ну вот, я про это пишу. И при этом, то что больше ляма даже нет на графике.
Я вообще другой код делаю. Этот написал просто для демонстрации не согласованности работы функций iTime (и других) и таймсерий индикатора.
Кажется понял в чём может быть проблема. Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные. Возможно тот же принцип и для построения исторических данных в индикаторе. А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000. То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Кажется понял в чём может быть проблема. Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные. Возможно тот же принцип и для построения исторических данных в индикаторе. А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000. То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Не важно, что и где аллоцирует индикатор.
Пришёл тик и в пареметрах обработчика есть rates_total, это означает, что есть rate_total баров.
Кажется понял в чём может быть проблема. Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные. Возможно тот же принцип и для построения исторических данных в индикаторе. А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000. То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Согласно документации, никаких ограничений по максимуму баров на графике в работе функции iTime и др. нет (в отличие от CopyTime(...)). Следовательно из индикатора данные из таймсерии бара можно взять как из массива time, так и из функции iTime. Причём и iBars возвращает количество баров, равное rates_total.
Здесь точно какая то ошибка или недоработка.
Требуется мне конвертировать индикатор из MQL4. И обращаясь к данным из функций iTime и др., получаю нулевые данные. А это неприемлемо. Бар вроде как есть, согласно функции iBars(...), а данные нулевые.
Sergey Gridnev #: Не важно, что и где аллоцирует индикатор.
Пришёл тик и в пареметрах обработчика есть rates_total, это означает, что есть rate_total баров.
Но, как выясняется, баров может оказаться меньше.
Это ошибка!
Да есть rates_total, но именно в условии цикла Андрея оно не как не контролируется ! Вместо этого подаётся значение datetime, что вообще для меня нонсенс.
функция iBars возвращает то же значение что и rates total. и подождите появления нового бара Счет неттинг или хедж это все же пользователь должен решать а не быть на стороне сервера. В общим этим числом регулируем крайнее окно просчитываемых баров на старте
Сломались все double числа!!!
покажет 1.0
выдает всегда целые.
пробовал и с (double) и без всегда одно число.
билд 3571.
Сломались все double числа!!!
Запустил. Какую то фигню вы нагородили.
На каждом тике срабатывает цикл в 41 итерацию.
Да, настройку макс баров вернул на 1000000.
По rates_total получается всё что меньше ляма, то доступно для чтения,
то что больше ляма 1000001, выход за пределы макс баров.
Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. ))
Используйте код который показал, проблем нет с ним.
Да, настройку макс баров вернул на 1000000.
По rates_total получается всё что меньше ляма, то доступно для чтения,
то что больше ляма 1000001, выход за пределы макс баров.
Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. ))
Используйте код который показал, проблем нет с ним.
Ну вот, я про это пишу. И при этом, то что больше ляма даже нет на графике.
Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных.
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Сломались все double числа!!!
покажет 1.0
выдает всегда целые.
пробовал и с (double) и без всегда одно число.
билд 3571.
Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных.
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных.
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.
Согласно документации, никаких ограничений по максимуму баров на графике в работе функции iTime и др. нет (в отличие от CopyTime(...)). Следовательно из индикатора данные из таймсерии бара можно взять как из массива time, так и из функции iTime. Причём и iBars возвращает количество баров, равное rates_total.
Здесь точно какая то ошибка или недоработка.
Требуется мне конвертировать индикатор из MQL4. И обращаясь к данным из функций iTime и др., получаю нулевые данные. А это неприемлемо. Бар вроде как есть, согласно функции iBars(...), а данные нулевые.
Не важно, что и где аллоцирует индикатор.
Да есть rates_total, но именно в условии цикла Андрея оно не как не контролируется !
Вместо этого подаётся значение datetime, что вообще для меня нонсенс.
которое больше макс баров 1000000

Это код нормально же работает, когда в цикле контролируется rates_total