Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Класс для построения MACD с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 3226
- Рейтинг:
- Опубликован:
- 2012.12.13 09:32
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс 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); }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_MACD_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовых таймсерий. Демонстрируется применение метода MainOnArray()
- Файл Test_MACD_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор MACD. Затем на основе кольцевого буфера этого индикатора строится еще один MACD.
Результат работы Test_MACD_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_MACD_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
Ещё одна вариация на тему мувингов...
ClockИндикатор отображает три варианта времени на графике: локальное, серверное и GMT!
Индикатор, фиксирующий три состояния рынка.
Exp_VininI_TrendТорговая система Exp_VininI_Trend построена на основе изменения направления тренда, отображаемого индикатором VininI_Trend.