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