Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Класс для построения Fractals с использованием кольцевого буфера - индикатор для MetaTrader 5

Просмотров:
3467
Рейтинг:
(24)
Опубликован:
2012.12.28 08:15
Обновлен:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\OnRingBuffer\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс 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);
  }

Обратите внимание, что индексация в кольцевых буферах как в таймсерии.

Примеры

  1. Файл Test_Fractals_OnArrayRB.mq5 - рассчитывает индикатор на основе ценовой таймсерии. Демонстрируется применение метода MainOnArray()
  2. Файл Test_Fractals_OnValueRB.mq5 демонстрирует использование метода MainOnValue(). Сначала рассчитывается и строится индикатор Fractals. Затем на основе кольцевого буфера этого индикатора строится еще один Fractals. 


Результат работы Test_Fractals_OnArrayRB.mq5 с размером кольцевого буфера в 256 элементов



Результат работы Test_Fractals_OnValueRB.mq5 с размером кольцевого буфера в 256 элементов

 

При написании кода использовались наработки MetaQuotes Software Corp.Integer и GODZILLA

SuperWoodiesCCI SuperWoodiesCCI

Индикатор, реализующий стратегию торгновли с использованием CCI

Класс для построения ТEMA с использованием кольцевого буфера Класс для построения ТEMA с использованием кольцевого буфера

Класс предназначен для расчета технического индикатора Тройное Экспоненциальное Скользящее Среднее (Triple Exponential Moving Average, TEMA) с использованием алгоритма кольцевого буфера.

Exp_CandleStop_Trailing Exp_CandleStop_Trailing

Эксперт, передвигающий стоплосс открытой позиции по границе канала, построенного с помощью индикатора CandleStop

Exp_StepSto_v1 Exp_StepSto_v1

Эксперт на основе сигналов стохастического осциллятора StepSto_v1