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

Класс для построения Moving Average с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 3168
- Рейтинг:
- Опубликован:
- 2012.12.10 09:20
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс CMAOnRingBuffer предназначен для расчета средних (Moving Average) с использованием алгоритма кольцевого буфера.
Декларация
class CMAOnRingBuffer :public CArrayRing
Заголовок
#include <IncOnRingBuffer\CMAOnRingBuffer.mqh>
Файл класса CMAOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера тоже должен быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int ma_period = 14, // период сглаживания скользящей средней ENUM_MA_METHOD ma_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( // возвращает значение MA для заданного элемента const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массива const double value, // значение элемента массива const int index // индекс элемента массива );
//--- методы доступа к дынным: int BarsRequired(); // Возвращает необходимое количество баров для построения индикатора string Name(); // Возвращает имя индикатора string MAMethod(); // Возвращает метод сглаживания в виде текстовой строки int MAPeriod(); // Возвращает период сглаживания
Получать рассчитанные данные индикатора из кольцевого буфера можно как из обычного массива. Например:
#include <IncOnRingBuffer\CMAOnRingBuffer.mqh> CMAOnRingBuffer ma; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- расчет индикатора: ma.MainOnArray(rates_total,prev_calculated,price); ... //--- скопируем данные из кольцевого буфера "ma" в индикаторный: for(int i=start;i<rates_total;i++) { MA_Buffer[i]=ma[rates_total-1-i]; } return(rates_total); }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_MA_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
- Файл Test_MA_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор MA. Затем на основе кольцевого буфера этого индикатора рассчитывается еще один индикатор МА.
Результат работы Test_MA_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_MA_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов

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

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

Начальная библиотека по функциям комбинаторики.

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