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

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

Просмотров:
2088
Рейтинг:
(20)
Опубликован:
2012.12.14 09:23
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс COsMAOnRingBuffer предназначен для расчета технического индикатора Скользящая Средняя Осциллятора (Moving Average of Oscillator, OsMA) с использованием алгоритма  кольцевого буфера

Декларация

class COsMAOnRingBuffer : public CArrayRing

Заголовок

#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>

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

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

//--- метод инициализации:
bool Init(                                  // возвращает false при ошибке, при успехе - true
   int            fast_period   = 12,       // период сглаживания быстрой скользящей средней  
   int            slow_period   = 26,       // период сглаживания медленной скользящей средней 
   int            signal_period = 9,        // период сглаживания для сигнальной скользящей средней 
   ENUM_MA_METHOD fast_method   = MODE_EMA, // метод сглаживания быстрой скользящей средней
   ENUM_MA_METHOD slow_method   = MODE_EMA, // метод сглаживания медленной скользящей средней
   ENUM_MA_METHOD signal_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(              // возвращает значение OsMA для заданного элемента
   const int    rates_total,     // размер массива
   const int    prev_calculated, // обработано элементов массива
   const int    begin,           // откуда начинаются значимые данные массива
   const double value,           // значение элемента массива
   const int    index            // индекс элемента
   );
//--- методы доступа к дынным:
int    BarsRequired();   // Возвращает необходимое количество баров для построения индикатора
string Name()            // Возвращает имя индикатора
string FastMethod()      // Возвращает метод сглаживания быстрой линии в виде текстовой строки
string SlowMethod()      // Возвращает метод сглаживания медленной линии в виде текстовой строки
string SignalMethod()    // Возвращает метод сглаживания сигнальной линии в виде текстовой строки
int    FastPeriod()      // Возвращает период сглаживания быстрой линии
int    SlowPeriod()      // Возвращает период сглаживания медленной линии
int    SignalPeriod()    // Возвращает период сглаживания сигнальной линии
int    Size();           // Возвращает размер кольцевого буфера

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

//--- класс с методами расчета индикатора OsMA:
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- расчет индикатора на основе ценовой таймсерии:
   osma.MainOnArray(rates_total,prev_calculated,price);

...

//--- используем данные из кольцевых буферов "osma",
//    скопируем данные в индикаторный буфер:
   for(int i=start;i<rates_total;i++)
      OsMABuffer[i]=osma[rates_total-1-i];          // гистограмма индикатора
//--- return value of prev_calculated for next call:
   return(rates_total);
  }

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

Примеры

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


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



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

 

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

Exp_VininI_Trend Exp_VininI_Trend

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

XMA_TrendSignal XMA_TrendSignal

Индикатор, фиксирующий три состояния рынка.

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

Класс предназначен для расчета технического индикатора Стохастический Осциллятор (Stochastic Oscillator) с использованием алгоритма кольцевого буфера.

ytg_Japan_Candles ytg_Japan_Candles

Индикатор свечных комбинаций (Японские свечи).