使用环形缓冲区绘制分形的类 - MetaTrader 5脚本
- 显示:
- 1542
- 等级:
- 已发布:
- 2014.02.07 09:03
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
描述
CFractalsOnRingBuffer 设计为使用环形缓冲区算法计算分形技术指标(Fractals) .
声明
class CFractalsOnRingBuffer
标题
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer.mqh 类文件必须放置在 IncOnRingBuffer 文件夹, 而该文件夹需要在 MQL5\Include\ 下创建. 在描述部分附加了使用本类的两个例子文件. 环形缓冲区的类文件也必须在此文件夹下.
类方法
//--- 初始化方法: bool Init( // 如果出错返回false, 成功返回true int bars_right = 2, // 距离极值右方的柱数 int bars_left = 2, // 距离极值左方的柱数 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[], // 最小值数组 );
//--- 基于 high[] 数组独立序列元素的分形计算方法 double MainOnHigh( // 返回 index-bars_right 个元素(柱)的分形值 const int rates_total, // 数组的大小 const int prev_calculated, // 数组中已处理的元素数 const int begin, // 数组中的数据起点 const double high, // 当前柱的最高价 const int index // 当前元素 (柱) 的索引 );
//--- 基于 low[] 数组的独立序列元素计算的向下分形方法 double MainOnLow( // 返回 index-bars_right 个元素(柱)的向下分形值 const int rates_total, // 数组的大小 const int prev_calculated, // 数组中已处理的元素数 const int begin, // 数组中数据的起点 const double low, // 当前柱最小值, 当前数组元素最大值 const int index // 当前元素(柱)索引 );
//--- 访问数据的方法: int BarsRequired(); // 返回绘制指标所需的柱数 string Name(); // 指标的名称 string NameUpper() // 返回向上分形的名称 string NameLower() // 返回向下分形的名称 int BarsRight() // 返回极值右方的柱数 int BarsLeft() // 返回极值左方的柱数 int Size(); // 返回环形缓冲区的大小
像从通常数组那样从环形缓冲区中取得计算的指标数据. 例子:
//--- 计算分形指标值的方法类: #include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh> CFractalsOnRingBuffer fractals; ... //+------------------------------------------------------------------+ //| 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[]) { //--- 基于价格时间序列计算指标值: fractals.MainOnArray(rates_total,prev_calculated,high,low); ... //--- 使用来自 "fractals" 环形缓冲区的数据, // 例如, 复制指标缓冲区的数据: for(int i=start;i<rates_total-BarsRight && !IsStopped();i++) { UpperBuffer[i] = fractals.upper[rates_total-1-i]; // 向上分形 LowerBuffer[i] = fractals.lower[rates_total-1-i]; // 向下分形 } ... //--- 返回 prev_calculated 的值以便下次调用: return(rates_total); }
请注意, 环形缓冲区的索引方式和时间序列相同.
例子
- Test_Fractals_OnArrayRB.mq5 文件基于价格时间序列计算指标值. 演示了 MainOnArray() 方法的应用.
- Test_Fractals_OnValueRB.mq5 文件演示了 MainOnValue() 方法的应用. 首先计算和绘制分形指标. 然后基于此指标的环形缓冲区绘制另外一条分形线.
Test_Fractals_OnArrayRB.mq5 使用256个元素大小缓冲区的运行结果 在MetaQuotes 软件公司.开发过程中, 使用了Integer 和 GODZILLA的部分代码.
Test_Fractals_OnValueRB.mq5 使用256个元素大小缓冲区的运行结果
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1422
ytg_MA_TF
选择TF 的移动平均.
使用环形缓冲区绘制 TEMA 的类本类设计为使用环形缓冲区算法计算三重指数移动平均技术指标(Triple Exponential Moving Average, TEMA).