Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Класс для построения Fractals с использованием кольцевого буфера - индикатор для MetaTrader 5
- Просмотров:
- 3503
- Рейтинг:
- Опубликован:
- 2012.12.28 08:15
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс CFractalsOnRingBuffer предназначен для расчета технического индикаторa Фракталы (Fractals) с использованием алгоритма кольцевого буфера.
Декларация
class CFractalsOnRingBuffer
Заголовок
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
Файл класса CFractalsOnRingBuffer.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. К описанию прикреплены два файла с примерами, которые используют класс из этой папки. Файл с классом кольцевого буфера тоже должен быть в этой папке.
Методы класса
//--- метод инициализации: bool Init( // возвращает false при ошибке, при успехе - true int bars_right = 2, // количество баров справа от экстремума int bars_left = 2, // количество баров слева от экстремума 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[], // массив минимумов );
//--- метод расчета фрактала вверх на основе отдельных последовательных элементов массива high[] double MainOnHigh( // возвращает значение фрактала вверх для index-bars_right элемента (бара) const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массивa const double high, // максимум текущего бара const int index // индекс текущего элемента (бара) );
//--- метод расчета фрактала вниз на основе отдельных последовательных элементов массива low[] double MainOnLow( // возвращает значение фрактала вниз для index-bars_right элемента (бара) const int rates_total, // размер массива const int prev_calculated, // обработано элементов массива const int begin, // откуда начинаются значимые данные массивa const double low, // минимум текущего бара, значение текущего элемента массива const int index // индекс текущего элемента (бара) );
//--- методы доступа к дынным: int BarsRequired(); // Возвращает необходимое количество баров для построения индикатора string Name(); // Возвращает имя индикатора string NameUpper() // Возвращает имя фракталов вверх string NameLower() // Возвращает имя фракталов вниз int BarsRight() // Возвращает количество баров справа от экстремума int BarsLeft() // Возвращает количество баров слева от экстремума int Size(); // Возвращает размер кольцевого буфера
Получать рассчитанные данные индикатора из кольцевых буферов можно как из обычного массива. Например:
//--- класс с методами расчета индикатора Fractals: #include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh> CFractalsOnRingBuffer fractals; ... //+------------------------------------------------------------------+ //| 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[]) { //--- расчет индикатора на основе таймсерий: fractals.MainOnArray(rates_total,prev_calculated,high,low); ... //--- используем данные из кольцевых буферов "fractals", // например,скопируем данные в индикаторный буфер: for(int i=start;i<rates_total-BarsRight && !IsStopped();i++) { UpperBuffer[i] = fractals.upper[rates_total-1-i]; // фракталы вверх LowerBuffer[i] = fractals.lower[rates_total-1-i]; // фракталы вниз } ... //--- return value of prev_calculated for next call: return(rates_total); }
Обратите внимание, что индексация в кольцевых буферах как в таймсерии.
Примеры
- Файл Test_Fractals_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
- Файл Test_Fractals_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор Fractals. Затем на основе кольцевого буфера этого индикатора строится еще один Fractals.
Результат работы Test_Fractals_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов При написании кода использовались наработки MetaQuotes Software Corp., Integer и GODZILLA
Результат работы Test_Fractals_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов
Индикатор, реализующий стратегию торгновли с использованием CCI
Класс для построения ТEMA с использованием кольцевого буфераКласс предназначен для расчета технического индикатора Тройное Экспоненциальное Скользящее Среднее (Triple Exponential Moving Average, TEMA) с использованием алгоритма кольцевого буфера.
Эксперт, передвигающий стоплосс открытой позиции по границе канала, построенного с помощью индикатора CandleStop
Exp_StepSto_v1Эксперт на основе сигналов стохастического осциллятора StepSto_v1