下载MetaTrader 5
MQL5参考MQL5 程序客户端事件 

客户端事件

初始化

在客户端下载程序后(EA交易或者自定义指标)就开始全局变量初始化过程,发送初始化事件,通过OnInit()事件处理器处理过程,当安全性和/或时间表改变时,该程序在MetaEditor编辑器中编译之后,事件生成,EA交易或者自定义指标设置窗口中输入参量改变。在账户改变之后,EA交易也可以初始化,初始化事件不只是为脚本创建的。

无法初始化

在全局变量初始化和程序(EA交易和自定义指标)加载之前,客户端向程序发送Deinit事件。当客户端关闭时,Deinit就会生成,当图表关闭时,安全性和/或时间表改变,成功的程序重编辑,当输入参量改变,账户改变。

无法初始化 可以从参量中获得,通过 OnDeinit() 函数传递,OnDeinit() 函数的运行仅限于2.5秒,如果在此期间,函数没完成,会强制终止,Deinit事件不只为脚本创建的。

启动

启动 事件在其装载之后对于脚本激活来说是特殊事件,该事件通过 OnStart 处理器进行处理,开始事件不发送给EA交易或者自定义服务器。

NewTick

如果有新的引用,NewTick事件会生成,通过EA交易的附加OnTick()过程。当先前引用的OnTick函数正在处理的时候,新的引用就会接收,新的引用会被EA交易忽视,因为类似事件不会列入队伍里。

当程序运行时,接收到的所有新的引用都会忽视,直到OnTick()完成。只有在接收新引用后该函数才会运行,无论自动交易是否允许NewTick事件都会产生("Allow/prohibit Auto trading"按钮),自动交易引用禁止,EA交易发送的交易请求是不允许的,而EA交易仍旧进行。

自动交易禁令通过按适当按钮会停止当前执行的OnTick()函数,当EA交易属性开始时。

计算

计算事件只在指标完成初始化事件并改变价格数据后开始生成,通过 OnCalculate 函数执行。

定时器

定时器 事件通过EA交易客户端定期执行,并通过EventSetTimer 函数被定时器激活。通常情况下,该函数通过OnInit调用。定时器事件过程通过OnTimer函数执行。在EA交易操作完成之后,有必要通过EventKillTimer函数删除定时器,通常叫做OnDeinit函数。

交易

当交易服务器完成一个交易操作,交易事件生成,交易事件通过 OnTrade() 函数处理,有如下操作步骤:

  • 发送、修改或者删除待办订单;
  • 因为金额不满或者延期而取消待办订单;
  • 激活待办订单;
  • 打开,增加或者关闭位置(或者部分位置);
  • 修改打开位置(改变站点-止损数值和/或目标数值)。

交易事务

当在交易账户上执行一些明确活动时,它的状态会发生变化。这种活动包括:

  • 使用 OrderSendOrderSendAsync 函数在客户端从任何MQL5应用发送交易请求及其进一步执行:
  • 通过程序端图形界面发送交易请求及其进一步执行;
  • 在服务器上激活挂单和止损订单;
  • 在交易服务器上执行操作。

这些操作的结果会执行以下交易事务:

  • 处理交易请求;
  • 改变持仓订单;
  • 改变订单历史记录;
  • 改变交易历史记录;
  • 改变持仓。

例如,当发送市场买入订单时,它会被处理,为账户创建相应的买入订单,然后执行订单并从持仓列表中移除,添加到历史订单,而相应的交易也会添加到历史记录并创建新的持仓。所有这些操作都是交易操作。在程序端到达这种事务就是交易事务事件。该事件通过 OnTradeTransaction 函数处理。

测试

测试事件在EA交易测试历史数据完毕后产生,该事件通过 OnTester() 函数处理。

TesterInit

TesterInit 事件在初次优化通过之前,随着优化的启动,在策略测试中生成。TesterInit事件通过OnTesterInit()函数处理。

TesterPass

TesterPass 事件在收到新数据帧时生成。TesterPass事件通过OnTesterPass()函数处理。

TesterDeinit

TesterDeinit 事件在EA交易优化结束后,在策略测试中生成。TesterDeinit事件通过OnTesterDeinit()函数处理。

ChartEvent

当用户使用图表时,客户端产生事件,即ChartEvent

  • 当图表窗口聚集时,按关键字按钮;
  • 创建图解对象
  • 删除图解对象
  • 鼠标点击图表的图解对象;
  • 使用鼠标移动图解对象;
  • 在标签编辑中进行文本末尾编辑;

自定义事件ChartEvent,可以通过使用EventChartCustom函数以任何MQL5程序发送到EA交易中,该事件通过函数 OnChartEvent 处理。

BookEvent

BookEvent 事件在市场深度改变后通过客户端产生,通过 OnBookEvent函数执行,开始BookEvent程序特定交易对象,有必要通过 MarketBookAdd 函数为该事件订阅交易对象。

为从BookEvent中取消特定的交易品种,调用 MarketBookRelease 函数是有必要的。BookEvent事件是广播类型事件-它表示足以为一个事件订阅一个EA交易,而其他所有EA交易都有OnBookEvent事件,都会接收它。有必要分析交易品种的名称,以一个参量传递处理器。

另见

事件处理程序程序运行