Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
![Индикаторы](https://c.mql5.com/i/code/indicator.png)
Класс для построения Stochastic с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 3121
- Рейтинг:
- Опубликован:
- 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); }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_Stochastic_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовых таймсерий. Демонстрируется применение метода MainOnArray()
- Файл Test_Stochastic_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор Stochastic Oscilator. Затем на основе кольцевого буфера этого индикатора строится еще две линии Stochastic Oscilator.
Результат работы Test_Stochastic_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_Stochastic_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
![Класс для построения OsCD с использованием кольцевого буфера](https://c.mql5.com/i/code/indicator.png)
Класс предназначен для расчета технического индикатора Скользящая Средняя Осциллятора (Moving Average of Oscillator, OsMA) с использованием алгоритма кольцевого буфера.
![Exp_VininI_Trend](https://c.mql5.com/i/code/expert.png)
Торговая система Exp_VininI_Trend построена на основе изменения направления тренда, отображаемого индикатором VininI_Trend.
![ytg_Japan_Candles](https://c.mql5.com/i/code/indicator.png)
Индикатор свечных комбинаций (Японские свечи).
![Exp_VininI_Trend_LRMA](https://c.mql5.com/i/code/expert.png)
Торговая система Exp_VininI_Trend_LRMA построена на основе изменения направления тренда, отображаемого индикатором VininI_Trend_LRMA.