Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Класс для построения OBV с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 2549
- Рейтинг:
- Опубликован:
- 2012.12.25 10:56
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс 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); }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_OBV_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
- Файл Test_OBV_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор OBV. Затем на основе кольцевого буфера этого индикатора строится еще один OBV.
Результат работы Test_OBV_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_OBV_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
4-х цветный индикатор АО
StepSto_v1Трендовый индикатор. Ориентиром для определения тренда может служить расположение линий индикатора относительно уровня 50, а сигналами для осуществления сделок пересечения этих линий друг с другом.
Очень удобный индикатор для подтверждения любых сигналов входа в рынок
Renko_v1Трендовый индикатор, рисующий границы канала