Отрисовка массива в Тестере

 

В процессе вычисления значений динамического массива индикаторного буфера для одного из индексов, например, i=10, элементу массива присваивается значение равное 0 (ноль) или NULL, или EMPTY_VALUE.


В Терминале массив отрисовывается без ошибок, так как и задумано :).

В Тестере, для указанных "пустых" значений, прорисовываются вертикальные, вертикально-наклонные линии.

В случае, если осуществляются попытки использования clrNONE и ..., то, например, линия массива (учитывая буферы для заливки) отрисовывается в ТЕСТЕРЕ без необходимых разрывов.


В чём суть? Может кто-нибудь прояснить ситуацию? :) 

 
можно посмотреть как отрисовывается индикатор типа зигзаг и сравнить со своим
 
Vjacheslav Lapaev:

В процессе вычисления значений динамического массива индикаторного буфера для одного из индексов, например, i=10, элементу массива присваивается значение равное 0 (ноль) или NULL, или EMPTY_VALUE.


В Терминале массив отрисовывается без ошибок, так как и задумано :).

В Тестере, для указанных "пустых" значений, прорисовываются вертикальные, вертикально-наклонные линии.

В случае, если осуществляются попытки использования clrNONE и ..., то, например, линия массива (учитывая буферы для заливки) отрисовывается в ТЕСТЕРЕ без необходимых разрывов.


В чём суть? Может кто-нибудь прояснить ситуацию? :) 

Да, мы сейчас включим телепатические способности и увидим твой экран!! Скриншот трудно прислать? И строчки кода, где массив заносится в буфер.
 
Возможно, терминал не считает пустыми ваши пустые значения и рисует их. Попробуйте установить пустое значение в SetIndexEmptyValue().
 
Не подумал, что необходимо. Прошу прощения. :)

Что значит массив вносится в буфер? 
Может быть имелось ввиду: строки кода, которые связывают индикаторный буфер с динамическим массивом?
SetIndexBuffer(11,qUQ1,INDICATOR_DATA);
SetIndexBuffer(12,qLQ1,INDICATOR_DATA);
SetIndexBuffer(13,qUQ2,INDICATOR_DATA);
SetIndexBuffer(14,qLQ2,INDICATOR_DATA);
//---
ArrayInitialize(qUQ1,EMPTY_VALUE);
ArrayInitialize(qLQ1,EMPTY_VALUE);
   
ArrayInitialize(qUQ2,EMPTY_VALUE);
ArrayInitialize(qLQ2,EMPTY_VALUE);
//---

if(i==m-1) qUQ1[pos+i]=Eq[pos+i]-mUQ; else qUQ1[pos+i]=NULL; 
if(i==m-1) qLQ1[pos+i]=Eq[pos+i]-mLQ; else qLQ1[pos+i]=NULL;               
               
if(i==m-1) qUQ2[pos+i]=Eq[pos+i]+mUQ; else qUQ2[pos+i]=NULL;
if(i==m-1) qLQ2[pos+i]=Eq[pos+i]+mLQ; else qLQ2[pos+i]=NULL;
f.e. if qUQ1 = 0; // NULL

f.e. if qUQ1 = EMPTY_VALUE;


Вот, как - то так всё выглядит ...

 
Vjacheslav Lapaev:

А вы, случаем, не Шерх? :)

 
Разве в МТ5 сохранился SetIndexEmptyValue() ?

Я пытался отрисовывать с помощью 
PlotIndexSetDouble(11,PLOT_EMPTY_VALUE, EMPTY_VALUE) или PlotIndexSetDouble(14,PLOT_EMPTY_VALUE, 0), но в этом случае вертикальные линии отрисовываются не только в тестере, но и в терминале.
 
Maxim Dmitrievsky:

А вы, случаем, не Шерх? :)

Да, есть такой позывной :)

 
Vjacheslav Lapaev:

Да, есть такой позывной :)

Оо, какие люди тут :) давно видел вашу модель и переписывались как-то давно. То-ли на форуме фхклаб то-ли где, не помню, я тогда еще волновым анализом увлекался.

 
Vjacheslav Lapaev:
Разве в МТ5 сохранился SetIndexEmptyValue() ?

Я пытался отрисовывать с помощью 
PlotIndexSetDouble(11,PLOT_EMPTY_VALUE, EMPTY_VALUE) или PlotIndexSetDouble(14,PLOT_EMPTY_VALUE, 0), но в этом случае вертикальные линии отрисовываются не только в тестере, но и в терминале.

Может я что-то неправильно понял, но вы сначала инициализируете EMPTY_VALUE, а потом присваиваете NULL.

Попробуйте "запомнить" пустое значение, которое устанавливаете в PlotIndexSetDouble(plot_index,PLOT_EMPTY_VALUE, ...).

const double BUFFER_EMPTY_VALUE = EMPTY_VALUE;

void OnInit() 
  { 
   PlotIndexSetDouble(plot_index,PLOT_EMPTY_VALUE, BUFFER_EMPTY_VALUE);
  }

А потом посмотрите что вернет buffer[i] == BUFFER_EMPTY_VALUE на барах с вертикальными линиями (buffer - индикаторный буфер, i - индекс бара с той вертикальной линией).

Если true, то я не знаю :)

 
Vjacheslav Lapaev:
Не подумал, что необходимо. Прошу прощения. :)

Что значит массив вносится в буфер? 
Может быть имелось ввиду: строки кода, которые связывают индикаторный буфер с динамическим массивом?



Вот, как - то так всё выглядит ...

Так сначала задаются пустые, а потом они заполняются. Или я не понял, что нужно? Просто рисуются не свечи, а бары, надо  тестере бары настроить

if(i==m-1) qUQ1[pos+i]=Eq[pos+i]-mUQ; else qUQ1[pos+i]=NULL; 
if(i==m-1) qLQ1[pos+i]=Eq[pos+i]-mLQ; else qLQ1[pos+i]=NULL;               
               
if(i==m-1) qUQ2[pos+i]=Eq[pos+i]+mUQ; else qUQ2[pos+i]=NULL;
if(i==m-1) qLQ2[pos+i]=Eq[pos+i]+mLQ; else qLQ2[pos+i]=NULL;
Причина обращения: