描述
CEROnRingBuffer 类旨在计算技术指标效率比率(ER),该指标用于自适应移动平均线(Adaptive Moving Average, AMA),采用环形缓冲区算法。
声明
class CEROnRingBuffer : public CArrayRing
标题
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>CEROnRingBuffer.mqh 文件必须放置在 MQL5\Include\IncOnRingBuffer 文件夹中。该文件夹中附带了两个使用该类的示例文件。环形缓冲区的类文件也必须在此文件夹中。
类方法
//--- 初始化方法:bool Init( // 如果出错返回 false,成功返回 true int period = 34, // 计算 ER 的周期 int size_buffer = 256, // 环形缓冲区的大小,存储数据的数量 bool as_series = false // 如果是时间序列为 true,普通索引为 false );
//--- 基于时间序列或指标缓冲区的计算方法:int MainOnArray( // 返回处理的元素数量 const int rates_total, // 数组大小 const int prev_calculated, // 上次调用时处理的元素 const double &array[] // 输入值的数组 );
//--- 基于数组单独系列元素的计算方法double MainOnValue( // 返回设置元素的 ER 值 const int rates_total, // 数组大小 const int prev_calculated, // 数组中已处理的元素 const int begin, // 数组中重要数据的起始位置 const double value, // 数组的元素值 const int index // 元素索引 );
//--- 数据访问的方法:int BarsRequired(); // 返回绘制指标所需的条数 string Name() // 返回指标名称 int Period() // 返回 ER 计算周期 int Size(); // 返回环形缓冲区的大小
可以像访问普通数组一样,从环形缓冲区获取指标计算的数据。例如:
//--- 计算 ER 指标的方法类:#include <IncOnRingBuffer\CEROnRingBuffer.mqh>CEROnRingBuffer er;
...//+------------------------------------------------------------------+//| 自定义指标迭代函数 |//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {//--- 基于价格时间序列的指标计算: er.MainOnArray(rates_total,prev_calculated,price);//--- 使用来自环形缓冲区 "er" 的数据,// 例如,将数据复制到指标缓冲区: for(int i=start;i<rates_total;i++) { ER_Buffer[i] = er[rates_total-1-i]; // 指标线 }//--- 返回上次调用的 prev_calculated 值: return(rates_total); }
请注意,环形缓冲区的索引与时间序列中的索引相同。
示例
- Test_ER_OnArrayRB.mq5 文件基于价格时间序列计算指标,演示了 MainOnArray() 方法的应用。
- Test_ER_OnValueRB.mq5 演示了使用 MainOnValue() 方法,首先计算并绘制 ER 指标,然后基于该指标的环形缓冲区绘制另一个 ER。

Test_ER_OnArrayRB.mq5 的工作结果,环形缓冲区大小为 256 个元素

Test_ER_OnValueRB.mq5 的工作结果,环形缓冲区大小为 256 个元素
在编写代码时使用了 MetaQuotes Software Corp.、Integer 和 GODZILLA 的开发成果。