Рисуем значок индикатором, когда не нужен - он всеравно остается....

 
Индикатор как дает сигнал на покупку/продажу в виде стрелки вниз/вверх, если срабатывает определнное условие.
В чем проблема:
например: как появляется бар, допустим, появляется стрелка на покупку - стрелка вверх, но пока бар формируется, значение индикатора меняется и на момент акрытия бара получается так, что индикатор показывает одно (условие не достаточное для отрисовки стрелки вверх), а стрелка на графике уже есть, т.к. условие было достаточным в начале периода.
Приходиться открывать св-ва данного индикатора и жать "Ok" , после чего "неверные" стрелки исчезают.
Как сделать это по нормальному?
 
bool ObjectDelete( string name) 
Удаление объекта с указанным именем. При успешном удалении функция возвращает TRUE, иначе FALSE.
Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError(). 
Параметры:
name   -   Имя удаляемого объекта. 

Пример:
ObjectDelete("text_object");
 
 
Так сигнал ввиде стрелок - это результат работы индикатора. Как я могу знать название объекта?
 
Скорей всего у него немного не то. Вычисляется значения буфера на нулевом баре, а когда условие отрисовки отменяется, алгоритм индикатора "забывает" обнулить этот буфер.
 
Так сигнал ввиде стрелок - это результат работы индикатора. Как я могу знать название объекта?

Точно, подтвердил.
 
тогда в буфер индикатора вместо значения ставь
void SetIndexEmptyValue( int index, double value) 
Устанавливает значение пустой величины для линии индикатора. Пустые значения не рисуются и не показываются в DataWindow. По умолчанию значение пустой величины - EMPTY_VALUE. 
Параметры:
index   -   Порядковый номер линии. Должен быть от 0 до 7. 
value   -   Новое "пустое" значение. 

Пример:
int init()
  {
//---- 2 распределенных буфера индикатора
    SetIndexBuffer(0,ExtUppperBuffer);
    SetIndexBuffer(1,ExtLowerBuffer);
//---- настройка параметров отрисовки
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,217);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,218);
//---- значение 0 отображаться не будет
    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);
//---- отображение в DataWindow
    SetIndexLabel(0,"Fractal Up");
    SetIndexLabel(1,"Fractal Down");
//---- инициализация сделана
   return(0);
  }

 
Profi_R
Большое спасибо!
Проблема решена!
 
Profi_R
Проблема не решена - я ошибся!!!

Видимо я неверно объяснил ситуацию!
Я торгую на 15-и минутках. Как только появляется новый бар, значение индикатора не нулевое, а значит рисуется стрелка. Но к моменту закрытия бара, т.е. в конце 15-и минутки ситуация может поменяться, и условия необходимые для отрисовки стрелки уже не выполняются, т.е. получается, что стрелка нарисованная до этого неверна, ее быть не должно, а она уже есть!!!!!!!
 
Т.е. сейчас индикатор для отрисовки стрелки ориентируется на текущую цену Close, а надо не на текущую, а на реальный Close, т.е. на тот, на котором действительно закрылся текущий бар!!!

Как это сделать? Пробовал через iClose, но при ее вызове она тоже берет текущую цену Close, т.е ту цену, которая пляшет на текущем, последнем баре. Помимо того, как "сдвигать" в коде расчет индикатора на бар назад есть какие-нибудь варианты?
 
Может в начале цикла поставить проверку, что если текущий номер бара равен предпоследнему на графике, то делать RefreshRates( ) ?
 
Выложите кусок кода, где записываются значения в индикаторный массив,так легче будет показать. Я знаю в чем у Вас ошибка, но на словах вряд ли получится объяснить.
Причина обращения: