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

Упрощенный класс кольцевого буфера CArrayRing256 - библиотека для MetaTrader 5

Просмотров:
2265
Рейтинг:
(30)
Опубликован:
2012.12.17 11:21
\MQL5\Include\IncOnRingBuffer\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Описание

Класс CArrayRing256 является упрощенной версией кольцевого буфера CArrayRing, но быстрее и позволяет самостоятельно организовывать внутри советника или индикатора минитаймсерии, индикаторные минибуфера, короткие буфера для хранения промежуточных потоковых данных. 

Упрощение основано на свойстве uchar-переменной, которая используется в качестве индекса массива. Например, в коде

double array[UCHAR_MAX+1];  // кольцевой буфер данных
uchar  index=0;             // индекс элемента буфера

while(!IsStopped())
  {
   array[++index];          // переходим к следующему элементу буфера
   ...
  }

индекс массива всегда принимает значение от 0 до 255 и никогда не выйдет за пределы размерности массива. Это позволило убрать из методов класса все проверки, связанные с возможным выходом индекса за пределы массива, упростив сами методы и увеличив скорость исполнения. Но размер буфера всегда постоянен и имеет размер в 256 элементов. Для многих задач это приемлемая альтернатива универсальному классу CArrayRing в обмен на увеличение скорости работы.

Декларация

сlass CArrayRing256

Заголовок

#include <IncOnRingBuffer\CArrayRing256.mqh>

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

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

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

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

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

Примеры

Использование данного класса аналогично CArrayRing . Есть пара отличий:

  • метод Init() используется только для инициализации буфера определенным значением;
  • отсутствует метод Resize(), т.к. размер буфера всегда постоянен.

Breakout Bars Trend v2 Breakout Bars Trend v2

Вторая (исправленная и дополненная) версия альтернативного индикатора для определения тренда на основе пробойных баров и расстояния от экстремумов. Добавлены уровни разворота и размеры предыдущих трендов.

Exp_VininI_Trend_LRMA Exp_VininI_Trend_LRMA

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

Пример работы с CSV файлом, как с таблицей Пример работы с CSV файлом, как с таблицей

Написал CSV файл для того, чтобы записать туда экономические новости, но столкнулся с проблемой, что Терминал при работе с CSV не различает строки, а точнее их номер. Потому решил поделиться своим решением данной проблемы

X-bars Fractals X-bars Fractals

Индикатор X-bars Fractals позволяет отдельно указывать кол-во баров слева и справа от фрактала. Хорошо подходит для определения как локальных, так и глобальных экстремумов.