使用环形缓冲区绘制移动平均的类 - MetaTrader 5脚本
- 显示:
- 1447
- 等级:
- 已发布:
- 2014.02.07 07:18
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
CMAOnRingBuffer 类设计为使用环形缓冲区计算移动平均(Moving Average).
声明
class CMAOnRingBuffer :public CArrayRing
标题
#include <IncOnRingBuffer\CMAOnRingBuffer.mqh>
CMAOnRingBuffer.mqh 类的文件应该被放置在IncOnRingBuffer文件夹下, 而此文件夹需要在MQL5\Include\目录下创建. 在描述部分附加了使用本类的两个例子文件. 环形缓冲区的类文件也必须放在此文件夹下.
类方法
//--- 初始化方法: bool Init( // 如果出错返回false,成功返回true int ma_period = 14, // 移动平均平滑周期 ENUM_MA_METHOD ma_method = MODE_SMA, // 移动平均平滑方法 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 double value, // 数组元素值 const int index // 数组元素索引 );
//--- 访问数据的方法: int BarsRequired(); // 返回绘制指标需要的柱数 string Name(); // 返回指标名称 string MAMethod(); // 返回指标平滑方法的文本名称 int MAPeriod(); // 返回平滑计算周期数
以通常数组的方式从环形缓冲区取得计算的指标值. 例子:
#include <IncOnRingBuffer\CMAOnRingBuffer.mqh> CMAOnRingBuffer ma; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- 计算指标: ma.MainOnArray(rates_total,prev_calculated,price); ... //--- 从 "ma" 环形数组复制数据到指标中: for(int i=start;i<rates_total;i++) { MA_Buffer[i]=ma[rates_total-1-i]; } return(rates_total); }
请注意, 环形缓冲区的索引和时间序列相同.
例子
- 指标基于价格时间序列计算 Test_MA_OnArrayRB.mq5 文件. 演示了 MainOnArray() 方法的应用
- Test_MA_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用. 先计算和绘制MA指标. 然后在指标环形缓冲区的基础上, 计算了一个额外的MA指标.
Test_MA_OnArrayRB.mq5 使用 256 个元素的环形缓冲区的结果. 在MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.
Test_MA_OnValueRB.mq5 使用256个元素大小的环形缓冲区的结果.
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1342
创建环形缓冲区的类
本类可以用于组织迷你时间序列, 指标的迷你缓冲区, 长度小的缓冲区以保存EA交易或者指标中中等长度的流数据.
GRNN 神经网络类本类实现了通用回归网络(General Regression Neural Network - GRNN)
使用环形缓冲区绘制ADX的类
此类设计为使用环形缓冲区算法计算技术指标平均方向移动指数(Average Directional Movement Index, ADX).
使用环形缓冲区绘制ATR的类本类设计为使用环形缓冲区算法计算平均真实范围指标 (Average True Range, ATR).