Скачать MetaTrader 5

исчезающие индикаторы

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь разобраться в коде? Возможно, на эту тему уже написана статья!
Forex Trader
114257
Forex Trader 2007.01.23 19:30 
Индикаторы, имеющие участки буферов с постоянными, неменяющимися значениями имеют свойство исчезать из окна при прокрутке.
Проверьте пож-ста.

Пример:
#property copyright "Copyright © 2006, Ltd."
#property link      "http://www...net"
//
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 Green
#property indicator_width2 1
//
int showbar;
double buf0[],buf1[];
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,buf0); SetIndexStyle(0,DRAW_ARROW); SetIndexLabel(0,"0");
   SetIndexBuffer(1,buf1); SetIndexStyle(1,DRAW_ARROW); SetIndexLabel(1,"1");
   //
   showbar=WindowBarsPerChart()+50; IndicatorShortName("test"+showbar);
   //
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   for(int i=0; i<Bars; i++) {
                              if(i<20)         { buf0[i]=0.0; buf1[i]=0.1; continue; }
                              if(i<20)                                     continue;
                              if(i<showbar)    { buf0[i]=0.0; buf1[i]=0.0; continue; }
                              if(i<showbar+100)                            continue;
                              buf0[i]=0.0; buf1[i]=1.0;
                             }
   return(0);
  }
Forex Trader
114257
Forex Trader 2007.01.25 01:57  
на начальном этапе сталкивался с подобным поведением (года два назад), оказалось что был брак в коде, выявил путем распринтовки результатов просчета индикатора, там на участке (вроде исчезающем) реальные значения буферов индикатора были либо отрицательные, либо у нуля, либо очень большие, инициализацию тоже посмотри
Forex Trader
114257
Forex Trader 2007.01.25 14:24  
на начальном этапе сталкивался с подобным поведением (года два назад), оказалось что был брак в коде, выявил путем распринтовки результатов просчета индикатора, там на участке (вроде исчезающем) реальные значения буферов индикатора были либо отрицательные, либо у нуля, либо очень большие, инициализацию тоже посмотри

Как, это избежать понятно...
Хотелось-бы, чтобы разработчики посмотрели - есть ли возможность поправить?
Forex Trader
114257
Forex Trader 2007.01.25 15:12  
Индикатор рисует именно то, что в нем заложено.

//+------------------------------------------------------------------+
//|                                                        zigan.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                             http://www.metaquotes.ru/forum/8089/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.ru/forum/8089/"

//
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Green

#property indicator_width2 1
#property indicator_width1 2

//
int showbar;
double buf0[],buf1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,buf0); 
   SetIndexStyle(0,DRAW_ARROW); 
   SetIndexLabel(0,"0");
   SetIndexBuffer(1,buf1); 
   SetIndexStyle(1,DRAW_ARROW); 
   SetIndexLabel(1,"1");
   //
   showbar=WindowBarsPerChart()+50; 
   IndicatorShortName("test"+showbar);
   Comment("showbar=",showbar);
   //
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   for(int i=0; i<Bars; i++) 
     {
      if (i<20) 
        {
         buf0[i]=0.0; 
         buf1[i]=0.1; 
         continue; 
        }
      if (i<20)  continue;
      if(i<showbar)    
        {
         buf0[i]=0.0; 
         buf1[i]=0.0; 
         continue; 
        }
      if  (i<showbar+100) continue;
      buf0[i]=0.0; 
      buf1[i]=1.0;
     }
   return(0);
  }
//+------------------------------------------------------------------+
  




Вопрос в чем?


Forex Trader
114257
Forex Trader 2007.01.25 16:31  


Вопрос в чем?



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

Попробуите уменьшить окно, сдвинуться вправо к нулевому бару и по одному бару двигаться влево...
Попытка проиллюстрировать вот здесь "MQL4: Картинка для форума на metaquotes"
Forex Trader
114257
Forex Trader 2007.01.25 16:39  
А если выставить диапазон изменений (когда значений нет, то вычислить размах окна не просто)\


Forex Trader
114257
Forex Trader 2007.01.25 17:21  
А если выставить диапазон изменений


Все правильно избежать исчезновений можно разными способами.
Я к примеру, использую дополнительный фоновый буфер т.к. диапазон изменений не всегда определен

когда значений нет, то вычислить размах окна не просто


размах можно брать из предидущего окна, где он был уже посчитан.

Хотя, конечно, если сложно поправить можно оставить как есть. Вопрос не критичен.
Forex Trader
114257
Forex Trader 2007.01.25 17:43  
А если выставить диапазон изменений


Все правильно избежать исчезновений можно разными способами.
Я к примеру, использую дополнительный фоновый буфер т.к. диапазон изменений не всегда определен

когда значений нет, то вычислить размах окна не просто


размах можно брать из предидущего окна, где он был уже посчитан.

Хотя, конечно, если сложно поправить можно оставить как есть. Вопрос не критичен.


Я думаю, тут гораздо проще. Берется окно (в прямом смысле этого слова) м на нем ищутся минимум и максимум. Когда значений нет (или они равны нулю), то высота окна слегка плывет (точнее масштаб). И никто не заморачивается теми значениями, что были раньше (чтобы не перегружать терминал).
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий