помогите с багом в индикаторе

 

Не могу разобраться. показания индикатора не совпадают с интерпретацией кода. Условие довольно простое, при этом индикатор отрабатывает некорректно и почти всегда попадает в последний else.На графике большинство баров окрашено в черный, т.е. первые два условия почти никогда не выполняются. Возможно я что-то пропустил в инициализации либо использовать таким образом данные функции недопустимо. Пожалуйста помогите решить эту проблему.

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Black
#property indicator_color3 Red
extern int PT_chart=24; 
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,ExtMapBuffer3);
   IndicatorShortName("ololo");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+   
int start()
  {
//---- TODO: add your code here
   //int counted_bars=IndicatorCounted();
   //for(int i=Bars;i>=0;i--){
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars-1;
   for(int i=Bars;i>=0;i--){                   
//------------------------------------------------------
 

//---------------------------------------------------------
      //--------------------------------            
      //-----------------------------    
      if(Close[i]*100 < Low[i-1]*100)
      {
         ExtMapBuffer3[i]=Close[i];
         ExtMapBuffer1[i]=0;
         ExtMapBuffer2[i]=0;
      }
      else
      if(Close[i]*100 > High[i-1]*100)
      {
         ExtMapBuffer1[i]=Close[i];
         ExtMapBuffer2[i]=0;
         ExtMapBuffer3[i]=0;
      }
      else
      {
         ExtMapBuffer2[i]=Close[i];
         ExtMapBuffer1[i]=0;
         ExtMapBuffer3[i]=0;  
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
 
fourthdimension:

Не могу разобраться. показания индикатора не совпадают с интерпретацией кода. Условие довольно простое, при этом индикатор отрабатывает некорректно и почти всегда попадает в последний else.На графике большинство баров окрашено в черный, т.е. первые два условия почти никогда не выполняются. Возможно я что-то пропустил в инициализации либо использовать таким образом данные функции недопустимо. Пожалуйста помогите решить эту проблему.


Наверно из-за того что в будущее заглядывает
 
fourthdimension:

Не могу разобраться. показания индикатора не совпадают с интерпретацией кода. Условие довольно простое, при этом индикатор отрабатывает некорректно и почти всегда попадает в последний else.На графике большинство баров окрашено в черный, т.е. первые два условия почти никогда не выполняются. Возможно я что-то пропустил в инициализации либо использовать таким образом данные функции недопустимо. Пожалуйста помогите решить эту проблему.


Скорее всего вы собирались сравнивать закрытие текущего бара с High и Low предыдущей свечи. Она имеет индекс i+1

  for(int i=Bars-2;i>=0;i--){                   
//------------------------------------------------------


//---------------------------------------------------------
      //--------------------------------            
      //-----------------------------    
      if(Close[i] < Low[i+1])
      {
         ExtMapBuffer3[i]=Close[i];
         ExtMapBuffer1[i]=0;
         ExtMapBuffer2[i]=0;
      }
      else
      if(Close[i] > High[i+1])
      {
         ExtMapBuffer1[i]=Close[i];
         ExtMapBuffer2[i]=0;
         ExtMapBuffer3[i]=0;
      }
      else
      {
         ExtMapBuffer2[i]=Close[i];
         ExtMapBuffer1[i]=0;
         ExtMapBuffer3[i]=0;  
      }
 
Mislaid:


Скорее всего вы собирались сравнивать закрытие текущего бара с High и Low предыдущей свечи. Она имеет индекс i+1


Да, помогло. Спасибо огромное.
Причина обращения: