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

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

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

Описание

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

Декларация

class CStochasticOnRingBuffer

Заголовок

#include <IncOnRingBuffer\CStochacticOnRingBuffer.mqh>

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

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

//--- метод инициализации:
bool Init(                                 // возвращает false при ошибке, при успехе - true
   int            period_k    = 5,         // период %K
   int            period_d    = 3,         // период %D
   int            period_s    = 3,         // период замедления %K
   ENUM_MA_METHOD method      = MODE_SMA,  // метод %D
   int            size_buffer = 256,       // размер кольцевого буфера, количество хранимых данных
   bool           as_series   = false      // true, если таймсерия, false - обычная индексация входных данных
   );   
//--- метод расчета на основе таймсерий или индикаторных буферов:          
int MainOnArray(                  // возвращает количество обработанных элементов  
   const int     rates_total,     // размер массивов
   const int     prev_calculated, // обработано элементов на предыдущем вызове
   const double &high[]           // массив максимальных значений
   const double &low[]            // массив минимальных значений
   const double &close[]          // массив цен закрытия
   );
//--- метод расчета на основе отдельных последовательных элементов массива           
double MainOnValue(               // возвращает значение Stochastic для заданного элемента
   const int    rates_total,      // размер массива
   const int    prev_calculated,  // обработано элементов массива
   const int    begin,            // откуда начинаются значимые данные массива
   const double high,             // максимальное значение 
   const double low,              // минимальное значение 
   const double close,            // цена закрытия 
   const int    index             // индекс элемента
   );
//--- методы доступа к дынным:
int    BarsRequired();   // Возвращает необходимое количество баров для построения индикатора
string Name();           // Возвращает имя индикатора
string NameSignal();     // Возвращает имя сигнальной линии индикатора
string Method();         // Возвращает метод сглаживания в виде текстовой строки
int    PeriodK()         // Возвращает период %K
int    PeriodS()         // Возвращает период замедления %K
int    PeriodD()         // Возвращает период %D
int    Size();           // Возвращает размер кольцевого буфера

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

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

...

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

...

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

...

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

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

Примеры

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


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



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

 

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

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

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

Exp_VininI_Trend Exp_VininI_Trend

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

ytg_Japan_Candles ytg_Japan_Candles

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

Exp_VininI_Trend_LRMA Exp_VininI_Trend_LRMA

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