Помогите я не понимаю

 

Короче есть индикатор,


//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(0,CA);
SetIndexBuffer(1,UpBuffer);
SetIndexBuffer(2,DnBuffer);
SetIndexDrawBegin(0,Ma_Period);
SetIndexDrawBegin(1,Ma_Period);
SetIndexDrawBegin(2,Ma_Period);

его основное тело:

int start() {
double K, v1, v2, MA;

int counted_bars = IndicatorCounted();

if(counted_bars < 0) return(-1);
if (counted_bars > 0) counted_bars--;

int i, limit;

limit=Bars - counted_bars-1;

for(i=limit;i>=0;i--) {

  математические вычисления и т.д.

  CA[i]=CA[i+1]+K*(MA-CA[i+1]);     // у индикатора 3 буфера: CA[i], DnBuffer[i] и UpBuffer[i] у каждого свой цвет: 

СА[i] имеет цвет желтый (нейтральный), другие два красный (продажа) и зелёный (покупка).. Индикатор не перерисовывается!!!

  DnBuffer[i] = EMPTY_VALUE;    // здесь как я понимаю эти два буфера принимают значения равные 0 (если не прав поправте)
UpBuffer[i] = EMPTY_VALUE;

  if (CA[i]-CA[i+1] > 0) UpBuffer[i] = CA[i];   //а здесь если условие выполнено, то кривая индикатора должна окраситься в соотвествии с цветом буфера
if (CA[i+1]-CA[i] > 0) DnBuffer[i] = CA[i];

но происходит немного другое при изменении направления кривой цвет индикатора на баре меняется на желтый (буфер СА) и только на следующем баре на цвет буфера (DnBuffer[i] или UpBuffer[i])

Сам индикатор отличный получился, менять его не надо, надо снимать с него показания, т.е. какого цвета линия. Так вот обращаюсь допустим к, буферу UpBuffer[i] через iCustom и

сравниваю == EMPTY_VALUE. И если равен то рисую кривую, тож через айкаст буфер СА[i]... Так вот на графике получаются разрывы. Ну картинка приведена ниже(второй)... Я думаю это одно и тож.


ПОМОГИТЕ РАЗОБРАТЬСЯ!!!!

}
return(0);
}




 

double temp = CA[i+1]+K*(MA-CA[i+1]);


if (CA[i]-CA[i+1] > 0) {

UpBuffer[i] = temp;

DnBuffer[i] = EMPTY_VALUE;

} else {

DnBuffer[i] = temp;

UpBuffer[i] = EMPTY_VALUE;

}

CA[i]= temp;

 
Да и кривая индюка может быть строго в горизонтальном положении, поэтому кое где возможно два подряд бара одинакового цвета
 

to Reshetov

Не ну этот индикатор меня устраивает мне интересно почему так происходит? И если так сделать, то имхо желтая линия будет поверх остальных, кстати тож вопрос?

 
blo0ds >>:

Короче есть индикатор,





Что бы разрывов не было нужно при изменении сигнала присваивать его не только текущему элементу буфера, но и предыдущему. Тогда желтый практически исчезнет. Но это нужно только для визуальной отрисовки. Линия появляется только на следующем баре просто. Но в советнике он получит изменение сигнала вовремя.
 
Вот это да пол года не програмил, а теперь вспомнил, что значения указываются по барам. Спасибо Vinin
 

Замените

SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);

на

SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_ARROW);
SetIndexStyle(2,DRAW_ARROW);

и все увидите.

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