Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

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

Просмотров:
2731
Рейтинг:
(19)
Опубликован:
2012.12.20 06:21
Обновлен:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\OnRingBuffer\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс 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

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