Глюк индикатора при сдвиге
#property copyright "Copyright © 2007,Ryumkin" #property link "" #property indicator_buffers 1 #property indicator_chart_window #property indicator_color1 DarkViolet #property indicator_width1 1 double pdLocalExtremum[], dPt1, dPt2, dPt3; int init() { SetIndexStyle(0, DRAW_SECTION); SetIndexBuffer(0, pdLocalExtremum); return(0); } bool sign(double d) { return (d>=0); } int deinit() { return(0); } int start() { int iCountedBars = IndicatorCounted(), iLimit = Bars - iCountedBars - 1; dPt1 = Close[iLimit]; dPt2 = Close[iLimit]; dPt3 = Close[iLimit]; for(int i=iLimit; i>=0; i--) { dPt3 = Close[i]; double dD31 = dPt3-dPt1, dD21 = dPt2-dPt1; // if(MathAbs(dD31)>=MathAbs(dD21) && sign(dD31)==sign(dD21)) // The signal has not changed the direction { } else // Signal has changed the direction { pdLocalExtremum[i+1] = dPt2; dPt1 = dPt2; } dPt2 = dPt3; } return(0); }
Да это абсолютно точно... А где ошибка?
Да это абсолютно точно... А где ошибка?
Подход ошибочен - dPt2 = dPt3;
При первом подключении индикатора, прошлым значением будет значение на предыдущем баре, а затем на предыдущем тике. Либо на каждом тике пересчитывайте индикатор на весь диапазон баров, либо создайте дополнительные буферы для значений которые нужно брать с предыущего бара.
Подход меня не сильно волнует, так как это лишь набросок, а вот то что график прыгает меня волнует сильно...
Индикатор соединяет точки изменения направления, т.е. если график идет вверх на протяжении нескольких временных интервалов, то точек будет всего 2 вначале и конце.
Довольно легкий индикатор показывает что-то наподобии локальных экстремумов, но при перемещении по графику вперед/назад возникает глюк, такого вида (индикатор фиолетовый):
До навигации:
При навигации, глюк:
Если индикатор убрать с поля и заново поставить, то все нормализуется обратно...
При этом от кода это не особо завсит насколько я понимаю - у меня не один индикатор так глючит...
Кто-нить сталкивался с такой проблемой?