MT4智能交易编程教程- 从 MQL4 到 MQL5
MQL5是前任MQL4语言的发展,其中编辑进去许多指标,脚本和EA交易。尽管事实上,新的程序语言最大化的与前一代相匹配,但在这些语言之间,仍有区别,当转换程序时,这些区别应该标注出来。 对于了解MQL4的程序员来说,新的MQL5语言,该章节涵盖了促进代码改编进化的所有信息。 首先应该标明的是: ·新语言不包括函数start(), init() 和 deinit(); ·指标缓冲区数量不限制; ·在下载EA程序后(或者其他MQL5程序),dll立即被加载; ·检测缩写的逻辑条件; ·当数组超过限制时,结束当前操作(紧急的-错误输出); ·像C++一样运算符优先; ·该语言提供隐式类型(甚至从字符串到数字); ·局部变量不能自动初始化(除了字符串); ·普通本地数组自动删除。 特殊函数 init, start and deinit MQL4语言只包括3个预定函数可以操作指标,脚本或者EA交易(不包括files *.mqh和数据库文件)。在MQL5中没有那样的函数,但有与之相类似的函数,图表表明了近似函数。 MQL4 | MQL5 | init | OnInit | start | OnStart | deinit | OnDeinit |
在MQL4中,函数 OnInit 和 OnDeinit 在 init 和 deinit 程序中执行了相同的任务-他们是为本地代码设计的,一定在MQL5程序的初始化过程中执行,可以因此重命名函数,或者以他们本身的形式呈现,但是在类似位置这些函数可以添加调用。 示例: void OnInit()
{
//--- 调用函数去初始化
init();
}
void OnDeinit(const int reason)
{
//--- 调用无法初始化函数
deinit();
//---
} |
开始函数只在脚本中被OnStart代替,在EA交易和指标中应该分别重命名成OnTick和OnCalculate。在MQL5程序操作过程中,这些代码可以执行,并保存3个函数中: mql5程序 | 主函数 | 脚本 | OnStart | 指标 | OnCalculate | EA交易 | OnTick |
如果指标或者代码不包括主函数,或者函数名称与要求的不相符,该函数的调用就不能执行。这表示了,如果脚本的资源代码不包括OnStart,该代码会以一个EA交易编辑。 如果指标代码不包括OnCalculate函数,该指标的编辑不能完成。 预定义变量 在MQL5中有诸如Ask, Bid, Bars的预定义变量,变量点和数字的拼写有稍许不同: MQL4 | MQL5 | 数字 | _Digits | 点 | _Point | | _LastError | | _Period | | _Symbol | | _StopFlag | | _UninitReason |
访问时间序列 MQL5中没有像Open [], High [], Low [], Close [], Volume [] and Time []这样预定义的时间序列。时间序列必要的深度能用相关访问时间序列函数来设定。 EA交易 MQL5的EA交易不需要强制存在处理新订单号收据事件的函数-OnTick,如在MQL4中一样(当接收新订单时执行MQL4的启动函数),因为在MQL5中EA交易可以包含几种类型的预定义处理器函数。 ·OnTick – 新订单号收据; ·OnTimer –时间数据; ·OnTrade - 交易事件; ·OnChartEvent – 键盘鼠标输入事件,图解物件移动事件,完成文本编辑事件输入LabelEdit物件领域中的; ·OnBookEvent – 市场深度状态更改事件。 自定义指标 在MQL4中,指标缓冲区的数量是有限的,不能超过8。而在MQL5中则没有这个限制,但是要记得每个指标缓冲区需要在程序端分配部分内存,所以,这个新功能也不能滥用。 MQL4只提供了6种自定义指标绘图;而MQL5现在提供了18种绘画类型 。绘画类型的名称不变,但是指标的图解表示意义却显著变化。 指标缓冲区中索引趋势也并不相同。默认情况下,在MQL5中,所有指标缓冲区都有常用数组行为,例如0索引元素是历史记录中最古老的一个,随着指数增加,数据也从旧的换成新的。 受MQL4保护的工作自定义指标的唯一函数是SetIndexBuffer 。但是调用改变;现在应该指定存储在数组中的数据类型,连接指标缓冲区。 自定义指标属性也已更改并发展。添加了访问时间序列的新函数,所以全部算法需要重新审议。 图解物件 在MQL5中图解物件的数量显著增加。此外,图解物件现在可以及时置于时间表的图表中且可精确到秒-现在物件定位点不会四舍五入到当前价格图表开盘时间柱上。对于箭头物件,可以指定文本和标签绑定方式 ,并且对于标签,可以设置按钮,图表,位图标签和编辑定位定位物件的图表角 。
|