Глюк индикатора при сдвиге

 

Довольно легкий индикатор показывает что-то наподобии локальных экстремумов, но при перемещении по графику вперед/назад возникает глюк, такого вида (индикатор фиолетовый):

До навигации:

При навигации, глюк:

Если индикатор убрать с поля и заново поставить, то все нормализуется обратно...

При этом от кода это не особо завсит насколько я понимаю - у меня не один индикатор так глючит...

Кто-нить сталкивался с такой проблемой?

 
У Вас в коде ошибка, выкладывайте.
 
Вот код:
#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);
}
 
up
 
Руки пока не дошли. Кстати, в коде элементарная ошибка (которую я увидел сразу), Вы уверены что выложили то, что тестируете?
 

Да это абсолютно точно... А где ошибка?

 
ryumkin:

Да это абсолютно точно... А где ошибка?


Подход ошибочен - dPt2 = dPt3;

При первом подключении индикатора, прошлым значением будет значение на предыдущем баре, а затем на предыдущем тике. Либо на каждом тике пересчитывайте индикатор на весь диапазон баров, либо создайте дополнительные буферы для значений которые нужно брать с предыущего бара.

 

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

 
ryumkin:

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


No Comments!
 
В общем, код написан так, что непонятно какая идея в нем заложена (то есть, ошибки не объясняются логикой). Напишите своими словами то, что хотели закодировать, так будет проще.
 

Индикатор соединяет точки изменения направления, т.е. если график идет вверх на протяжении нескольких временных интервалов, то точек будет всего 2 вначале и конце.

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