在交易中,技术指标的使用是我们决策的重要依据。今天,我想和大家分享一个非常实用的指标——MACD(移动平均收敛/发散指标),并教大家如何通过环形缓冲区来计算和绘制这个指标。
什么是CMACDOnRingBuffer类?
CMACDOnRingBuffer类专门用于利用环形缓冲区算法计算MACD指标。这个类的设计意图是为了提高计算效率,让你在使用MetaTrader 5时能够更加流畅地分析市场。
类的声明
class CMACDOnRingBuffer如何使用CMACDOnRingBuffer类
首先,你需要将CMACDOnRingBuffer.mqh文件放置到MQL5\Include\IncOnRingBuffer文件夹中。随附的示例文件也会帮助你更好地理解如何使用这个类。确保你同时将环形缓冲区类和移动平均类的文件也放在该文件夹中。
类方法简介
//--- 初始化方法: bool Init(// 如果出错返回false,成功返回true int fast_period = 12, // 快速移动平均的周期 int slow_period = 26, // 慢速移动平均的周期 int signal_period = 9, // 信号线的周期 ENUM_MA_METHOD fast_method = MODE_EMA, // 快速移动平均的平滑方法 ENUM_MA_METHOD slow_method = MODE_EMA, // 慢速移动平均的平滑方法 ENUM_MA_METHOD signal_method = MODE_SMA, // 信号线的平滑方法 int size_buffer = 256, // 环形缓冲区的大小,存储数据的数量 bool as_series = false // true表示时间序列,false表示常规索引输入数据 );
//--- 基于时间序列或指标缓冲区的计算方法: int MainOnArray(// 返回处理的元素数量 const int rates_total, const int prev_calculated, // 上次调用处理的元素 const double &array[] // 输入值的数组 );
如何获取指标数据
通过环形缓冲区获取计算好的指标数据和从普通数组中获取数据的方式是相似的。以下是一个简单的示例:
//--- 使用MACD指标计算的方法: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| 自定义指标迭代函数 | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- 基于价格时间序列的指标计算: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- 使用“macd”环形缓冲区中的数据, // 复制数据到指标缓冲区: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // 指标直方图 SignalBuffer[i] = macd.signal[rates_total-1-i]; // 指标信号线 } //--- 返回prev_calculated用于下次调用: return(rates_total); }
注意事项
请注意,环形缓冲区的索引与时间序列的索引方式是相同的。
示例
- Test_MACD_OnArrayRB.mq5文件基于价格时间序列计算指标,演示了MainOnArray()方法的应用。
- Test_MACD_OnValueRB.mq5文件演示了使用MainOnValue()方法。首先计算并绘制MACD指标,然后基于该指标的环形缓冲区再绘制一个MACD指标。

Test_MACD_OnArrayRB.mq5的结果,环形缓冲区大小为256元素

Test_MACD_OnValueRB.mq5的结果,环形缓冲区大小为256元素
感谢MetaQuotes Software Corp.的贡献,特别是Integer和GODZILLA的开发。
评论 0