下载MetaTrader 5

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

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

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

2014.02.07 07:08
程序库

创建环形缓冲区的类 - MetaTrader 5程序库

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

显示:
403
等级:
投票: 31
\MQL5\Include\IncOnRingBuffer\

描述

环形缓冲区是储存数据的一种组织形式. 通常它表现为长度无限的数组, 进入的最新数据会替换掉最旧的数据. 这样, 就总可以访问一定数量的最新数据. 最常用于流数据的同步读写. 可以查看这里以取得更多详细讯息.

当开发EA交易和指标时, 经常不需要保存所有柱的计算数值. 只要保存部分最近的数据就足够了, 比如100个柱. 环形缓冲区就适合做这个. 显著的优势:

  • 计算增加了
  • 内存更经济
  • 容易使用, 无需担心超出数组边界.
声明

сlass CArrayRing

标题

#include <IncOnRingBuffer\CArrayRing.mqh>

CArrayRing.mqh 类的文件需要被放置在IncOnRingBuffer文件夹下, 该文件夹需要在MQL5\Include\目录下创建. 以下是使用这个类的例子.

类方法 

//--- 初始化缓冲区方法:
bool Init(                  // 如果出错返回false, 成功返回 true
   int    size,             // 环形缓冲区大小
   double volue=EMPTY_VALUE // 缓冲区空白位置意义
   );
//--- 增加新元素到缓冲区的方法:
void Add(
   const double element     // 增加的元素值
   ); 
//--- 根据提供的索引覆盖元素值的方法:
bool Update(                // 如果出错返回false, 成功返回true
   const double element,    // 元素新值
   const int index=0        // 元素索引
   );  
//--- 根据提供的索引返回元素值的方法:
double At(                  // 返回元素值
   const int index          // 元素索引
   ) const;
//--- 返回缓冲区中最后一个写入元素的方法:
double Last() const;
//--- 在缓冲区中覆盖最后一个元素值的方法 :
void Last(
   const double element     // 元素新值
   );  
//--- 本方法返回环形缓冲区大小:
int Size();
//--- 本方法修改环形缓冲区大小:
bool Resize(
   const int size           // 新的大小
   );

注意:

  • 当缓冲区大小减少的时候, 正常情况下, 最旧的元素将会丢失
  • 实现的环形缓冲区索引与时间序列相同, 也就是说,和通常顺序相反 

例子

以下是发布时使用环形缓冲区的三个例子:

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

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

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

回归分析 回归分析

这个指标比较四种类型的回归(线性,两次方,对数和指数)并选则最能适合数据分析的那一个。

使用环形缓冲区绘制移动平均的类 使用环形缓冲区绘制移动平均的类

本类使用环形缓冲区的算法计算移动平均(Moving Average).

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

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