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

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

Просмотров:
4258
Рейтинг:
(41)
Опубликован:
2012.12.10 09:16
\MQL5\Include\IncOnRingBuffer\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Кольцевой буфер - это одна из форм организации хранения данных. Обычно представляет из себя массив конечной длинны при записи в который при переполнении самые старые элементы заменяются самыми новыми данными. Таким образом всегда есть доступ к определенному количеству последних данных. Используется чаще всего для асинхронного чтения/записи потоковых данных. Подробнее здесь.

При написании экспертов и индикаторов часто не требуется хранить рассчитанные значения для всех баров. Достаточно иметь под рукой только последние данные для, например, 100 баров. Для этого как раз хорошо подходит кольцевой буфер. Очевидные преимущества:

  • ускорение расчетов
  • экономия памяти
  • простота использования, не нужно беспокоится о выходе за пределы массива.
Декларация

сlass CArrayRing

Заголовок

#include <IncOnRingBuffer\CArrayRing.mqh>

Файл класса CArrayRing.mqh нужно поместить в папку IncOnRingBuffer, которую необходимо создать в MQL5\Include\. Ниже есть ссылки на примеры, которые используют этот класс.

Методы класса 

//--- метод инициализации буфера:
bool Init(                  // при ошибке возвращает false, при успешном выполнении true
   int    size,             // размер кольцевого буфера
   double volue=EMPTY_VALUE // значение для заполнения пустых ячеек буфера
   );
//--- метод добавления нового элемента в буфер:
void Add(
   const double element     // значение добавляемого элемента
   ); 
//--- метод перезаписывает значение элемента с указанным индексом:
bool Update(                // при ошибке возвращает false, при успехе - true
   const double element,    // новое значение элемента
   const int index=0        // индекс элемента
   );  
//--- метод возвращает значение элемента с указанным индексом:
double At(                  // возвращает значение элемента
   const int index          // индекс элемента
   ) const;
//--- метод возвращает значение последнего записанного в буфер элемента:
double Last() const;
//--- метод перезаписывает значение последнего элемента в буфере:
void Last(
   const double element     // новое значение элемента
   );  
//--- метод возвращает размер кольцевого буфера:
int Size();
//--- метод изменяет размер кольцевого буфера:
bool Resize(
   const int size           // новый размер
   );

Обратите внимание:

  • при уменьшении размера буфера теряются не последние элементы, как обычно, а самые старые
  • в данной реализации кольцевого буфера индексация принята как в таймсерии, т.е. обратная обычной 

Примеры

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

 

Exp_ColorLeManTrend Exp_ColorLeManTrend

Торговая система Exp_ColorLeManTrend построена на основе изменения направления тренда, отображаемого индикатором ColorLeManTrend

Disparity Index Disparity Index

Disparity Index (индекс разницы) показывает разницу между ценой закрытия и выбранным скользящим средним в процентах. Рекомендуется использовать в сочетании со свечными моделями.

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

Класс предназначен для расчета средних (Moving Average) с использованием алгоритма кольцевого буфера.

Combinatorics Combinatorics

Начальная библиотека по функциям комбинаторики.