Индикатор от индикатора - непонятные артефакты - страница 2

 
мы сделаем автоматическую зачистку массивов. но это не спасёт от небрежности в программировании вообще (в данном конкретном случае спасёт и, возможно, удовлетворит большинство)
сравните Ваш код:
      if ((curTSI>curSignal)&&(prevTSI<prevSignal)) ExtMapBuffer1[i]=Close[i]+3*ArrowShift*Point;
      if ((curTSI<curSignal)&&(prevTSI>prevSignal)) ExtMapBuffer2[i]=Close[i]-ArrowShift*Point;


и наш код:

   double value1,value2;
...
      value1=0.0;
      value2=0.0;
      if ((curTSI>curSignal)&&(prevTSI<prevSignal)) value1=Close[i]+3*ArrowShift*Point;
      if ((curTSI<curSignal)&&(prevTSI>prevSignal)) value2=Close[i]-ArrowShift*Point;
      ExtMapBuffer1[i]=value1;
      ExtMapBuffer2[i]=value2;


то есть, Вы прописываете массив выборочно, а мы - целиком, элемент за элементом каждый элемент.

 
Согласен, у Вас тщательнее. Я назвал это артефактами, потому что это явление происходит не на всем буфере, а только на некотором интервале, по крайней мере у меня. Впредь буду аккуратней.
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?
 
Слава, а если использовать DRAW_SECTION, а не DRAW_ARROW? Мусор остается точно также, только Ваш пример уже не подходит.
 
Наверно, в этом случае надо в цикле заполнять Empty_Value. Проверять не берусь - мне пока не надо.
 
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?

поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы
 
Слава, а если использовать DRAW_SECTION, а не DRAW_ARROW? Мусор остается точно также, только Ваш пример уже не подходит.

почему не подходит? попробовал, подошло. Вы можете какие-нибудь подробности привести?
 
Действительно подходит пример. Приношу извинения. Не правильно представлял работу DRAW_SECTION. Оказывается не обязательно пустые значения заполнять Empty_Value, можно и 0.0
 
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?

поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы

Выходит , я неправильно представлял переключение тайм-фрейма. Тогда буду принудительно обнулять буфера индикатора. Вопроса больше нет.
 
Действительно подходит пример. Приношу извинения. Не правильно представлял работу DRAW_SECTION. Оказывается не обязательно пустые значения заполнять Empty_Value, можно и 0.0

EMPTY_VALUE является умолчательным. после того, как было установлено другое "пустое значение":
   SetIndexEmptyValue(0,0.0);


EMPTY_VALUE уже использовать нельзя, а нужно (не можно, а нужно) использовать именно 0.0

 
Во как. Вообще с ног на голову. DRAW_SECTION значит правильно понимал. SetIndexEmptyValue не правильно перевел и воспринимал, Rosh судя по индикатору тоже. Говорили в школе и институте - не сбегай с английского.
Причина обращения: