下载MetaTrader 5

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

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

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

2014.02.07 07:59
指标

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

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

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

描述

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

声明

class COsMAOnRingBuffer : public CArrayRing

标题

#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>

COsMAOnRingBuffer.mqh 类文件应该被放置在 IncOnRingBuffer 文件夹下, 而该文件夹需要创建在 MQL5\Include\ 目录下. 在描述部分附加了使用本类的两个例子文件. 环形缓冲区, MACD移动平均 类文件也应该被放置在此文件夹下.

类方法

//--- 初始化方法:
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(              // 返回集合元素 OsMA 数值   const int    rates_total,     // 数组的大小
   const int    prev_calculated, // 处理过数组中的元素数量
   const int    begin,           // 数组中的起点
   const double value,           // 数组中的元素
   const int    index            // 元素索引
   );
//--- 访问数据的方法:
int    BarsRequired();   // 返回绘制指标所需的柱数
string Name()            // 返回指标名称
string FastMethod()      // 返回快速线平滑方法的文字描述
string SlowMethod()      // 返回慢速线平滑方法的文字描述
string SignalMethod()    // 返回信号线平滑方法的文字描述
int    FastPeriod()      // 返回快速线平滑周期数
int    SlowPeriod()      // 返回慢速线平滑周期数
int    SignalPeriod()    // 返回信号线平滑周期数
int    Size();           // 返回环形缓冲区的大小

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

//--- 计算 OsMA 指标方法的类:
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- 基于价格时间序列计算指标:
   osma.MainOnArray(rates_total,prev_calculated,price);

...

//--- 使用来自 "osma" 环形缓冲区的数据,
//    复制数据到指标缓冲区:
   for(int i=start;i<rates_total;i++)
      OsMABuffer[i]=osma[rates_total-1-i];          // indicator histogram
//--- 返回 prev_calculated 的值以便下次调用:
   return(rates_total);
  }

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

例子

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


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



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

 

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

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

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

本类设计为使用环形缓冲区算法计算技术指标MACD(Moving Average Convergence/Divergence, MACD).

枢轴点至 Html 枢轴点至 Html

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

VIP_DSR VIP_DSR

MetaTrader 的动态支持/阻力指标

Schnick [支持矢量机器学习工具测试器] Schnick [支持矢量机器学习工具测试器]

本脚本用于演示矢量机器在解决分类类型难题中的强大作用.