跳至内容

Event Handling

事件处理

MQL5语言提供了对某些预定义事件的处理功能。处理这些事件的函数应在MQL5程序中定义:函数名称、返回类型、参数集(如有)及其类型必须严格符合事件处理函数的描述。

客户端终端事件处理器使用返回类型和参数类型来识别处理事件的函数。如果某个函数的参数或返回类型与以下描述不符,则无法使用该函数来处理事件。

函数动作
OnStart开始事件发生时,调用此函数以执行脚本中设置的动作
OnInit初始化事件发生时,在指标和EA中调用此函数以初始化已启动的MQL5程序
OnDeinit终止事件发生时,在指标和EA中调用此函数以终止已启动的MQL5程序的初始化
OnTick新 tick事件发生时,在EA中调用此函数以处理新的报价
OnCalculate计算事件发生时,在指标中调用此函数以处理价格数据的变化
OnTimer在终端生成的计时器周期性事件期间,在指标和EA中调用此函数
OnTrade在交易服务器上完成交易操作结束时,在EA中调用此函数以处理交易事件
OnTradeTransaction交易事务事件发生时,在EA中调用此函数以处理交易请求执行结果
OnBookEvent书籍事件事件发生时,在EA中调用此函数以处理市场深度的变化
OnChartEvent图表事件事件发生时,在指标和EA中调用此函数以处理用户或MQL5程序对图表的更改
OnTesterTester事件发生时,在EA中调用此函数以在历史数据上测试EA后执行必要操作
OnTesterInitTesterInit事件发生时,在EA中调用此函数以在策略测试器优化前执行必要操作
OnTesterDeinitTesterDeinit事件发生时,在EA中调用此函数以在策略测试器优化后处理
OnTesterPassTesterPass事件发生时,在策略测试器优化期间处理新数据帧的到达

客户端终端将传入的事件发送到相应的开放图表。此外,事件可以由图表(图表事件)或mql5程序(自定义事件)生成。通过设置CHART_EVENT_OBJECT_CREATE和CHART_EVENT_OBJECT_DELETE图表属性,可以启用/禁用图形对象创建/删除事件的生成。每个mql5应用程序和图表都有自己的事件队列,所有新到达的事件都放入其中。

程序仅从其运行的图表接收事件。所有事件按接收顺序依次处理。如果队列中已经包含NewTick事件或该事件正在处理中,则不会将新的NewTick事件添加到mql5应用程序队列中。同样,如果ChartEvent已经存在于mql5程序队列中或正在处理此类事件,则不会将新的此类事件放入队列中。计时器事件的处理方式相同——如果计时器事件已经存在于队列中或正在处理,则不会将新的计时器事件放入队列中。

事件队列的大小有限但足够大,因此正确开发的程序不太可能出现队列溢出。当队列溢出时,新事件将被丢弃而不被放入队列中。

强烈建议不要使用无限循环来处理事件。可能的异常是处理单个开始事件的脚本。

库不处理任何事件。

最后更新于