Удаление лишних стрелок индикатора с чарта

 

Добрый День!

Индикатор при определённых условиях рисует стрелки через буфера:

   
   #property  indicator_color2  Coral

   IndicatorBuffers(12);

   SetIndexStyle(1,DRAW_ARROW,2,1);
   SetIndexArrow(1,234);

   SetIndexBuffer(1,BufferDn);//стрелка красная вниз

   double BufferDn[];
.......................
         BufferDn[i+1] = High[i+1]+st*Point;

 На следующей свечке сигнал повторяется, но с небольшими изменениями, которые важны. Таким образом, более "свежий" сигнал является более точным, и, поэтому, предыдущий надо удалить. Не принципиально, но не хочется загромождать чарт. 

Вопрос:

Можно ли как-то решить эту задачу иначе, нежели через  ObjectDelete() ? Без присвоения каждой стрелке  object_name, просто....ну, не знаю... через BufferDn[i+2] = 0; или что-то в этом роде?

 
Artemij:

Индикатор при определённых условиях рисует стрелки через буфера:

 На следующей свечке сигнал повторяется, но с небольшими изменениями, которые важны. Таким образом, более "свежий" сигнал является более точным, и, поэтому, предыдущий надо удалить. Не принципиально, но не хочется загромождать чарт. 

Вопрос:

Можно ли как-то решить этот вопрос иначе, нежели через  ObjectDelete() ? Без присвоения каждой стрелке  object_name, просто....ну, не знаю... через BufferDn[i+2]  или что-то в этом роде?


Насколько я понял, в коде нет графических объектов. Поэтому ObjectDelete не поможет (нет объектов). Стрелка отображается как результат занесения значения в буфер индикатора. Значит, нужно найти бар (или заранее запомнить дату/время этого бара), на котором отображается предыдущая стрелка, и присвоить элементу буфера этого бара значение EMPTY_VALUE или 0 (в зависимости от того, что выбрано в качестве пустого значения).

 
Ihor Herasko:

Насколько я понял, в коде нет графических объектов. Поэтому ObjectDelete не поможет (нет объектов). Стрелка отображается как результат занесения значения в буфер индикатора. Значит, нужно найти бар (или заранее запомнить дату/время этого бара), на котором отображается предыдущая стрелка, и присвоить элементу буфера этого бара значение EMPTY_VALUE или 0 (в зависимости от того, что выбрано в качестве пустого значения).

То есть, вот просто BufferDn[i+2] = 0; и всё?

(в зависимости от того, что выбрано в качестве пустого значения). = вот это не понял................
 
Artemij:

То есть, вот просто BufferDn[i+2] = 0; и всё?

Если стрелка была на баре i + 2, то все. А если нет, то нужно найти, где она была до этого.

(в зависимости от того, что выбрано в качестве пустого значения). = вот это не понял................

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

SetIndexEmptyValue(<буфер>, <значение>);
 
Всё заработало, Игорь, Большое Спасибо!
 
Artemij:
Всё заработало, Игорь, Большое Спасибо!

Ну вот и отлично.

 
Ihor Herasko:

Ну вот и отлично.

А со сторонним индикатором такое возможно реализовать? Пример: Индикатор отображает стрелки, необходимо некоторые убрать, могу ли я через обращение к буферу присвоить индикатору, без исходника, значение EMPTY_VALUE ?

 
Nikita Avramenko:

А со сторонним индикатором такое возможно реализовать? Пример: Индикатор отображает стрелки, необходимо некоторые убрать, могу ли я через обращение к буферу присвоить индикатору, без исходника, значение EMPTY_VALUE ?

Если без исходника, то можно только написав свой индикатор на основе этого подключенного посредством #resource

 
Alexey Viktorov:

Если без исходника, то можно только написав свой индикатор на основе этого подключенного посредством #resource

Спасибо. Если не сложно, уточните пожалуйста. Я подключаю свой индикатор

#resource "\\Indicators\\SampleIndicator.ex4"

Фактически он ничего не выведет, но будет формировать значения, и я просто буду получать его данные через

double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);

Я правильно понимаю?

 
Nikita Avramenko:

Спасибо. Если не сложно, уточните пожалуйста. Я подключаю свой индикатор

Фактически он ничего не выведет, но будет формировать значения, и я просто буду получать его данные через

Я правильно понимаю?

Теоретически правильно.

И синтаксис на первый взгляд правильно. Но для точного ответа надо смотреть документацию, я никогда не старался запомнить правильность написания

 
Alexey Viktorov:

Теоретически правильно.

И синтаксис на первый взгляд правильно. Но для точного ответа надо смотреть документацию, я никогда не старался запомнить правильность написания

Решение я взял с документации, проверить пока что нет возможности. Спасибо вам за уточнение.

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