首页 技术指标 帖子

使用环形缓冲区绘制自适应移动平均线的教程 - MetaTrader 5 指标

附件
1375.zip (8.46 KB, 下载 0次)

在这篇文章中,我们将探讨如何使用环形缓冲区算法来计算自适应移动平均线(AMA)指标,适用于MetaTrader 5交易平台。

概述

CAMAOnRingBuffer类专为计算技术指标自适应移动平均线(AMA)而设计,利用环形缓冲区算法进行计算。

类的声明

class CAMAOnRingBuffer : public CArrayRing

文件引用

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

请将CAMAOnRingBuffer.mqh文件放置在MQL5\Include\IncOnRingBuffer文件夹中。该文件夹内还需包含两个示例文件。环形缓冲区类和效率比类的文件也应放在该文件夹中。

类的方法

//--- 初始化方法:
bool Init(// 如果出错返回false,成功则返回true
   int period = 10, // AMA周期
   int fast_period = 2, // 快速EMA周期
   int slow_period = 30, // 慢速EMA周期
   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(// 返回指定元素的AMA值
   const int rates_total,
   const int prev_calculated,
   const int begin,
   const double value,
   const int index
);
//--- 数据访问方法:
int BarsRequired(); // 返回绘制指标所需的条数
string Name(); // 返回指标名称
string FastPeriod(); // 返回快速EMA平滑周期
int SlowPeriod(); // 返回慢速EMA平滑周期
int Period(); // 返回AMA周期
int Size(); // 返回环形缓冲区大小

从环形缓冲区获取指标计算数据的方式与普通数组相同。例如:

//--- 计算AMA指标的类:
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>
CAMAOnRingBuffer ama;
...
//+---------------------------------------------------------------+
//| 自定义指标迭代函数 |
//+---------------------------------------------------------------+
int OnCalculate(const int rates_total,
        const int prev_calculated,
        const int begin,
        const double &price[])
{
   //--- 基于价格时间序列计算指标:
   ama.MainOnArray(rates_total,prev_calculated,price);
   ...
   //--- 使用来自环形缓冲区的数据
   for(int i=start;i<rates_total;i++)
      AMA_Buffer[i] = ama[rates_total-1-i]; // 指标线
   //--- 返回prev_calculated以备下次调用:
   return(rates_total);
}

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

示例

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


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



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

 

在代码编写中使用了MetaQuotes Software Corp.IntegerGODZILLA的开发成果。

相关帖子

评论 (0)