данные с чужих таймфремов моделируются?

 
если мне нужно например на часовом графике в некоторой точке узнать значение дневного МА на закрытии предыдущего дня, то каким наиболее элегантным способом это сделать?
 
все данные выдаются верно, а для нулевого бара действуют ограничения:
"Особенности и ограничения тестирования в MetaTrader 4"

Нулевой бар другого периода по тому же самому тестируемому символу моделируется приблизительно

Open = корректный Open,
Close = корректный Close,
Low = min (Open,Close),
High = max (Open,Close),
Volume = итоговый Volume (неверный)
 
тему я не совсем верно написал.
меня интересует пример кода для вычисления МА старшего таймфрейма например 2-бара назад.

например индикатор прикрлеплен на 1 час (текущее время 8:20), а надо узнать значение МА на 2-м 4 часовом баре (т.е. открытом в 0:00 и закрытом в 4:00).

вызов iMA(NULL,PERIOD_H4,13,0,MODE_EMA,PRICE_CLOSE,shift+2); я так понимаю выдаст значение 4-х часовой МА на 7:00 (момент закрытия часого бара открытого в 6:00 == 8:00 - 2 ).
а нужно на 4:00

??
 
нет, все правильно, вызов iMA(NULL,PERIOD_H4,13,0,MODE_EMA,PRICE_CLOSE,shift+2); выдаст значение 4-х часовой МА на баре закрытом в 4:00.

а вот пример того, что я хотел добиться:


//+------------------------------------------------------------------+
//|                                                          ema.mq4 |
//|                Copyright © 2005, Nick Bilak, beluck[AT]gmail.com |
//|                                    http://metatrader.50webs.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak"
#property link      "http://metatrader.50webs.com/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Magenta
//---- input parameters
extern int       Len=13;
//---- buffers
double ema[];
   
int highTF;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   int p=Period();

   switch (p) {
      case 1: highTF = 5; break;
      case 5: highTF = 30; break;
      case 15: highTF = 60; break;
      case 30: highTF = 240; break;
      case 60: highTF = 240; break;
      case 240: highTF = 1440; break;
      case 1440: highTF = 10080; break;
      default: return(-1); break;
   } 

//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ema);
   IndicatorShortName("EMAHtf("+Len+","+highTF+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

   int counted_bars=IndicatorCounted(),limit,shift,htBar,htShift;
   
   if (counted_bars<0) return(-1);
   if (counted_bars>0) counted_bars--;
   limit=Bars-Len-1;
   if(counted_bars>Len) limit=Bars-counted_bars-1;
   
   for (shift=limit;shift>=0;shift--)   {
      htShift=(Time[shift] % (highTF*60))/Period()/60;
      htBar=(shift+htShift)/(highTF/Period());
      ema[shift]=iMA(NULL,highTF,Len,0,MODE_EMA,PRICE_CLOSE,htBar);
   }
   return(0);
  }
Причина обращения: