下载MetaTrader 5

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

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

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

2014.02.07 08:09
指标

使用环形缓冲区绘制随机振荡指标的类 - MetaTrader 5脚本

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

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

描述

CStochasticOnRingBuffer 类设计为使用环形缓冲区计算随机振荡技术指标 (Stochastic Oscillator). 

声明

class CStochasticOnRingBuffer

标题

#include <IncOnRingBuffer\CStochacticOnRingBuffer.mqh>

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

类方法

//--- 初始化方法:
bool Init(                                 // 如果出错返回false, 成功返回 true
   int            period_k    = 5,         // %K 周期数
   int            period_d    = 3,         // %D 周期数
   int            period_s    = 3,         // 慢速 %K 周期数
   ENUM_MA_METHOD method      = MODE_SMA,  //  %D 方法
   int            size_buffer = 256,       // 环形缓冲区大小, 保存数据数量
   bool           as_series   = false      // 如果是时间序列为true, 如果是通常输入数据索引则为false
   );   
//--- 基于时间序列或者指标缓冲区计算的方法:          
int MainOnArray(                  // 返回处理的元素数量  
   const int     rates_total,     // 数组大小
   const int     prev_calculated, // 前一次调用处理的元素数量
   const double &high[]           // 最大值数组
   const double &low[]            // 最小值数组
   const double &close[]          // 收盘价数组
   );
//--- 基于数组的独立序列元素计算的方法          
double MainOnValue(               // 返回集合中元素的 Stochastic 数值
   const int    rates_total,      // 元素数量
   const int    prev_calculated,  // 数组中已经处理的元素数量
   const int    begin,            // 数组中元素的起点
   const double high,             // 最大值 
   const double low,              // 最小值 
   const double close,            // 收盘价 
   const int    index             // 元素索引
   );
//--- 访问数据的方法:
int    BarsRequired();   // 返回绘制指标所需的柱数
string Name();           // 返回指标的名称
string NameSignal();     // 返回指标信号线的名称
string Method();         // 返回平滑方法的文本
int    PeriodK()         // 返回 %K 周期数
int    PeriodS()         // 返回慢速%K 周期数 
int    PeriodD()         // 返回 %D 周期数
int    Size();           // 返回环形缓冲区的大小

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

//--- 计算随机振荡指标的类:
#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>
CStochasticOnRingBuffer st;

...

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

...

//--- 使用来自环形缓冲区 "st" 的数据,
//    例如, 把数据复制到指标缓冲区:
   for(int i=start;i<rates_total && !IsStopped();i++)
     {
      MainBuffer[i]   = st[rates_total-1-i];        // 指标主线
      SignalBuffer[i] = st.signal[rates_total-1-i]; // 指标信号线
     }

...

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

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

例子

  1. Test_Stochastic_OnArrayRB.mq5 文件基于价格时间序列计算指标. 演示了 MainOnArray() 方法的应用
  2. Test_Stochastic_OnValueRB.mq5 file 演示了 MainOnValue() 方法的使用. 首先计算和绘制 随机振荡 指标. 然后基于环形缓冲区绘制另外两条随机振荡指标线. 


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



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

 

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

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

Schnick [支持矢量机器学习工具测试期 - 演示] Schnick [支持矢量机器学习工具测试期 - 演示]

本脚本用于演示矢量机器在解决分类类型难题中的强大作用. 本版本的代码专门用于和MQL5市场中的免费版支持矢量学习工具做演示.

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

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

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

本类使用环形缓冲区算法绘制效率比率技术指标(Efficiency Ratio, ER).

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

本类设计为使用环形缓冲区算法计算自适应移动平均技术指标 (Adaptive Moving Average, AMA).