下载MetaTrader 5

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

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

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

2014.02.07 07:18
指标

使用环形缓冲区绘制移动平均的类 - MetaTrader 5脚本

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

显示:
367
等级:
投票: 19
\MQL5\Include\IncOnRingBuffer\\MQL5\Indicators\IncOnRingBuffer\

描述

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

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

例子

  1. 指标基于价格时间序列计算 Test_MA_OnArrayRB.mq5 文件. 演示了 MainOnArray() 方法的应用 
  2. Test_MA_OnValueRB.mq5 文件演示了 MainOnValue() 方法的使用. 先计算和绘制MA指标. 然后在指标环形缓冲区的基础上, 计算了一个额外的MA指标. 


Test_MA_OnArrayRB.mq5 使用 256 个元素的环形缓冲区的结果.



Test_MA_OnValueRB.mq5 使用256个元素大小的环形缓冲区的结果.

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

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

创建环形缓冲区的类 创建环形缓冲区的类

本类可以用于组织迷你时间序列, 指标的迷你缓冲区, 长度小的缓冲区以保存EA交易或者指标中中等长度的流数据.

GRNN 神经网络类 GRNN 神经网络类

本类实现了通用回归网络(General Regression Neural Network - GRNN)

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

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

使用环形缓冲区绘制ATR的类 使用环形缓冲区绘制ATR的类

本类设计为使用环形缓冲区算法计算平均真实范围指标 (Average True Range, ATR).