Как Moving Average взять не от графика, а от индикатора?

 
griha:
Подскажите как на индикаторы RSI или Stohastic наложить МА т.е. МА взять не от графика, а от индикатора?

В МТ4 есть функция iMAOnArray() но в пятёрке её наверно забыли реализовать.

Остаётся самому посчитать по формулам. У машки не сложные формулы думаю не запутаетесь. Формулы все есть в документации к mql4.

 
griha:
Подскажите как на индикаторы RSI или Stohastic наложить МА т.е. МА взять не от графика, а от индикатора?

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

OnCalculate

Функция OnCalculate() вызывается только в пользовательских индикаторах при необходимости произвести расчет значений индикатора по событию Calculate. Обычно это происходит при поступлении нового тика по символу, для которого рассчитывается индикатор. При этом индикатор не обязательно должен быть прикреплен к какому-нибудь ценовому графику данного символа.

Функция OnCalculate() должна иметь тип возвращаемого значения int. Существует два варианта определения. В пределах одного индикатора нельзя использовать оба варианта функции.

Первая форма вызова предназначена для тех индикаторов, которые могут быть рассчитаны на одном буфере данных. Пример такого индикатора - Custom Moving Average.

int OnCalculate (const int rates_total,      // размер массива price[]
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const int begin,            // откуда начинаются значимые данные
                 const double& price[]       // массив для расчета
   );

В качестве массива price[] может быть передана одна из ценовых таймсерий либо рассчитанный буфер какого-либо индикатора. Чтобы определить направление индексации в массиве price[], необходимо вызывать функцию ArrayGetAsSeries(). Чтобы не зависеть от умолчаний, необходимо безусловно вызывать функцию ArraySetAsSeries() для тех массивов, с которыми предполагается работать.

Выбор необходимой таймсерии или индикатора в качестве массива price[] производится пользователем при запуске индикатора на закладке "Parameters". Для этого необходимо указать нужный элемент в выпадающем списке поля "Apply to".

Выбор таймсерии для расчета индикатора

Для получения значений пользовательского индикатора из других mql5-программ используется функция iCustom(), возвращающая хэндл индикатора для последующих операций. При этом также можно указать необходимый массив  price[] или хэндл другого индикатора. Этот параметр должен передаваться последним в списке  входных переменных пользовательского индикатора.
 
Пример:

void OnStart()
  {
//---
   string terminal_path=StatusInfoString(STATUS_TERMINAL_PATH);
   int handle_customMA=iCustom(Symbol(),PERIOD_CURRENT"Custom Moving Average",13,0, MODE_EMA,PRICE_TYPICAL);
   if(handle_customMA>0)
      Print("handle_customMA = ",handle_customMA);
   else
      Print("Cannot open or not EX5 file '"+terminal_path+"\\MQL5\\Indicators\\"+"Custom Moving Average.ex5'");
  }

В данном примере последним параметром передано значение PRICE_TYPICAL (из перечисления ENUM_APPLIED_PRICE ), которое указывает, что пользовательский индикатор будет построен по типическим ценам, полученным как (High+Low+Close)/3. Если параметр не указывается, то индикатор строится по значениям PRICE_CLOSE, то есть по ценам закрытия каждого бара.

Другой пример, демонстрирующий передачу хендла индикатора последним параметром для указания массива price[], приведен в описании функции iCustom().


 
Спасибо!
 
griha:
Спасибо!

Да вот еще есть такая функция в стандартной библиотеке

int SimpleMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,
                     const int period,const double& price[],double& buffer[])
она находиться в файле MovingAverages.mqh
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
Причина обращения: