Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

Индикаторы

Класс для построения MFI с использованием кольцевого буфера - индикатор для MetaTrader 5

Konstantin Gruzdev | Russian English 中文 Español Deutsch 日本語 Português

Просмотров:
2186
Рейтинг:
голосов: 16
Опубликован:
2012.12.20 06:21
Обновлен:
2016.11.22 07:33

Описание

Класс CMFIOnRingBuffer предназначен для расчета технического индикатора Индекс Денежных Потоков (Money Flow Index, MFI) с использованием алгоритма  кольцевого буфера

Декларация

class CMFIOnRingBuffer : public CArrayRing

Заголовок

#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>

Файл класса CMFIOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера и с классом Moving Average тоже должны быть в этой папке.

Методы класса

//--- метод инициализации:
bool Init(                                             // возвращает false при ошибке,
                                                       // при успехе - true
   int                 period         = 14,            // период MFI
   ENUM_MA_METHOD      method         = MODE_SMA,      // метод сглаживания  
   ENUM_APPLIED_PRICE  applied_price  = PRICE_TYPICAL, // используемая для расчета цена
   ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK,   // используемый для расчета объем
   int                 size_buffer    = 256,           // размер кольцевого буфера
   bool                as_series      = false          // true, если таймсерия, иначе - false
   );
//--- метод расчета на основе таймсерий или индикаторных буферов:          
int MainOnArray(                  // возвращает количество обработанных элементов  
   const int     rates_total,     // размер массивов
   const int     prev_calculated, // обработано элементов на предыдущем вызове
   const double& open[],          // цены открытия
   const double& high[],          // максимальные цены
   const double& low[],           // минимальные цены
   const double& close[],         // цены закрытия
   const long&   tick_volume[],   // тиковый объем
   const long&   volume[]);       // биржевой объем
   );
//--- метод расчета на основе отдельных последовательных элементов массива           
double MainOnValue(              // возвращает значение MFI для заданного элемента (бара)
   const int    rates_total,     // размер массива
   const int    prev_calculated, // обработано элементов массива
   const int    begin,           // откуда начинаются значимые данные массива
   const double open,            // цена открытия бара
   const double high,            // максимальная цена бара
   const double low,             // минимальная цена бара
   const double close,           // цена закрытия бара
   const long   tick_volume,     // тиковый объем бара
   const long   volume,          // биржевой объем бара
   const int    index            // индекс элемента (бара)
   );
//--- методы доступа к данным:
int                 BarsRequired(); // Возвращает необходимое количество баров для построения индикатора
string              Name();         // Возвращает имя индикатора
int                 Period();       // Возвращает период 
string              Method();       // Возвращает метод в виде текстовой строки 
ENUM_APPLIED_PRICE  Price();        // Возвращает тип используемой цены
ENUM_APPLIED_VOLUME Volume();       // Возвращает тип используемого объема
int                 Size();         // Возвращает размер кольцевого буфера

Получать рассчитанные данные  индикатора из кольцевого буфера можно как из обычного массива. Например:

//--- класс с методами расчета индикатора MFI:
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>
CMFIOnRingBuffer mfi;

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- расчет индикатора на основе таймсерий:
   mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume);

...

//--- используем данные из кольцевых буферов "mfi",
//    например,скопируем данные в индикаторный буфер:
   for(int i=start;i<rates_total && !IsStopped();i++)
      MFI_Buffer[i] = mfi[rates_total-1-i]; // линия индикатора

...

//--- return value of prev_calculated for next call:
   return(rates_total);
  }

Обратите внимание, что индексация в кольцевом буфере как в таймсерии.

Примеры

  1. Файл Test_MFI_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
  2. Файл  Test_MFI_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор MFI. Затем на основе кольцевого буфера этого индикатора строится еще один MFI. 


Результат работы Test_MFI_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов



Результат работы Test_MFI_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов

 

При написании кода использовались наработки MetaQuotes Software Corp.Integer и GODZILLA

Класс для построения AMA с использованием кольцевого буфера Класс для построения AMA с использованием кольцевого буфера

Класс предназначен для расчета технического индикатора Адаптивное Скользящее Среднее (Adaptive Moving Average, AMA) с использованием алгоритма кольцевого буфера.

RD-TrendTrigger RD-TrendTrigger

Осциллятор с использованием T3 усреднения из журнала Technical Analysis of Stocks and Commodities (Dec. 2004).

T3MACO T3MACO

Осциллятор с использованием T3 усреднения.

ytg_Fractals_Price ytg_Fractals_Price

Индикатор ценовых уровней фракталов