描述
CMomentumOnRingBuffer 类专门用于通过环形缓冲区算法计算技术指标 动量 (Momentum)。
声明
class CMomentumOnRingBuffer : public CArrayRing
标题
#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>CMomentumOnRingBuffer.mqh 文件需要放在 MQL5\Include\IncOnRingBuffer 文件夹中。此外,描述中附带了两个示例文件。环形缓冲区类的文件也必须在此文件夹中。
类方法
//--- 初始化方法: bool Init( // 如果出错返回false,成功返回true int period = 14, // 动量周期 int size_buffer = 256, // 环形缓冲区大小 bool as_series = false // 如果是时间序列则为true,否则为false );
//--- 基于时间序列或指标缓冲区的计算方法: int MainOnArray( // 返回处理的元素数量 const int rates_total, // 数组大小 array[] const int prev_calculated, // 上次调用处理的元素数量 const double& array[], // 输入数据数组 );
//--- 基于数组中单独系列元素的计算方法: double MainOnValue( // 返回设定元素的动量值 const int rates_total, // 数组大小 const int prev_calculated, // 数组中已处理的元素 const int begin, // 数组中显著数据的起始位置 const long value, // 数组元素值 const int index // 元素索引 );
//--- 数据访问方法: int BarsRequired(); // 返回绘制指标所需的条形数量 string Name(); // 返回指标名称 int Period(); // 返回周期 int Size(); // 返回环形缓冲区大小
从环形缓冲区中获取计算出的指标数据与从普通数组中获取数据的方式相同。例如:
//--- 带有动量指标计算方法的类: #include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh> CMomentumOnRingBuffer momentum; ... //+------------------------------------------------------------------+ //| 自定义指标迭代函数 | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // 数组价格[]的大小 const int prev_calculated, // 上次调用处理的条形数 const int begin, // 显著数据的起始位置 const double& price[]) // 计算用数组 { //--- 基于时间序列的指标计算: momentum.MainOnArray(rates_total,prev_calculated,price); ... //--- 使用“动量”环形缓冲区的数据, // 例如,将数据复制到指标缓冲区: for(int i=start;i<rates_total && !IsStopped();i++) Momentum_Buffer[i] = momentum[rates_total-1-i]; // 指标线 ... //--- 返回下次调用的prev_calculated值: return(rates_total); }
请注意,环形缓冲区的索引与时间序列的索引相同。
示例
- Test_Momentum_OnArrayRB.mq5 文件基于价格时间序列计算指标,演示了 MainOnArray() 方法的应用。
- Test_Momentum_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用。首先计算并绘制动量指标,然后基于该指标的环形缓冲区绘制另一个动量指标。

Test_Momentum_OnArrayRB.mq5 运行结果,环形缓冲区大小为 256 个元素

Test_Momentum_OnValueRB.mq5 运行结果,环形缓冲区大小为 256 个元素
在编写代码时参考了MetaQuotes Software Corp.、Integer 和 GODZILLA 的开发成果。