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

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

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

Описание

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

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