下载MetaTrader 5

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

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

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

2014.02.07 08:51
指标

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

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

显示:
371
等级:
投票: 16
\MQL5\Indicators\OnRingBuffer\\MQL5\Include\IncOnRingBuffer\

描述

COBVOnRingBuffer 类设计为使用环形缓冲区算法绘制平衡交易量 (On Balance Volume, OBV) .  

声明

class COBVOnRingBuffer : public CArrayRing

标题

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

COBVOnRingBuffer.mqh 类文件必须放置于 IncOnRingBuffer 文件夹下, 而该文件夹需要在 MQL5\Include\ 目录下创建. 在描述部分附加了使用本类的两个例子文件. 环形缓冲区的类文件也必须在此文件夹下.

类方法

//--- 初始化方法:
bool Init(                                        // 如果出错返回false, 如果成功返回true
   int                 period      = 0,           // OBV 周期数
   int                 size_buffer = 256,         // 环形缓冲区的大小
   bool                as_series   = false        // 如果是时间序列为true, 否则为false
   );

OBV 周期数的使用和Integer中类似: 如果数值为0 (默认) 指标的运行和终端中包含的一样 - 它将计算图表上所有的柱. 如果是任何其他的正值, 指的是用于计算图表每个柱的柱数(和移动平均原则一样). 

//--- 基于时间序列或者指标缓冲区计算的方法:          
int MainOnArray(                  // 返回处理过的元素数量  
   const int     rates_total,     // 数组的大小
   const int     prev_calculated, // 前一次调用处理过的元素数
   const double& price[],         // 价格
   const long&   volume[]);       // 交易量
   );
//--- 基于数组中的独立元素计算的方法           
double MainOnValue(              // 返回集合元素(柱)的 OBV 值
   const int    rates_total,     // 数组的大小
   const int    prev_calculated, // 数组中处理过的元素数量
   const int    begin,           // 数组中数据的起点
   const double price,           // 价格
   const long   volume,          // 交易量
   const int    index            // 元素 (柱) 索引 
   );
//--- 访问数据的方法:
int                 BarsRequired(); // 返回绘制指标所需的柱数
string              Name();         // 返回指标名称
int                 Period();       // 返回周期数
int                 Size();         // 返回环形缓冲区的大小

以通常数组的方式从环形缓冲区取得计算的指标值. 例子:

//--- 计算 OBV 指标方法类:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+
//| 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[])
  {
//--- 基于时间序列计算指标:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...

//--- 使用 "obv" 环形缓冲区的数据,
//    例如, 复制指标缓冲区的数据:
   for(int i=start;i<rates_total && !IsStopped();i++)
      OBV_Buffer[i] = obv[rates_total-1-i]; // indicator line

...

//--- 返回 prev_calculated 的值用于下一次调用:
   return(rates_total);
  }

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

例子

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


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



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

 

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

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

四色АО指标 四色АО指标

四色AO指标.

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

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

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

本类设计为使用环形缓冲区算法计算双指数移动平均技术指标(Double Exponential Moving Average, DEMA).

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

本类设计为使用环形缓冲区算法计算三重指数移动平均技术指标(Triple Exponential Moving Average, TEMA).