首页 技术指标 帖子

使用环形缓冲区计算动量指标的MQL5类

附件
1396.zip (6.02 KB, 下载 0次)

描述

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);   }

请注意,环形缓冲区的索引与时间序列的索引相同。

示例

  1. Test_Momentum_OnArrayRB.mq5 文件基于价格时间序列计算指标,演示了 MainOnArray() 方法的应用。
  2. Test_Momentum_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用。首先计算并绘制动量指标,然后基于该指标的环形缓冲区绘制另一个动量指标。


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



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

 

在编写代码时参考了MetaQuotes Software Corp.IntegerGODZILLA 的开发成果。

相关帖子

评论 (0)