Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Класс для построения ADX Wilder с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 2968
- Рейтинг:
- Опубликован:
- 2012.12.12 09:14
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс CADXWOnRingBuffer предназначен для расчета технического индикатора Индекс Среднего Направления Движения Уайлдера (Average Directional Movement Index Wilder, ADX Wilder) с использованием алгоритма кольцевого буфера.
Декларация
class CADXWOnRingBuffer
Заголовок
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>
Файл класса CADXWOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера и с классом Moving Average тоже должны быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int ma_period = 14, // период сглаживания скользящей средней ENUM_MA_METHOD ma_method = MODE_SMMA, // метод сглаживания скользящей средней 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( // возвращает значение ADXW для заданного элемента 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 NameADXW(); // Возвращает имя индикатора string NameNDI(); // Возвращает имя линии индикатора негативного направления движения string NamePDI(); // Возвращает имя линии индикатора позитивного направления движения string MAMethod(); // Возвращает метод сглаживания в виде текстовой строки int MAPeriod(); // Возвращает период сглаживания int Size(); // Возвращает размер кольцевого буфера
Получать рассчитанные данные индикатора из кольцевого буфера можно как из обычного массива. Например:
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh> CADXWOnRingBuffer adxw; ... //+------------------------------------------------------------------+ //| 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[]) { //--- расчет индикатора: adxw.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- скопируем данные из кольцевых буферов "adxw" в индикаторные: for(int i=start;i<rates_total;i++) { ADXW_Buffer[i] = adxw[rates_total-1-i]; // average directional movement index Wilder PDI_Buffer[i] = adxw.pdi[rates_total-1-i]; // positive directional index NDI_Buffer[i] = adxw.ndi[rates_total-1-i]; // negative directional index } ... }
Обратите внимание, что индексация в кольцевом буфере как в таймсерии.
Примеры
- Файл Test_ADXW_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовых таймсерий. Демонстрируется применение метода MainOnArray()
- Файл Test_ADXW_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор ADXW. Затем на основе кольцевого буфера этого индикатора строится еще три линии ADXW.
Результат работы Test_ADXW_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_ADXW_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
Трендовый индикатор, определяющий свои значения на основании сигналов с совокупности мувингов, периоды которых меняются в арифметической прогрессии.
VininI_Trend_LRMAТрендовый индикатор, определяющий свои значения на основании сигналов с мувинга LRMA и совокупности его сигнальных линий, периоды которых меняются в арифметической прогрессии.
Пробойная торговая система с мувингом CorrectedAverage.
VIP_DSRИндикатор Dynamic Support/Resistance для MetaTrader