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

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

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

Описание

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

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

Примеры

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


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



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

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

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

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

Exp_ColorLeManTrend Exp_ColorLeManTrend

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

Combinatorics Combinatorics

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

Exp_ColorTrend_CF Exp_ColorTrend_CF

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