首页 技术指标 帖子

使用环形缓冲区绘制效率比率(ER)的类 - MetaTrader 5 指标详解

附件
1374.zip (6.13 KB, 下载 0次)

描述

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

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

示例

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


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



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

 

在编写代码时使用了 MetaQuotes Software Corp.Integer GODZILLA 的开发成果。

相关帖子

评论 (0)