Moving Avarage за последние 10 часов

 

Всем привет.

Решил применить индикатор IMA для анализа его значений за последние 10 часов.

Индикатор IMA(PERIOD_H1) производит расчёт в текущий момент средней за последний час.

Вопрос: Как сразу получить значение индикатора IMA(PERIOD_H1) за каждые прошедшие 10 часов?

 
int  iMA( 
   string               symbol,            // имя символа 
   ENUM_TIMEFRAMES      period,            // период 
   int                  ma_period,         // период усреднения 
   int                  ma_shift,          // смещение индикатора по горизонтали 
   ENUM_MA_METHOD       ma_method,         // тип сглаживания 
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle 
   );

period = PERIOD_H1

ma_period = 10

 
kroww248:

Всем привет.

Решил применить индикатор IMA для анализа его значений за последние 10 часов.

Индикатор IMA(PERIOD_H1) производит расчёт в текущий момент средней за последний час.

Вопрос: Как сразу получить значение индикатора IMA(PERIOD_H1) за каждые прошедшие 10 часов?

Вопрос к четверке относится или к пятерке. Подход малость разный
 

 Victor Nikolaev

MQL4

----------------------------------------------- 

 Andrey F. Zelinsky

ты вообще вопрос понял? 

 
kroww248:

ты вообще вопрос понял? 

 
kroww248:

 Victor Nikolaev

MQL4

----------------------------------------------- 

 Andrey F. Zelinsky

ты вообще вопрос понял? 

iMA

Возвращает значение технического индикатора Moving Average.

double  iMA(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          applied_price,    // тип цены
   int          shift             // сдвиг
   );

http://docs.mql4.com/ru/indicators/ima

iMA - Документация на MQL4
  • docs.mql4.com
iMA - Документация на MQL4
 
kroww248:

Всем привет.

Решил применить индикатор IMA для анализа его значений за последние 10 часов.

Индикатор IMA(PERIOD_H1) производит расчёт в текущий момент средней за последний час.

Вопрос: Как сразу получить значение индикатора IMA(PERIOD_H1) за каждые прошедшие 10 часов?

for ( int i = 0; i < 10; i ++ ) Print( iMA( ........, i );
 

Требуется уточнение: нужны значения МА за последние 10 часовых баров или за последние 10 часов? К примеру, если нужно знать показания МА за последние 10 часов, то в 02:00 понедельника у нас будут показания только за 00:00 и 01:00 понедельника, т. к. котировки интервале 16:00 - 24:00 воскресенья в большинстве случаев отсутствуют.

Если же нужны данные МА за последние 10 часовых баров, то выше уже предложили решение и не раз. 

Хотя есть еще один вариант того, что хотел ТС. Может нужно вычислить значение МА за последние 10 баров? Тогда вообще просто:

double ma = iMA(NULL, PERIOD_H1, 10, 0, MODE_EMA, PRICE_CLOSE, 1);
 

Ihor Herasko:

...

Хотя есть еще один вариант того, что хотел ТС. Может нужно вычислить значение МА за последние 10 баров? Тогда вообще просто:

double ma = iMA(NULL, PERIOD_H1, 10, 0, MODE_EMA, PRICE_CLOSE, 1);

Э-э-эм... Sorry. На подобное предложение от Andrey F. Zelinsky был ответ от автора темы, что в рамках вопроса этот вариант скорее всего не подходит: https://www.mql5.com/ru/forum/67532#comment_2062435

P./S.: Но понятно, что вы упомянули этот вариант будучи практиком, прорабатывающим разные варианты когда погружаетесь в вопрос.

 

EXAMPLE

Вот что я делаю (на примере минутка): При помощи массива запоминаю какие были значения средней каждую минуту и вывожу их на экран.

Целью этой темы является нахождение способа, чтобы обойтись без массива и не ждать 10 минут, когда он заполнится. Например могу ли я расчитать среднюю две-три минуты назад?

Потому как если брать часовой таймфрейм, то ждать 10 часов - это мазохизм. 

 
kroww248:

Вот что я делаю (на примере минутка): При помощи массива запоминаю какие были значения средней каждую минуту и вывожу их на экран.

Целью этой темы является нахождение способа, чтобы обойтись без массива и не ждать 10 минут, когда он заполнится. Например могу ли я расчитать среднюю две-три минуты назад?

Потому как если брать часовой таймфрейм, то ждать 10 часов - это мазохизм. 

Не надо ждать. Ответы есть выше.

Вот тестовый скрипт:

#property strict
#property script_show_inputs
//---
#define TEST_PRINT_TWO(x,y)        Print(__LINE__,", ",__FUNCTION__,", ",(#x)," = ",(x),\
                                         ", ",(#y)," = ",(y))
#define TEST_PRINT_THREE(x,y,z)    Print(__LINE__,", ",__FUNCTION__,", ",(#x)," = ",(x),\
                                         ", ",(#y)," = ",(y),", ",(#z)," = ",(z))
//+------------------------------------------------------------------+
input ushort quantBars=10;//Количество выводимых значений
input ENUM_TIMEFRAMES time_frame=PERIOD_CURRENT;
input int ma_period=5;
input int ma_shift=0;
input ENUM_MA_METHOD ma_method=MODE_SMA;
input ENUM_APPLIED_PRICE applied_price=PRICE_OPEN;
input ushort shift=1;//С какого бара выводить значения (0 = текущий)
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int dig=Digits(),
   b=Bars-1,
   quant_bars=(quantBars<b)?quantBars:3,
   shift_ch=(quant_bars+shift<b)?shift:0;
   //---
   TEST_PRINT_THREE(b,quant_bars,shift_ch);
   //---
   quant_bars=quant_bars+shift_ch-1; 
   //---
   double value=0.0;
//---
   for(int i=quant_bars;i>=shift_ch;i--)
     {
      value=iMA(NULL,time_frame,ma_period,ma_shift,ma_method,
                applied_price,i);
      //---
      TEST_PRINT_TWO(i,DoubleToString(value,dig));
     }
  }
//+------------------------------------------------------------------+

Вывод во вкладку "Эксперты" терминала:

P./S.: Поправила чуть код. Набросала-то его "на коленке".
Файлы:
test_MA.mq4  3 kb
Причина обращения: