- 显示:
- 1657
- 等级:
- 已发布:
- 2014.02.07 08:22
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
CMFIOnRingBuffer 类设计为使用环形缓冲区算法计算资金流向指数技术指标 (Money Flow Index, MFI) .
声明
class CMFIOnRingBuffer : public CArrayRing
标题
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>
CMFIOnRingBuffer.mqh 文件必须放置在 IncOnRingBuffer 文件夹, 该文件夹需要在 MQL5\Include\.目录下建立在描述部分附加了使用本类的两个例子文件. 环形缓冲区的类文件和移动平均的类文件也必须放置在此文件夹下.
类方法
//--- 初始化方法: bool Init( // 如果出错返回false, // 如果成功返回true int period = 14, // MFI 周期数 ENUM_MA_METHOD method = MODE_SMA, // 平滑方法 ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // 用于计算的价格类型 ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // 用于计算的交易量 int size_buffer = 256, // 环形缓冲区大小 bool as_series = false // 如果是时间序列为true, 否则为 false );
//--- 基于时间序列或指标缓冲区计算: int MainOnArray( // 返回处理过元素的数量 const int rates_total, // 数组的大小 const int prev_calculated, // 前一次调用处理过的元素数 const double& open[], // 开盘价 const double& high[], // 最高价 const double& low[], // 最低价 const double& close[], // 收盘价 const long& tick_volume[], // 订单交易量 const long& volume[]); // 库存交易量 );
//--- 基于数组中独立价格序列进行计算的方法 double MainOnValue( // 返回集合元素(柱)的 MFI 值 const int rates_total, // 数组的大小 const int prev_calculated, // 处理过的数组元素数量 const int begin, // 数据起点 const double open, // 柱开盘价 const double high, // 柱最高价 const double low, // 柱最低价 const double close, // 柱收盘价 const long tick_volume, // 柱的订单交易量 const long volume, // 柱交易量 const int index // 元素 (柱) 索引 );
//--- 访问数据的方法: int BarsRequired(); // 返回绘制指标所需的柱数 string Name(); // 返回指标名称 int Period(); // 返回周期数 string Method(); // 返回方法的文本描述 ENUM_APPLIED_PRICE Price(); // 返回使用的价格类型 ENUM_APPLIED_VOLUME Volume(); // 返回使用交易量的类型 int Size(); // 返回环形缓冲区大小
以通常数组的方式从环形缓冲区取得计算的指标值. 例子:
//--- 计算 MFI 指标方法的类: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- 基于时间序列计算指标: mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume); ... //--- 使用 "mfi" 环形缓冲区的数据, // 例如复制指标缓冲区的数据: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[rates_total-1-i]; // 指标线 ... //--- 返回 prev_calculated 的值以便下次调用: return(rates_total); }
请注意环形缓冲区的索引方式和时间序列相同.
例子
- Test_MFI_OnArrayRB.mq5 文件基于价格时间序列计算指标. 演示了 MainOnArray() 方法的应用
- Test_MFI_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用. 首先计算和绘制 MFI 指标. 然后基于此指标的环形缓冲区绘制另外一个MFI指标.
Test_MFI_OnArrayRB.mq5 使用256个元素大小缓冲区的运行结果 在MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.
Test_MFI_OnValueRB.mq5 使用256个元素大小缓冲区的运行结果
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1395

本类设计为使用环形缓冲区算法计算相对强弱指数技术指标 (Relative Strength Index, RSI).

X-bars 分形指标用于设置分形左右的柱数. 它对局部或者全局的极值都很有帮助

本类设计为使用环形缓冲区算法计算动量技术指标(Momentum).

本EA交易基于突破柱趋势v2指标. 它依赖的进场设置是在趋势反转的时候, 在一些误差信号之后.