Описание
Класс CTEMAOnRingBuffer предназначен для расчета технического индикаторa Тройное Экспоненциальное Скользящее Среднее (Triple Exponential Moving Average, TEMA) с использованием алгоритма кольцевого буфера.
Декларация
class CTEMAOnRingBuffer : public CArrayRing
Заголовок
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>Файл класса CTEMAOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файлы с классами кольцевого буфера, DEMA и Moving Average тоже должны быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int period = 12, // период TEMA ENUM_MA_METHOD method = MODE_EMA, // метод сглаживания int size_buffer = 256, // размер кольцевого буфера bool as_series = false // true, если таймсерия, иначе - false );
//--- метод расчета на основе таймсерий или индикаторных буферов: int MainOnArray( // возвращает количество обработанных элементов const int rates_total, // размер массивов const int prev_calculated, // обработано элементов на предыдущем вызове const double& price[], // массив для расчета );
//--- метод расчета на основе отдельных последовательных элементов массива double MainOnValue( // возвращает значение TEMA для заданного элемента (бара) const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массивa const double value, // значение элемента (бара) const int index // индекс элемента (бара) );
//--- методы доступа к данным: int BarsRequired(); // Возвращает необходимое количество баров для построения индикатора string Name(); // Возвращает имя индикатора int Period(); // Возвращает период int Size(); // Возвращает размер кольцевого буфера double MA(int index); // Возвращает значение Moving Average, индексация как в таймсерии double DEMA(int index); // Возвращает значение DEMA, индексация как в таймсерии
Получать рассчитанные данные индикатора из кольцевого буфера можно как из обычного массива. Например:
//--- класс с методами расчета индикатора TEMA: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // размер массива price[] const int prev_calculated, // обработано баров на предыдущем вызове const int begin, // откуда начинаются значимые данные const double& price[]) // массив для расчета { //--- расчет индикатора на основе таймсерий: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- используем данные из кольцевого буфера "tema", // например,скопируем данные в индикаторный буфер: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // линия индикатора TEMA ... //--- return value of prev_calculated for next call: return(rates_total); }
При расчете TEMA также производится расчет Moving Average и DEMA с аналогичными параметрами. Получить данные из кольцевого буфера MA и DEMA можно при помощи методов MA(int index) и DEMA(int index), соответственно:
//--- используем данные из кольцевых буферов Moving Avarage и DEMA, // например,скопируем их в индикаторные буфера: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // линия индикатора Moving Avarage DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // линия индикатора DEMA }
Обратите внимание, что индексация в кольцевых буферах как в таймсерии.
Примеры
Результат работы Test_TEMA_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA

Результат работы Test_TEMA_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
Predict
Семафорный, сигнальный индикатор с тремя вариантами сигналов
StepMA_v6.4
Простой, трендовый индикатор NRTR типа
SuperWoodiesCCI
Индикатор, реализующий стратегию торгновли с использованием CCI
Класс для построения Fractals с использованием кольцевого буфера
Класс предназначен для расчета технического индикатора Фракталы (Fractals) с использованием алгоритма кольцевого буфера.