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

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

Просмотров:
3046
Рейтинг:
(22)
Опубликован:
2012.12.11 06:09
Обновлен:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\OnRingBuffer\
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс CATROnRingBuffer предназначен для расчета индикатора Среднего Истинного Диапазона (Average True Range, ATR) с использованием алгоритма  кольцевого буфера

Декларация

class CATROnRingBuffer

Заголовок

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>

Файл класса CATROnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера и с классом Moving Average тоже должен быть в этой папке.

Методы класса

//--- метод инициализации:
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,     // размер массивов
   const int     prev_calculated, // обработано элементов на предыдущем вызове
   const double &high[]           // массив максимальных значений
   const double &low[]            // массив минимальных значений
   const double &close[]          // массив цен закрытия
   );
//--- метод расчета на основе отдельных последовательных элементов массива           
double MainOnValue(              // возвращает значение ATR для заданного элемента
   const int    rates_total,     // размер массива
   const int    prev_calculated, // обработано элементов массива
   const int    begin,           // откуда начинаются значимые данные массива
   const double high,            // максимальное значение 
   const double low,             // минимальное значение 
   const double close,           // цена закрытия 
   const int    index            // индекс элемента
   );
//--- методы доступа к дынным:
int    BarsRequired();   // Возвращает необходимое количество баров для построения индикатора
string Name();           // Возвращает имя индикатора
string MAMethod();       // Возвращает метод сглаживания в виде текстовой строки  
int    MAPeriod();       // Возвращает период сглаживания
int    Size();           // Возвращает размер кольцевого буфера

Получать рассчитанные данные  индикатора из кольцевого буфера можно как из обычного массива. Например:

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>
CATROnRingBuffer atr;

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- расчет индикатора:
   atr.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...

//--- скопируем данные из кольцевого буфера "atr" в индикаторный:  
   for(int i=start;i<rates_total;i++)
     {
      ATR_Buffer[i]=atr[rates_total-1-i];
     }
   return(rates_total);
  }

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

Примеры

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


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



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


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

Exp_ColorTrend_CF Exp_ColorTrend_CF

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

Combinatorics Combinatorics

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

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

Класс предназначен для расчета технического индикатора Индекс Среднего Направления Движения (Average Directional Movement Index, ADX) с использованием алгоритма кольцевого буфера.

VininI_Trend_XMA_WPR VininI_Trend_XMA_WPR

Трендовый индикатор, определяющий свои значения на основании сигналов с индикатора Williams' Percent Range и совокупности его сигнальных линий, периоды которых меняются в арифметической прогрессии.