Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 3489
- Рейтинг:
- Опубликован:
- 2012.12.18 16:27
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс CRSIOnRingBuffer предназначен для расчета технического индикатора Индекс Относительной Силы (Relative Strength Index, RSI) с использованием алгоритма кольцевого буфера.
Декларация
class CRSIOnRingBuffer : public CArrayRing
Заголовок
#include <IncOnRingBuffer\CRSIOnRingBuffer.mqh>
Файл класса CRSIOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера и с классом Moving Average тоже должны быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int period = 14, // период RSI ENUM_MA_METHOD method = MODE_SMMA, // метод сглаживания int size_buffer = 256, // размер кольцевого буфера, количество хранимых данных bool as_series = false // true, если таймсерия, false - обычная индексация входных данных );
//--- метод расчета на основе таймсерии или индикаторного буфера: int MainOnArray( // возвращает количество обработанных элементов const int rates_total, // размер массива array[] const int prev_calculated, // обработано элементов на предыдущем вызове const double &array[] // массив входных значений );
//--- метод расчета на основе отдельных последовательных элементов массива double MainOnValue( // возвращает значение RSI для заданного элемента const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массива const double value, // значение элемента массива const int index // индекс элемента );
//--- методы доступа к дынным: int BarsRequired(); // Возвращает необходимое количество баров для построения индикатора string Name(); // Возвращает имя индикатора int Period(); // Возвращает период string Method(); // Возвращает метод в виде текстовой строки int Size(); // Возвращает размер кольцевого буфера
Получать рассчитанные данные индикатора из кольцевого буфера можно как из обычного массива. Например:
//--- класс с методами расчета индикатора RSI: #include <IncOnRingBuffer\CRSIOnRingBuffer.mqh> CRSIOnRingBuffer rsi; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- расчет индикатора на основе ценовой таймсерии: rsi.MainOnArray(rates_total,prev_calculated,price); ... //--- используем данные из кольцевого буфера "rsi", // например, скопируем данные в индикаторный буфер: for(int i=start;i<rates_total;i++) RSI_Buffer[i] = rsi[rates_total-1-i]; // линия индикатора //--- return value of prev_calculated for next call: return(rates_total); }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_RSI_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
- Файл Test_RSI_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор RSI. Затем на основе кольцевого буфера этого индикатора строится еще один RSI.
Результат работы Test_RSI_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_RSI_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов

Мувинг, представляющий из себя линейную комбинацию последовательных сглаживаний кривой EMA алгоритмом экспоненциального скользящего среднего (EMA).

Индикатор X-bars Fractals позволяет отдельно указывать кол-во баров слева и справа от фрактала. Хорошо подходит для определения как локальных, так и глобальных экстремумов.

Торговая система на основе изменения направления тренда, отображаемого индикатором EF_distance и силы тренда, определяемого индикатором Flat-Trend.

Вариация на тему нетривиальной, линейной комбинации из стохастических осцилляторов