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

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

Просмотров:
3402
Рейтинг:
(28)
Опубликован:
2012.12.27 08:52
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

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

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

Примеры

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


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



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

 

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

Predict Predict

Семафорный, сигнальный индикатор с тремя вариантами сигналов

StepMA_v6.4 StepMA_v6.4

Простой, трендовый индикатор NRTR типа

SuperWoodiesCCI SuperWoodiesCCI

Индикатор, реализующий стратегию торгновли с использованием CCI

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

Класс предназначен для расчета технического индикатора Фракталы (Fractals) с использованием алгоритма кольцевого буфера.