从 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中,函数 OnInitOnDeinit 在 init 和 deinit 程序中执行了相同的任务-他们是为本地代码设计的,一定在MQL5程序的初始化过程中执行,可以因此重命名函数,或者以他们本身的形式呈现,但是在类似位置这些函数可以添加调用。

示例:

void OnInit()
  {
//--- 调用函数去初始化
   init();
  }
void OnDeinit(const int reason)
  {
//--- 调用无法初始化函数
   deinit();
//---
  }

开始函数只在脚本中被OnStart代替,在EA交易和指标中应该分别重命名成OnTickOnCalculate。在MQL5程序操作过程中,这些代码可以执行,并保存3个函数中:

mql5程序

主函数

脚本

OnStart

指标

OnCalculate

EA交易

OnTick

如果指标或者代码不包括主函数,或者函数名称与要求的不相符,该函数的调用就不能执行。这表示了,如果脚本的资源代码不包括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 []这样预定义的时间序列。时间序列必要的深度能用相关访问时间序列函数来设定。

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中图解物件的数量显著增加。此外,图解物件现在可以及时置于时间表的图表中且可精确到秒-现在物件定位点不会四舍五入到当前价格图表开盘时间柱上。对于箭头物件,可以指定文本和标签绑定方式 ,并且对于标签,可以设置按钮,图表,位图标签和编辑定位定位物件的图表角