描述
CADXWOnRingBuffer类旨在使用环形缓冲区算法计算技术指标Wilder平均方向运动指标(ADX Wilder)。
声明
class CADXWOnRingBuffer标题
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>CADXWOnRingBuffer.mqh类文件应放置在MQL5\Include\IncOnRingBuffer文件夹中。附带的描述中提供了该文件夹中使用的两个示例文件。环形缓冲区的类文件和移动平均的类文件也必须放在此文件夹中。
类方法
//--- 初始化方法: bool Init( // 如果出错则返回false,成功则返回true int ma_period = 14, // 移动平均平滑的周期 ENUM_MA_METHOD ma_method = MODE_SMMA, // 移动平均平滑的方法 int size_buffer = 256, // 环形缓冲区的大小,存储的数据量 bool as_series = false // true表示时间序列,false表示普通的输入数据索引 );
//--- 基于时间序列或指标缓冲区的计算方法: int MainOnArray( // 返回处理的元素数量 const int rates_total, // 数组的大小 const int prev_calculated, // 上一次调用处理的元素 const double &high[] // 最高值数组 const double &low[] // 最低值数组 const double &close[] // 收盘价数组 );
//--- 基于数组单独系列元素的计算方法 double MainOnValue( // 返回特定元素的ADXW值 const int rates_total, // 数组的大小 const int prev_calculated, // 数组中已处理的元素 const int begin, // 数组显著数据的起始位置 const double high, // 最高值 const double low, // 最低值 const double close, // 收盘价 const int index // 元素索引 );
//--- 数据访问方法: int BarsRequired(); // 返回绘制指标所需的条数 string NameADXW(); // 返回指标名称 string NameNDI(); // 返回负方向运动指标线的名称 string NamePDI(); // 返回正方向指标线的名称 string MAMethod(); // 返回平滑方法的文本行 int MAPeriod(); // 返回平滑周期 int Size(); // 返回环形缓冲区的大小
要从环形缓冲区获取指标的计算数据,可以像从普通数组中一样访问。例如:
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh> CADXWOnRingBuffer adxw; ... //+------------------------------------------------------------------+ //| 自定义指标迭代函数 | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- 指标计算: adxw.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- 将“adxw”环形缓冲区中的数据复制到指标中: for(int i=start;i<rates_total;i++) { ADXW_Buffer[i] = adxw[rates_total-1-i]; // 平均方向运动指标Wilder PDI_Buffer[i] = adxw.pdi[rates_total-1-i]; // 正方向指标 NDI_Buffer[i] = adxw.ndi[rates_total-1-i]; // 负方向指标 } ... }
请注意,环形缓冲区的索引与时间序列中的索引相同。
示例
- Test_ADXW_OnArrayRB.mq5文件根据价格时间序列计算指标,展示了MainOnArray()方法的应用
- Test_ADXW_OnValueRB.mq5文件展示了MainOnValue()方法的使用。首先计算并绘制ADXW指标。然后基于该指标的环形缓冲区计算三条ADXW指标线。

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

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