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

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

Просмотров:
2549
Рейтинг:
(21)
Опубликован:
2012.12.25 10:56
Обновлен:
2016.11.22 07:33
\MQL5\Indicators\OnRingBuffer\ \MQL5\Include\IncOnRingBuffer\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс COBVOnRingBuffer предназначен для расчета технического индикаторa Балансового Объема (On Balance Volume, OBV) с использованием алгоритма  кольцевого буфера

Декларация

class COBVOnRingBuffer : public CArrayRing

Заголовок

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

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

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

//--- метод инициализации:
bool Init(                                        // возвращает false при ошибке, при успехе - true
   int                 period      = 0,           // период OBV
   int                 size_buffer = 256,         // размер кольцевого буфера
   bool                as_series   = false        // true, если таймсерия, иначе - false
   );

Период OBV используется как у Integer: при значении 0 (по умолчанию) индикатор работает точно так же, как встроенный в терминал - рассчитывается по всем барам графика. При любом другом положительном значении для расчета значения на каждом баре графика используется указанное количество баров (принцип скользящей средней). 

//--- метод расчета на основе таймсерий или индикаторных буферов:          
int MainOnArray(                  // возвращает количество обработанных элементов  
   const int     rates_total,     // размер массивов
   const int     prev_calculated, // обработано элементов на предыдущем вызове
   const double& price[],         // ценa
   const long&   volume[]);       // объем
   );
//--- метод расчета на основе отдельных последовательных элементов массива           
double MainOnValue(              // возвращает значение OBV для заданного элемента (бара)
   const int    rates_total,     // размер массива
   const int    prev_calculated, // обработано элементов массива
   const int    begin,           // откуда начинаются значимые данные массивa
   const double price,           // ценa
   const long   volume,          // объем
   const int    index            // индекс элемента (бара)
   );
//--- методы доступа к данным:
int                 BarsRequired(); // Возвращает необходимое количество баров для построения индикатора
string              Name();         // Возвращает имя индикатора
int                 Period();       // Возвращает период
int                 Size();         // Возвращает размер кольцевого буфера

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

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

...

//+------------------------------------------------------------------+
//| 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[])
  {
//--- расчет индикатора на основе таймсерий:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...

//--- используем данные из кольцевого буфера "obv",
//    например,скопируем данные в индикаторный буфер:
   for(int i=start;i<rates_total && !IsStopped();i++)
      OBV_Buffer[i] = obv[rates_total-1-i]; // линия индикатора

...

//--- return value of prev_calculated for next call:
   return(rates_total);
  }

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

Примеры

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


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



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

 

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

4-х цветный индикатор АО 4-х цветный индикатор АО

4-х цветный индикатор АО

StepSto_v1 StepSto_v1

Трендовый индикатор. Ориентиром для определения тренда может служить расположение линий индикатора относительно уровня 50, а сигналами для осуществления сделок пересечения этих линий друг с другом.

RoundPrice-Ext RoundPrice-Ext

Очень удобный индикатор для подтверждения любых сигналов входа в рынок

Renko_v1 Renko_v1

Трендовый индикатор, рисующий границы канала