MQL5 при отрисовке индикатора. - страница 6

 
Fedor Arkhipov:

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

А должно быть одинаково. Раз там нет то и там нет.

Это не так. Только что проверил в Тестере МТ5 -- инициализация "пустым значением" не происходит. Тестер и реальный поток работают одинаково по части "пустого значения".

Вот скрин Журнала тестера:


 
Andrey F. Zelinsky:

Это не так. Только что проверил в Тестере МТ5 -- инициализация "пустым значением" не происходит. Тестер и реальный поток работают одинаково по части "пустого значения".

Вот скрин Журнала тестера:


Странно тогда. У меня индикатор в тестера работал нормально, а на графике нет.
 

крч раньше работало. сейчас все забивается или мусором, или нулями. и это прискорбно.

в тестере не проверял

Vladimir Karputov:

То есть это не инициализация. Это всё го лишь управление отрисовкой.

как раз пустое значение для инициализации и используется. проблема в том что при смене ТФ нет инициализации буфера.

вот надо было на две страницы цирк разводить и задирать нос чтобы выяснить что вы не разбираетесь в предмете?

Был неправ, приношу свои извинения.
 
Artyom Trishkin #:

Вы путаете разные два понятия - 1. инициализацию переменных, которые видит компилятор, и о которых предупреждает в случае их не инициализации, и 2. логика программы, о которой компилятор ничего не знает, и правильное её составление лежит полностью на программисте. И инициализация массива пустым значением весьма актуальна для стрелочных индикаторов. При этом в самом цикле нужно предварительно очищать значения текущего бара таких буферов - присваивать пустое значение, а уже затем рассчитывать индикатор. Иначе будут артефакты на графике, и компилятор не обязан вас про это предупреждать - он ничего не знает про логику конкретного индикатора, и это задача программиста - писать правильно.

ArrayInitialize(Buffer, Value) - инициализация массива Buffer значением Value. Должна выполняться в индикаторах при прикреплении его к графику и при изменении исторических данных:
когда rates_total-prev_calculated > 1, в редких случаях >0

PlotIndexSetDouble(BufferNum, PLOT_EMPTY_VALUE, Value) - указание индикатору что значение Value буфера BufferNum НЕ должно выводиться, т.е - назначение пустого значения буферу. И это НЕ инициализация массива, а лишь задание пустого нерисуемого значения конкретному буферу. Если задать Value равным 0, то нулевое значение, находящееся в буфере не будет рисоваться на графике. Если задать Value равным EMPTY_VALUE, то значение DBL_MAX не будет рисоваться на графике индикатора. При этом, если задать в качестве пустого значения любое число, например -256, то DBL_MAX будет рисоваться на графике индикатора, так как EMPTY_VALUE==DBL_MAX.

Шикарное наставление. Спасибо.

Причина обращения: