下载MetaTrader 5

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

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

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

2014.02.07 07:57
指标

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

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

显示:
563
等级:
投票: 15
\MQL5\Include\IncOnRingBuffer\\MQL5\Indicators\IncOnRingBuffer\

描述

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

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

例子

  1. Test_MACD_OnArrayRB.mq5 文件基于价格时间序列计算指标. 演示了 MainOnArray() 方法的应用
  2. Test_MACD_OnValueRB.mq5 演示了 MainOnValue() 方法的使用. 首先计算和绘制 MACD 指标. 之后基于此指标的环形缓冲区, 绘制额外的 MACD 指标. 


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



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

 

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

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

枢轴点至 Html 枢轴点至 Html

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

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

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

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

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

VIP_DSR VIP_DSR

MetaTrader 的动态支持/阻力指标