Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 14

 

Сломались все double числа!!!

Comment(NormalizeDouble(4*100/319,2)); 

покажет 1.0

выдает всегда целые.

пробовал и с (double) и без всегда одно число.


билд 3571.

 
Alexandr Gavrilin #:

Сломались все double числа!!!

   Print(NormalizeDouble(4*100/319,2));
   Print(NormalizeDouble(4*100.0/319.0,2));


2023.02.06 18:34:10.315 2020.05.01 00:00:00   1.0
2023.02.06 18:34:10.315 2020.05.01 00:00:00   1.25
 
Roman #:

Запустил. Какую то фигню вы нагородили.
На каждом тике срабатывает цикл  в 41 итерацию.

Правильно, цикл прекращается, как только находит не нулевое значение функции iTime(...) Посмотрите, с какой даты у вас начинается график. Код я, кстати, другой прикрепил в конце 12 страницы. Там дата строкой показывается. 

Теперь посмотрите на значение rates_total в логах. У вас 1000000 баров стоит в настройках макс. баров на графике. Так начиная с 1000001 бара индикатор видит бары (хотя их нет на графике), а iTime и друие с ней баров не видят.

Отсчёт идёт от текущего бара для простоты восприятия. А так это с 0 по 39 бар. 
 
Andrey Kaunov #:
Правильно, цикл прекращается, как только находит не нулевое значение функции iTime(...) Посмотрите, с какой даты у вас начинается график. 

Теперь посмотрите на значение rates_total в логах. У вас 1000000 баров стоит в настройках макс. баров на графике. Так начиная с 1000001 бара индикатор видит бары (хотя их нет на графике), а iTime и друие с ней баров не видят.

Отсчёт идёт от текущего бара для простоты восприятия. А так это с 0 по 39 бар. 

Да, настройку макс баров вернул на 1000000.
По rates_total  получается всё что меньше ляма, то доступно для чтения,
то что больше ляма 1000001, выход за пределы макс баров.
Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. ))
Используйте код который показал, проблем нет с ним.

 
Roman #:

Да, настройку макс баров вернул на 1000000.
По rates_total  получается всё что меньше ляма, то доступно для чтения,
то что больше ляма 1000001, выход за пределы макс баров.
Ну наверно такая разная внутренняя реализация iTime и буфера индикатора. Фиг его знает. ))
Используйте код который показал, проблем нет с ним.

Ну вот, я про это пишу. И при этом, то что больше ляма даже нет на графике. 

Я вообще другой код делаю. Этот написал просто для демонстрации не согласованности работы функций iTime (и других) и таймсерий индикатора. 
 
Andrey Kaunov #:
Ну вот, я про это пишу. И при этом, то что больше ляма даже нет на графике. 

Я вообще другой код делаю. Этот написал просто для демонстрации не согласованности работы функций iTime (и других) и таймсерий индикатора. 

Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. 
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.

 
Alexandr Gavrilin #:

Сломались все double числа!!!

покажет 1.0

выдает всегда целые.

пробовал и с (double) и без всегда одно число.


билд 3571.

Это не ошибка. Вы целое умножает на целое = результат тоже - целое.
 
Roman #:

Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. 
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.

Не важно, что и где аллоцирует индикатор.
Пришёл тик и в пареметрах обработчика есть rates_total, это означает, что есть rate_total баров.
Но, как выясняется, баров может оказаться меньше.
Это ошибка!
 
Roman #:

Кажется понял в чём может быть проблема.
Где-то видел говорилось, что индикатор аллоцирует буфер немного больше, чем запрашиваемые данные.
Возможно тот же принцип и для построения исторических данных в индикаторе.
А твой пример кода, не контролирует просчитанные бары, и начинает запрашивать данные с начала буфера, а не сначала данных. 
Поэтому Ошибка 4401 - Запрашиваемая история не найдена, пока не встретит первые валидные данные на 1000000.
То есть без контроля просчитанных баров, ты начинаешь бежать по пустому ещё массиву.

Согласно документации, никаких ограничений по максимуму баров на графике в работе функции iTime и др. нет (в отличие от CopyTime(...)). Следовательно из индикатора данные из таймсерии бара можно взять как из массива time, так и из функции iTime. Причём и iBars возвращает количество баров, равное rates_total.

Здесь точно какая то ошибка или недоработка.

Требуется мне конвертировать индикатор из MQL4. И обращаясь к данным из функций iTime и др., получаю нулевые данные. А это неприемлемо. Бар вроде как есть, согласно функции iBars(...), а данные нулевые.

 
Sergey Gridnev #:
Не важно, что и где аллоцирует индикатор.
Пришёл тик и в пареметрах обработчика есть rates_total, это означает, что есть rate_total баров.
Но, как выясняется, баров может оказаться меньше.
Это ошибка!

Да есть rates_total, но именно в условии цикла Андрея оно не как не контролируется !
Вместо этого подаётся значение 
datetime, что вообще для меня нонсенс.

for(int i=0; i_time<=0; i++)

которое больше макс баров 1000000

rt

Это код нормально же работает, когда в цикле контролируется rates_total
Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - Запустите мой код, и подождите появления нового бара
Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - Запустите мой код, и подождите появления нового бара
  • 2023.02.06
  • www.mql5.com
функция iBars возвращает то же значение что и rates total. и подождите появления нового бара Счет неттинг или хедж это все же пользователь должен решать а не быть на стороне сервера. В общим этим числом регулируем крайнее окно просчитываемых баров на старте
Причина обращения: