创建环形缓冲区的类 - MetaTrader 5程序库
- 显示:
- 1485
- 等级:
- 已发布:
- 2014.02.07 07:08
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
环形缓冲区是储存数据的一种组织形式. 通常它表现为长度无限的数组, 进入的最新数据会替换掉最旧的数据. 这样, 就总可以访问一定数量的最新数据. 最常用于流数据的同步读写. 可以查看这里以取得更多详细讯息.
当开发EA交易和指标时, 经常不需要保存所有柱的计算数值. 只要保存部分最近的数据就足够了, 比如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 // 新的大小 );
注意:
- 当缓冲区大小减少的时候, 正常情况下, 最旧的元素将会丢失
- 实现的环形缓冲区索引与时间序列相同, 也就是说,和通常顺序相反
例子
以下是发布时使用环形缓冲区的三个例子:
- 用于绘制移动平均(MA)的类
- 用于绘制平均真实范围(ATR)的类
- 用于绘制平均方向移动指数(ADX)的类
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1340
GRNN 神经网络类
本类实现了通用回归网络(General Regression Neural Network - GRNN)
回归分析这个指标比较四种类型的回归(线性,两次方,对数和指数)并选则最能适合数据分析的那一个。
使用环形缓冲区绘制移动平均的类
本类使用环形缓冲区的算法计算移动平均(Moving Average).
使用环形缓冲区绘制ADX的类此类设计为使用环形缓冲区算法计算技术指标平均方向移动指数(Average Directional Movement Index, ADX).