- 显示:
- 2924
- 等级:
- 已发布:
- 2014.02.07 07:57
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
CMACDOnRingBuffer 类设计为使用环形缓冲区算法计算技术指标MACD(Moving Average Convergence/Divergence, MACD).
声明
class CMACDOnRingBuffer
标题
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer.mqh 类文件应该被放置在 IncOnRingBuffer 文件夹下, 而该文件夹应当放置在 MQL5\Include\ 目录下. 在描述部分附加了使用本类的两个例子文件. 环形缓冲区的类文件和移动平均的类文件也必须放置在此文件夹下.
类方法
//--- 初始化方法: 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, // array[]数组的大小 const int prev_calculated, // 前面调用处理的元素数量 const double &array[] // 输入数值的数组 );
//--- 基于数组中独立序列的计算方法 double MainOnValue( // 返回集合元素的 MACD 值 const int rates_total, // 数组的大小 const int prev_calculated, // 数组中处理过的元素数量 const int begin, // 数据在数组中的起点 const double value, // 数组中的元素值 const int index // 元素索引 );
//--- 访问数据的方法: int BarsRequired(); // 返回绘制指标所需的柱数 string Name() // 返回指标的名称 string NameMain() // 返回指标主线的名称 string NameSignal() // 返回指标信号线的名称 string FastMethod() // 返回快速移动平均线的平滑方法文字描述 string SlowMethod() // 返回慢速移动平均线的平滑方法文字描述 string SignalMethod() // 返回信号线的平滑方法文字描述 int FastPeriod() // 返回快速线的平滑周期数 int SlowPeriod() // 返回慢速线的平滑周期数 int SignalPeriod() // 返回信号线的平滑周期数 int Size(); // 返回环形缓冲区的大小
以通常数组的方式从环形缓冲区取得计算的指标值. 例子:
//--- 含有MACD指标计算方法的类: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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个元素大小缓冲区运行的结果 在MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.
Test_MACD_OnValueRB.mq5 使用256个元素大小缓冲区运行的结果
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1361

本脚本计算市场观察中全部交易品种的枢轴点(Pivot Point)并在html文件中显示结果.

本类设计为使用环形缓冲区算法计算技术指标威尔德平均方向移动指数 (Average Directional Movement Index Wilder, ADX Wilder).

本类设计为使用环形缓冲区算法计算技术指标振荡移动平均 (Moving Average of Oscillator, OsMA).

MetaTrader 的动态支持/阻力指标