Новая версия платформы MetaTrader 5 build 5800: Улучшенный торговый диалог и удобная работа с CSV в MetaEditor - страница 4

 
Roman #:

Как новый бар может быть пустым?
Новый бар, это первый его тик!

Отрисовка тиков, это всего лишь пример для наглядности проблемы в момент нового бара, раньше такой проблемы не было.

Именно так, новый бар добавляется пустым в индикаторный буфер - там может быть мусор или ноль, если повезет.

У меня есть опыт написания индикаторов, с произвольным таймингом элементов - отличным от баров таймфрейма, на который наброшен индикатор. Безусловный сдвиг в вашем коде - это ошибка. При новом баре сдвиг делает система за вас.

 
Stanislav Korotky #:

Именно так, новый бар добавляется пустым в индикаторный буфер - там может быть мусор или ноль, если повезет.


Это и есть ошибка.
Повторюсь, это появилось давно, но раньше было корректное поведение.
В момент нового бара, никаких пустот не было.

 
Roman #:

Это и есть ошибка.
Повторюсь, это появилось давно, но раньше было корректное поведение.
В момент нового бара, никаких пустот не было.

Что ошибка - добавление нового бара? Это не ошибка. Это стандартное поведение. Всегда так было.

 
Stanislav Korotky #:

Что ошибка - добавление нового бара? Это не ошибка. Это стандартное поведение. Всегда так было.

Добавляется пустым в индикаторный буфер - там может быть мусор или ноль, если повезет.
Это ошибка!
Новый бар (rates_total - prev_calculated) == 1, это первый его тик! У которого есть значения на момент открытия.
Зачем добавлять в буфер пустой мусорный бар?

Так было не всегда!
 
Roman #:

Это и есть ошибка.
Повторюсь, это появилось давно, но раньше было корректное поведение.
В момент нового бара, никаких пустот не было.

Всегда так было и это не ошибка. 

Вот, для примера  индикатор написан в 2022 году и там , на новом баре просто не делается сдвиг. 

Second Bars
Second Bars
  • 2024.04.01
  • www.mql5.com
Индикатор рисует на графике произвольный секундный таймфрейм.
 
Roman #:
Добавляется пустым в индикаторный буфер - там может быть мусор или ноль, если повезет.
Это ошибка!
Новый бар (rates_total - prev_calculated) == 1, это первый его тик! У которого есть значения на момент открытия.
Зачем добавлять в буфер пустой мусорный бар?

Так было не всегда!
Не мусорный бар, в баре всё есть, но вы то копируете свой же буфер, в котором на момент открытия нового бара происходит ресайз массива и в последнем индексе вашего буфера лежит мусор или ноль, если повезёт.
 
Aleksandr Slavskii #:
Не мусорный бар, в баре всё есть, но вы то копируете свой же буфер, в котором на момент открытия нового бара происходит ресайз массива и в последнем индексе вашего буфера лежит мусор или ноль, если повезёт.
После авто-ресайза массива в последний индекс буфера кладётся крайнее его актуальное значение!
Затем выход из функции и передача управления.
Какой может быть мусор в новом последнем элементе?
Это явная ошибка поведения. 
 
Roman #:
После авто-ресайза массива в последний индекс буфера кладётся крайнее его актуальное значение!
Затем выход из функции и передача управления.
Какой может быть мусор в новом последнем элементе?
Это явная ошибка поведения. 

Красным - никогда так не было.

Нет актуального значения для нового элемента вашего индикаторного буфера! Неоткуда системе его взять.

Новый элемент непроинициализирован ничем, пока ваш код это не сделает. В МТ5 всегда так было. В МТ4 заполнялось нулем.

 
Stanislav Korotky #:

Нет актуального значения для нового элемента вашего индикаторного буфера! Неоткуда системе его взять.

Новый элемент непроинициализирован ничем, пока ваш код это не сделает. В МТ5 всегда так было. В МТ4 заполнялось нулем.

У него не в этом проблема. Он просто не видит, что при увеличении индикаторного буфера происходит сдвиг не на один элемент, а на два.
 
Aleksandr Slavskii #:
У него не в этом проблема. Он просто не видит, что при увеличении индикаторного буфера происходит сдвиг не на один элемент, а на два.
Проблема его понятна, но не ему самому ;-) - система двигает буфер при появлении нового бара, и он сам двигает на каждом тике, даже если бар новый для этого тика только что был создан - я в самом первом своем посте сказал, что нужно делать проверку на новый бар и тогда не делать ArrayCopy. А про пустоту в новом элементе - уже нечего добавить - он пустой по определению. Точка.