下载MetaTrader 5

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

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

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

指标

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

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

显示:
595
等级:
投票: 19
已发布:
2014.02.07 09:03
已更新:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\\MQL5\Indicators\OnRingBuffer\

描述

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);
  }

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

例子

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


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



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

 

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

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

ytg_MA_TF ytg_MA_TF

选择TF 的移动平均.

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

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

价格通道信号 价格通道信号

该指标是从 Igorad 的著名指标 PriceChannel_Signal_v1 转换而来, 具有重入功能。

趋势线交叉 趋势线交叉

该指标"收集"当前图表上的趋势的信息, 显示最后 (形成中) 的柱线的价格并给出信号, 或在价格与交易者选择的趋势线交叉时发出警报。