Функция IndicatorCounted()

 

Ни у кого не возникало проблемы, когда при вставке в индикатор функции IndicatorCounted() правильно работающий для всех баров (Bars) инидкатор начинает задирать конец при приходе нового тика? Конструкция примерно такая:

  int counted_bars=IndicatorCounted();
 
   if(counted_bars<0) 
   {
      return(-1);
   }
   
   if(counted_bars>0) counted_bars--;
   
   limit=Bars-counted_bars;    
   
   for(i=limit; i>=0; i--)
    {
      ...
          }

Если limit=Bars, все работает нормально, но медленно, невозможно оптимизировать.

 
Что значит "задирать конец"?
 
D500_Rised:
Что значит "задирать конец"?


Вот так это происходит.

До тика:

После:

 
Idalgo:

Вот так это происходит.


Это означает, что Ваш алгоритм некорректно рассчитывает значение индикатора для нулевого бара.
 
Rosh:
Idalgo:

Вот так это происходит.


Это означает, что Ваш алгоритм некорректно рассчитывает значение индикатора для нулевого бара.


Есть ли универсальные способы борьбы с этим злом? :)

Хочу еще раз указать, что при limit=Bars все расчитывается правильно!

 
int start()
  {
   int i,limit,counted_bars=IndicatorCounted();
   if(counted_bars>0)
      counted_bars--;
    limit=Bars-counted_bars;
 
   for(i=0;i<limit;i++)
   {
      
   }
  
 
   return(0);
  }

Эта конструкция меня еще не подводила.
Есть ли универсальные способы борьбы с этим злом? :)
Есть. Соблюдайте логику операций в коде.
 
limit=Bars-IndicatorCounted();    
   
   for(i=limit-1; i>=0; i--)
    {
      ...
          }
Попробуйте так. Ваш способ еще два лишних бара просчитывает, а кто его знает, как там ваш индикатор устроен. Если это не поможет, тогда то, что Rosh написал.
 
Integer:
limit=Bars-IndicatorCounted();    
   
   for(i=limit-1; i>=0; i--)
    {
      ...
          }
Попробуйте так. Ваш способ еще два лишних бара просчитывает, а кто его знает, как там ваш индикатор устроен. Если это не поможет, тогда то, что Rosh написал.


Спасибо за помощь всем, кто предложил варианты! К сожалению, предложенные способы решения проблемы не помогли.

Очевидно, выходом из сложившейся ситуации могло бы стать ограничение количества считаемых баров. Это несколько ускоряет процесс расчета индикатора, не влияя на результат. Если поставить, к примеру, вместо Bars значение 1000;

Но все же это недостаточно быстро.

 

Наверно что-то с сохранением предыдущих значений в переменных.

 
Очевидно проблема между скобками { и }.
 
Idalgo:

Спасибо за помощь всем, кто предложил варианты! К сожалению, предложенные способы решения проблемы не помогли.

Очевидно, выходом из сложившейся ситуации могло бы стать ограничение количества считаемых баров. Это несколько ускоряет процесс расчета индикатора, не влияя на результат. Если поставить, к примеру, вместо Bars значение 1000;

Но все же это недостаточно быстро.


Однозначно - индикатор написан далеко не оптимальным образом. Почитайте пример оптимизации - Оптимизированный вариант адаптивной скользящей средней Кауфмана AMA от wellx