Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2012.12.27 08:52
Индикаторы

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

| Russian English 中文 Español Deutsch 日本語 Português

Просмотров:
1933
Рейтинг:
голосов: 22

Описание

Класс 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) с использованием алгоритма кольцевого буфера.