下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2014.02.07 08:22
指标

使用环形缓冲区绘制MFI指标的类 - MetaTrader 5脚本

| Chinese English Русский Español Deutsch 日本語 Português

显示:
451
等级:
投票: 14
\MQL5\Include\IncOnRingBuffer\\MQL5\Indicators\IncOnRingBuffer\

描述

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);
  }

请注意环形缓冲区的索引方式和时间序列相同.

例子

  1. Test_MFI_OnArrayRB.mq5 文件基于价格时间序列计算指标. 演示了 MainOnArray() 方法的应用
  2. Test_MFI_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用. 首先计算和绘制 MFI 指标. 然后基于此指标的环形缓冲区绘制另外一个MFI指标. 


Test_MFI_OnArrayRB.mq5 使用256个元素大小缓冲区的运行结果



Test_MFI_OnValueRB.mq5 使用256个元素大小缓冲区的运行结果

 

MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/1395

使用环形缓冲区绘制RSI指标的类 使用环形缓冲区绘制RSI指标的类

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

X-bars 分形 X-bars 分形

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

使用环形缓冲区绘制动量指标的类 使用环形缓冲区绘制动量指标的类

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

突破柱趋势 EA 突破柱趋势 EA

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