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

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

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

Описание

Класс CMACDOnRingBuffer предназначен для расчета технического индикатора Схождение/Расхождение Скользящих Средних (Moving Average Convergence/Divergence, MACD) с использованием алгоритма  кольцевого буфера

Декларация

class CMACDOnRingBuffer

Заголовок

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

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

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

//--- метод инициализации:
bool Init(                                  // возвращает false при ошибке, при успехе - true
   int            fast_period   = 12,       // период сглаживания быстрой скользящей средней  
   int            slow_period   = 26,       // период сглаживания медленной скользящей средней 
   int            signal_period = 9,        // период сглаживания для сигнальной скользящей средней 
   ENUM_MA_METHOD fast_method   = MODE_EMA, // метод сглаживания быстрой скользящей средней
   ENUM_MA_METHOD slow_method   = MODE_EMA, // метод сглаживания медленной скользящей средней
   ENUM_MA_METHOD signal_method = MODE_SMA, // метод сглаживания для сигнальной средней
   int            size_buffer   = 256,      // размер кольцевого буфера, количество хранимых данных
   bool           as_series     = false     // true, если таймсерия, false - обычная индексация входных данных
   );
//--- метод расчета на основе таймсерии или индикаторного буфера:          
int MainOnArray(                  // возвращает количество обработанных элементов  
   const int     rates_total,     // размер массива array[]
   const int     prev_calculated, // обработано элементов на предыдущем вызове
   const double &array[]          // массив входных значений
   );
//--- метод расчета на основе отдельных последовательных элементов массива           
double MainOnValue(              // возвращает значение MACD для заданного элемента
   const int    rates_total,     // размер массива
   const int    prev_calculated, // обработано элементов массива
   const int    begin,           // откуда начинаются значимые данные массива
   const double value,           // значение элемента массива
   const int    index            // индекс элемента
   );
//--- методы доступа к дынным:
int    BarsRequired();   // Возвращает необходимое количество баров для построения индикатора
string Name()            // Возвращает имя индикатора
string NameMain()        // Возвращает имя главной линии индикатора
string NameSignal()      // Возвращает имя сигнальной линии индикатора
string FastMethod()      // Возвращает метод сглаживания быстрой линии в виде текстовой строки
string SlowMethod()      // Возвращает метод сглаживания медленной линии в виде текстовой строки
string SignalMethod()    // Возвращает метод сглаживания сигнальной линии в виде текстовой строки
int    FastPeriod()      // Возвращает период сглаживания быстрой линии
int    SlowPeriod()      // Возвращает период сглаживания медленной линии
int    SignalPeriod()    // Возвращает период сглаживания сигнальной линии
int    Size();           // Возвращает размер кольцевого буфера

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

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

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- расчет индикатора на основе ценовой таймсерии:
   macd.MainOnArray(rates_total,prev_calculated,price);

...

//--- используем данные из кольцевых буферов "macd",
//    скопируем данные в индикаторные буфера:
   for(int i=start;i<rates_total;i++)
     {
      MainBuffer[i]   = macd[rates_total-1-i];          // гистограмма индикатора
      SignalBuffer[i] = macd.signal[rates_total-1-i];   // сигнальная линия индикатора
     }
//--- return value of prev_calculated for next call:
   return(rates_total);
  }

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

Примеры

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


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



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

 

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

EF_distance EF_distance

Ещё одна вариация на тему мувингов...

Clock Clock

Индикатор отображает три варианта времени на графике: локальное, серверное и GMT!

XMA_TrendSignal XMA_TrendSignal

Индикатор, фиксирующий три состояния рынка.

Exp_VininI_Trend Exp_VininI_Trend

Торговая система Exp_VininI_Trend построена на основе изменения направления тренда, отображаемого индикатором VininI_Trend.