Мультифреймовость - вот она есть, а вот ее нет

 
Вот горшок пустой, он предмет простой...

Не ту страну назвали Гондурасом, немного растроен. Нет так представлял.
Сделали в МТ4 возможность поглядывать на значения индикаторов на других инструментах и даже на других тайм-фреймах. Так как тестера пока нет, то решил обойтись индикатором. Написал исходный индикатор, предполагается, что он нам нужен на дневках (D1)

//+------------------------------------------------------------------+
//|                                                         MRO1.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       periodMRO1=10;
//---- buffers
double RatedRangeBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,RatedRangeBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double Range,AvrRange;
   int shift,i;
//   int i;
   int    counted_bars=Bars-periodMRO1-1;
   //int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   for (shift=counted_bars;shift>=0;shift--)
      {
      Range=0.0;
      for (i=shift+1;i<=shift+periodMRO1;i++)
         {
         Range=Range+MathAbs(High[i]-Low[i]);
         };
      AvrRange=Range/periodMRO1;
      RatedRangeBuffer[shift]=MathAbs(Open[shift+1]-Close[shift+2])/AvrRange;
      };   
//----
   return(0);
  }



Чтобы иметь его показания на более мелких тайм-фреймах, сделал еще один индикатор, который вызывает исходный.

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       PeriodMin=1440;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int bigshift;
   int shift;
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   for (shift=Bars;shift>=0;shift--)
      {
      bigshift=MathFloor(shift*Period()/PeriodMin);
      ExtMapBuffer1[shift]=iCustom(NULL,PeriodMin,"MRO1",10,0,bigshift);
      
      };
//----
   return(0);
  }



Скажу сразу, это плод моих попыток получить хоть что-то. Получил эдакие ступеньки. Но ведь до того,как я занялся этим экспериментом, я предполагал получить значения исходного индикатора в динамике, а получил статику. То есть, я могу получить либо значение индикатора в Close[1](Open[0]) либо в точке Close[0] - что является заглядыванием в будущее. Нельзя использовать индикаторы , использующие динамику цены: текущий Close, TypicalPrice и т.д. Очень жаль.
Картинку выложить не могу, так как сносил систему и забыл записать пароли для ftp-доступа к своему сайту. Постараюсь вставить завтра.
Может все-таки когда-нибудь появится возможность их вставки?

 
А вот и рисунок к предыдущему посту.
 
Rosh, не могу понять зачем в MRO1 ты стандартный ATR высчитываешь самостоятельно, только с задержкой на 1 бар по сравнению со стандартным (я не о конечном итоге, а о промежуточных расчетах). Ну не это главное, не врубаюсь, что ты вообще изначально задумал. Если правильно понял, ты хочешь, чтобы на малых таймфреймах разница между close предыдущей свечи и open текущей делилась на ATR большего таймфрейма? Если так, то гораздо проще все в одном индикаторе сделать. Если неправильно понял, поправь.
 
Rosh, не могу понять зачем в MRO1 ты стандартный ATR высчитываешь самостоятельно, только с задержкой на 1 бар по сравнению со стандартным (я не о конечном итоге, а о промежуточных расчетах). Ну не это главное, не врубаюсь, что ты вообще изначально задумал. Если правильно понял, ты хочешь, чтобы на малых таймфреймах разница между close предыдущей свечи и open текущей делилась на ATR большего таймфрейма? Если так, то гораздо проще все в одном индикаторе сделать. Если неправильно понял, поправь.


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

А что, остальные бета-тестеры со мной не согласны?
 
MetaQuotes, вопрос вроде задан. Как вами задумано использование индикаторов на разных временных фреймах при тестировании эксперта. Я только и жду, когда вы запустите тестер и можно будет использовать возможности мультифреймовости.
 
MetaQuotes, вопрос вроде задан. Как вами задумано использование индикаторов на разных временных фреймах при тестировании эксперта. Я только и жду, когда вы запустите тестер и можно будет использовать возможности мультифреймовости.

В принципе, разработчики уже ответили. Смотри здесь - "Каков механизм расчета iCustom(....)?"
Теперь пытаюсь сформулировать предложение по изменению механизма расчета индикаторов при обращении из тестера и при вызовах с более высоких тайм-фреймов.
Причина обращения: