Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2550
- Рейтинг:
- Опубликован:
- 2012.12.26 09:38
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс CDEMAOnRingBuffer предназначен для расчета технического индикаторa Двойное Экспоненциальное Скользящее Среднее (Double Exponential Moving Average, DEMA) с использованием алгоритма кольцевого буфера.
Декларация
class CDEMAOnRingBuffer : public CArrayRing
Заголовок
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>
Файл класса CDEMAOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файлы с классами кольцевого буфера и Moving Average тоже должны быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int period = 12, // период DEMA ENUM_MA_METHOD method = MODE_EMA, // метод сглаживания int size_buffer = 256, // размер кольцевого буфера bool as_series = false // true, если таймсерия, иначе - false );
//--- метод расчета на основе таймсерий или индикаторных буферов: int MainOnArray( // возвращает количество обработанных элементов const int rates_total, // размер массивов const int prev_calculated, // обработано элементов на предыдущем вызове const double& price[], // массив для расчета );
//--- метод расчета на основе отдельных последовательных элементов массива double MainOnValue( // возвращает значение DEMA для заданного элемента (бара) const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массивa const double value, // значение элемента (бара) const int index // индекс элемента (бара) );
//--- методы доступа к данным: int BarsRequired(); // Возвращает необходимое количество баров для построения индикатора string Name(); // Возвращает имя индикатора int Period(); // Возвращает период int Size(); // Возвращает размер кольцевого буфера double MA(int index); // Возвращает значение Moving Average, индексация как в таймсерии
Получать рассчитанные данные индикатора из кольцевого буфера можно как из обычного массива. Например:
//--- класс с методами расчета индикатора DEMA: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // размер массива price[] const int prev_calculated, // обработано баров на предыдущем вызове const int begin, // откуда начинаются значимые данные const double& price[]) // массив для расчета { //--- расчет индикатора на основе таймсерий: dema.MainOnArray(rates_total,prev_calculated,price); ... //--- используем данные из кольцевого буфера "dema", // например,скопируем данные в индикаторный буфер: for(int i=start;i<rates_total && !IsStopped();i++) DEMA_Buffer[i] = dema[rates_total-1-i]; // линия индикатора DEMA ... //--- return value of prev_calculated for next call: return(rates_total); }
При расчете DEMA также делается расчет Moving Average с аналогичными параметрами. Получить данные из кольцевого буфера MA можно при помощи метода MA(int index):
//--- используем данные из кольцевого буфера Moving Avarage, // например,скопируем данные в индикаторный буфер: for(int i=start;i<rates_total && !IsStopped();i++) MA_Buffer[i] = dema.MA(rates_total-1-i); // линия индикатора Moving Avarage
Обратите внимание, что индексация в кольцевых буферах как в таймсерии.
Примеры
- Файл Test_DEMA_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
- Файл Test_DEMA_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор DEMA. Затем на основе кольцевого буфера этого индикатора строится еще один DEMA.
Результат работы Test_DEMA_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_DEMA_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов

Индикатор Prev Day And Floating Pivot

Трендовый индикатор, рисующий границы канала

Торговая система Exp_RD-TrendTrigger, построеная на основе изменения направления тренда, отображаемого осциллятором RD-TrendTrigger.

Простой, трендовый индикатор NRTR типа