使用环形缓冲区绘制随机振荡指标的类 - MetaTrader 5脚本
- 显示:
- 1502
- 等级:
- 已发布:
- 2014.02.07 08:09
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
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); }
请注意环形缓冲区的索引方式和时间序列相同.
例子
- Test_Stochastic_OnArrayRB.mq5 文件基于价格时间序列计算指标. 演示了 MainOnArray() 方法的应用
- Test_Stochastic_OnValueRB.mq5 file 演示了 MainOnValue() 方法的使用. 首先计算和绘制 随机振荡 指标. 然后基于环形缓冲区绘制另外两条随机振荡指标线.
Test_Stochastic_OnArrayRB.mq5 使用 256 个元素大小环形缓冲区的运行结果 在MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.
Test_Stochastic_OnValueRB.mq5 使用 256 个元素大小环形缓冲区的运行结果
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1372
Schnick [支持矢量机器学习工具测试期 - 演示]
本脚本用于演示矢量机器在解决分类类型难题中的强大作用. 本版本的代码专门用于和MQL5市场中的免费版支持矢量学习工具做演示.
Schnick [支持矢量机器学习工具测试器]本脚本用于演示矢量机器在解决分类类型难题中的强大作用.
使用环形缓冲区绘制ER的类
本类使用环形缓冲区算法绘制效率比率技术指标(Efficiency Ratio, ER).
使用环形缓冲区绘制AMA的类本类设计为使用环形缓冲区算法计算自适应移动平均技术指标 (Adaptive Moving Average, AMA).