Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Упрощенный класс кольцевого буфера CArrayRing256 - библиотека для MetaTrader 5
- Просмотров:
- 2300
- Рейтинг:
- Опубликован:
- 2012.12.17 11:21
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание
Класс 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(), т.к. размер буфера всегда постоянен.
Вторая (исправленная и дополненная) версия альтернативного индикатора для определения тренда на основе пробойных баров и расстояния от экстремумов. Добавлены уровни разворота и размеры предыдущих трендов.
Exp_VininI_Trend_LRMAТорговая система Exp_VininI_Trend_LRMA построена на основе изменения направления тренда, отображаемого индикатором VininI_Trend_LRMA.
Написал CSV файл для того, чтобы записать туда экономические новости, но столкнулся с проблемой, что Терминал при работе с CSV не различает строки, а точнее их номер. Потому решил поделиться своим решением данной проблемы
X-bars FractalsИндикатор X-bars Fractals позволяет отдельно указывать кол-во баров слева и справа от фрактала. Хорошо подходит для определения как локальных, так и глобальных экстремумов.