量化软件下载: 赫兹量化开发多品种指标分析价格偏离

本文介绍了如何在MQL5环境下进行指标编程,包括创建项目、编写核心函数,如OnInit()和OnCalculate(),以及处理外部参数,如显示不同数据类型和双色模式。还详细解释了指标缓冲区的使用和价格偏离起始点的选择。
摘要由CSDN通过智能技术生成

指标开发

下一步进行指标编程。首先我们需要创建一个新项目。为此, 在 赫兹量化\MQL5\Indicators 目录中创建与我们的指标同名的文件夹, 并在 Include 文件夹中我们会放置包含文件。下一步, 在指标文件夹中创建主文件。可以通过手工创建带有 *.mq5 后缀的文本文件,或使用 MQL5 向导 的模板。加上程序核心函数 OnInit(), OnDeinit() 和 OnCalculate() , 我们还使用了 OnChartEvent() 以及 OnTimer()。

就像在之前的文章中, 加上当前品种,我们将显示外部参数中指定的五个品种。但此时, 替代某些公式的计算数值, 我们将在图表上输出原始价格数据。用户可在外部参数的下拉列表中自由选择呈现的数据类型: 折线, 柱线 或 蜡烛条。

如果我们打算就显示单色数据线, 那么指定缓存区数量等于指标属性中的品种数量就足够了。 (#property). 但既然此处有两种模式来绘制序列作为柱线或蜡烛条, 我们就需要更多的缓存区用于双色模式: 丝瓜缓存区来渲染每个序列,并用一个缓存区来为每一个图形序列元素设置颜色(依据条件)。

对于每个序列,它需要在程序属性块中指定颜色。为此,简单地将它们列出清单,并用逗号分隔。第一个颜色用于单色模式。在双色模式中, 它用于阳线。第二个颜色用于双色模式中的阴线。

所有这些参数的代码提供如下:

 
 

#property indicator_chart_window // Indicator is in the main window #property indicator_buffers 25 // Number of buffers for indicator calculation #property indicator_plots 5 // Number of plotting series //--- Indicator buffers colors #property indicator_color1 clrDodgerBlue,C'0,50,100' #property indicator_color2 clrLimeGreen,C'20,80,20' #property indicator_color3 clrGold,C'160,140,0' #property indicator_color4 clrAqua,C'0,140,140' #property indicator_color5 clrMagenta,C'130,0,130'

使用 #define 语句可以声明常量,并且使用 #include 命令行可以包含已经在上边描述的函数文件, 以及来自 标准库 的画布类:

 
 

//--- Constants #define RESET 0 // Returning the indicator recalculation command to the terminal #define SYMBOLS_COUNT 5 // Number of symbols //--- Include the class for working with the canvas #include <Canvas\Canvas.mqh> //--- Include the class for working with the canvas #include "Include/Checks.mqh" #include "Include/Chart.mqh" #include "Include/Objects.mqh"

加入 ENUM_DRAWTYPE 和 ENUM_START_POINT 枚举来创建用于外部参数的下拉列表,以便选择价格数据绘制类型,和价格偏离模式的起始点数:

 
 

//--- Drawing type of the price data enum ENUM_DRAWTYPE { LINE =0, // Line BARS =1, // Bars CANDLES=2 // Candlesticks }; //--- Mode of the price divergence starting point enum ENUM_START_POINT { VERTICAL_LINE=0, // Vertical line MONTH =1, // Month WEEK =2, // Week DAY =3, // Day HOUR =4 // Hour };

数据渲染类型已经在前面描述过, 现在让我们来说说价格偏离起始点数的含义。

总共此处有五种模式: 垂直线, 月线, 周线, 日线 和 小时线。对于 垂直线 模式, 当在图表中加载指标时会加入一条垂直线。您可以拖拽此线到指定柱线,此处所有品种的价格将会汇聚到一点。当前品种指定柱线的开盘价格将会作为这次汇聚的参考点。任何其它模式将告知程序,每次价格将在指定周期的开始汇聚。即,在每月的开始, 在每周的开始, 在每天的开始或在每小时的开始。

以下您可以发现指标的输入参数列表:

 
 

//--- External parameters input ENUM_DRAWTYPE DrawType =CANDLES; // Drawing type input ENUM_START_POINT StartPriceDivergence =VERTICAL_LINE; // Start of price divergence input bool TwoColor =false; // Two-color bars/candlesticks sinput string dlm01=""; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - input string Symbol02 ="GBPUSD"; // Symbol 2 input bool Inverse02 =false; // Inverse symbol 2 input string Symbol03 ="AUDUSD"; // Symbol 3 input bool Inverse03 =false; // Inverse symbol 3 input string Symbol04 ="NZDUSD"; // Symbol 4 input bool Inverse04 =false; // Inverse symbol 4 input string Symbol05 ="USDCAD"; // Symbol 5 input bool Inverse05 =false; // Inverse symbol 5 input string Symbol06 ="USDCHF"; // Symbol 6 input bool Inverse06 =false; // Inverse symbol 6

品种数量从 2 开始, 因为 1 是当前图表品种。

可以对每个包含的品种进行翻转。翻转意即品种数据将会被上下颠倒。这很有用,当分析品种列表中的货币对含有相同货币 (例如, 美元) 则它们就有了同样的基准。例如, 在 EURUSD 货币对中, 美元是基准货币, 在 USDCHF 货币对中也可以作为基准。如果图表中的当前品种是 EURUSD, 那么您翻转 USDCHF, 其呈现结果将更便于您的分析。

以下是全局变量和数组列表:

 
 

//--- Structure of the indicator buffers arrays struct buffers { double open[]; // Open prices buffer double high[]; // High prices buffer double low[]; // Low prices buffer double close[]; // Close prices buffer double icolor[]; // Buffer to determine the color of element }; buffers buffer_data[SYMBOLS_COUNT]; //--- Load the class CCanvas canvas; //--- Variables/arrays for copying data from OnCalculate() int OC_rates_total =0; // Size of input time series int OC_prev_calculated =0; // Bars processed at the previous call datetime OC_time[]; // Opening time double OC_open[]; // Open prices double OC_high[]; // High prices double OC_low[]; // Low prices double OC_close[]; // Close prices long OC_tick_volume[]; // Tick volumes long OC_volume[]; // Real volumes int OC_spread[]; // Spread //--- For the purpose of storing and checking the time of the first bar in the terminal datetime series_first_date[SYMBOLS_COUNT]; datetime series_first_date_last[SYMBOLS_COUNT]; //--- Time array of the bar from which we will start drawing datetime limit_time[SYMBOLS_COUNT]; //--- Symbol names array string symbol_names[SYMBOLS_COUNT]; //--- Array of symbol inverse flags bool inverse[SYMBOLS_COUNT]; //--- Colors of indicator lines color line_colors[SYMBOLS_COUNT]={clrDodgerBlue,clrLimeGreen,clrGold,clrAqua,clrMagenta}; //--- String representing the lack of the symbol string empty_symbol="EMPTY";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值