Тестер и iHigh

 

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

Итак, дано: Индикатор проекции основных параметров бара со старшего фрейма на младший.

На демо, реале, в Тестере, при тестировании индикатора, код работает так, как и задумывалось :)

В Тестере, если в процессе тестирования Эксперта данный индикатор помещать на График исследуемого периода, то функция IHigh отображает данные некорректно.
В тоже время, функции iOpen и iLow отображают данные корректно. Функция iClose не отображает данных.

Кто может подсказать причину подобного поведения Инди? 

Код индикатора:

#property  strict

#property indicator_chart_window
#property indicator_buffers 4

//--- input parameters
input    int      ЧислоДней = 5;
//-----\
         double   Dn[];    // Массив 1
         double   Up[];    // Массив 2
         double   Op[];    // Массив 3
         double   Cl[];    // Массив 4         
         
         int      ЧислоБаров  = 0;
//-----\

int init()
  {
//----\
   SetIndexBuffer(0,Dn);
   SetIndexLabel( 0,"Dn");
   SetIndexStyle( 0,DRAW_ARROW, 0, 0, clrDarkOrange);
   SetIndexArrow( 0,159); 
      
   SetIndexBuffer(1,Up);
   SetIndexLabel( 1,"Up");
   SetIndexStyle( 1,DRAW_ARROW, 0, 0, clrDeepPink);
   SetIndexArrow( 1,159);
   
   SetIndexBuffer(2,Op);
   SetIndexLabel( 2,"Open");
   SetIndexStyle( 2,DRAW_ARROW, 0, 0, clrTomato);
   SetIndexArrow( 2,159); 
      
   SetIndexBuffer(3,Cl);
   SetIndexLabel( 3,"Close");
   SetIndexStyle( 3,DRAW_ARROW, 0, 0, clrChocolate);
   SetIndexArrow( 3,159);   
//-----\
   ЧислоБаров  =  ЧислоДней*TimeFrameToInt(_Period);
//-----\
   return(0);
  }   // end init
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//-----\
//-----\
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
   //ArraySetAsSeries(Dn,true);
   //ArraySetAsSeries(Up,true);
     
   //ArrayInitialize(Dn,EMPTY_VALUE);
   //ArrayInitialize(Up,EMPTY_VALUE);
//-----\
//-----\
   for (int i=ЧислоБаров; i>=0; i--) 
   {
      //int n=iBarShift(NULL,PERIOD_D1,Time[i]);
      int n=iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_CURRENT,i));
      
      Dn[i] = iHigh(NULL,PERIOD_D1,n);
      Up[i] = iLow (NULL,PERIOD_D1,n);
      
      Op[i] = iOpen(NULL,PERIOD_D1,n);
      Cl[i] = iClose (NULL,PERIOD_D1,n);      
   }
//-----\
   return(0);
  }
//+------------------------------------------------------------------+
int TimeFrameToInt(int tf)
  {
   int tfi = 1;
     switch(tf) 
     {
         case PERIOD_M1:  tfi=1440  ;break;
         case PERIOD_M5:  tfi=288   ;break;
         case PERIOD_M15: tfi=96    ;break;
         case PERIOD_M30: tfi=48    ;break;
         case PERIOD_H1:  tfi=24    ;break;
         case PERIOD_H4:  tfi=6     ;break;
         case PERIOD_D1:  tfi=1     ;break;
         case PERIOD_W1:  tfi=1     ;break;
         case PERIOD_MN1: tfi=1     ;
        }
      return(tfi);
     } 
//--------------------------------------------------------------------+\
 
График визуализатора работает в реальном рыночном окружении, а не в окружении тестера. 
 
Ihor Herasko:
График визуализатора работает в реальном рыночном окружении, а не в окружении тестера. 

Я парень деревенский, поэтому мне не понятно, почему функция iLow работает в этом "реальном рыночном окружении", а функция iHigh, по сути сестра близнец iLow, не работает, точнее, не отображает соответствующие данные. Це мистика! :) для меня, а потому и возник вопрос, в котором хотелось бы разобраться. 
 
Vjacheslav Lapaev:

Я парень деревенский, поэтому мне не понятно, почему функция iLow работает в этом "реальном рыночном окружении", а функция iHigh, по сути сестра близнец iLow, не работает, точнее, не отображает соответствующие данные. Це мистика! :) для меня, а потому и возник вопрос, в котором хотелось бы разобраться. 

Простое совпадение. Работая на графике визуализации, индикатор имеет доступ только к таймсериям текущего периода, которые совпадают с окружением тестера. Данные по всем остальным таймфреймам он получает из реальности. Так сделано уже очень давно (это был наиболее простой выход) и ничего с этим уже не поделаешь - МТ4 более не развивается. 
 
Ihor Herasko:

Простое совпадение. Работая на графике визуализации, индикатор имеет доступ только к таймсериям текущего периода, которые совпадают с окружением тестера. Данные по всем остальным таймфреймам он получает из реальности. Так сделано уже очень давно (это был наиболее простой выход) и ничего с этим уже не поделаешь - МТ4 более не развивается. 

Ясно, спасибо.