Мигают цифровые данные индикатора

 

Здравствуйте,

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

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

Выглядит это так:



и потом

В общем нужно либо скрыть (данные для считывания не важны), либо прекратить мигание.

 
elibrarius:

Здравствуйте,

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

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

Выглядит это так:



и потом

В общем нужно либо скрыть (данные для считывания не важны), либо прекратить мигание.

А что у меня в леврй руке? (код нужен)
 
prostotrader:
А что у меня в леврй руке? (код нужен)

В коде все хорошо. Нужно просто скрыть данные в левом верхнем углу.

Нашел команду, ChartSetInteger(0,CHART_SHOW_OHLC,0,false); но нужно не для OHLC а для инд. буферов.

 
elibrarius:

В коде все хорошо. Нужно просто скрыть данные в левом верхнем углу.

Нашел команду, ChartSetInteger(0,CHART_SHOW_OHLC,0,false); но нужно не для OHLC а для инд. буферов.

Если значения индикатора "моргают" - это означает, что Вы в коде переинициализируете индикаторный буфер (не присваиваете просто другое значение, а именно что-то делаете или с размерностью буфера или принудительно инициализируете его).
 

В общем нашел причину мигания:

      //for(int i=0;i<ChartGetInteger(0,CHART_VISIBLE_BARS);i++){
      for(int i=0;i<10;i++){
           v= ...;
            if(max_h<v){max_h=v;}// min max для последнего бара
            if(min_h>v){min_h=v;}  
      }

В коде искал макс. и мин. значения на графике (для масштабирования окна). При проходе по всем видимым барам (ChartGetInteger(0,CHART_VISIBLE_BARS)) получаются мигания. При проходе просто по 10 последним - не мигает...
 
Vladimir Karputov:
Если значения индикатора "моргают" - это означает, что Вы в коде переинициализируете индикаторный буфер (не присваиваете просто другое значение, а именно что-то делаете или с размерностью буфера или принудительно инициализируете его).
Такого нет.
С миганием справился, а скрыть эти данные как-то можно?
 
elibrarius:
Такого нет.
С миганием справился, а скрыть эти данные как-то можно?
 Какой терминал?
 
elibrarius:

В общем нашел причину мигания:

      //for(int i=0;i<ChartGetInteger(0,CHART_VISIBLE_BARS);i++){
      for(int i=0;i<10;i++){
           v= ...;
            if(max_h<v){max_h=v;}// min max для последнего бара
            if(min_h>v){min_h=v;}  
      }

В коде искал макс. и мин. значения на графике (для масштабирования окна). При проходе по всем видимым барам (ChartGetInteger(0,CHART_VISIBLE_BARS)) получаются мигания. При проходе просто по 10 последним - не мигает...
Индикатор не успевал пересчитаться. Из-за этого мигания. Расчет стал более экономным - мигания прекратились. А вообще, чтобы не было значений в верхнем левом углу индикатора, нужно запретить отображение в окне данных нужной(-ых) граф. серии.
 
Vladimir Karputov:
 Какой терминал?
5 - 1455
 
Alexey Kozitsyn:
Индикатор не успевал пересчитаться. Из-за этого мигания. Расчет стал более экономным - мигания прекратились. А вообще, чтобы не было значений в верхнем левом углу индикатора, нужно запретить отображение в окне данных нужной(-ых) граф. серии.

Пробовал 2000  - это намного больше отображаемых баров - при 2000 тоже не мигает.

А вот:

PlotIndexSetInteger(0,PLOT_SHOW_DATA,false);

PlotIndexSetInteger(1,PLOT_SHOW_DATA,false);

позволило убрать данные. Спасибо!

 
elibrarius:

позволило убрать данные. Спасибо!

Не за что. 

Пробовал 2000  - это намного больше отображаемых баров - при 2000 тоже не мигает. 

У Вас на каждом проходе в цикле вызывалась функция ChartGetInteger(). Это не быстро... А вообще, профилирование все расставляет на свои места).
Причина обращения: