- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
事件处理
MQL5语言提供对特定预定义事件的处理。处理这些事件的函数应该在MQL5程序中定义:函数名、返回类型、一组参数(如果有),并且它们的类型应该严格地符合事件处理函数的描述。
客户端事件处理程序使用返回和参数类型来识别处理事件的函数。如果某个函数有一些参数或者返回类型与下面的描述不符,那么这样的函数就不可以被用于处理事件。
函数 |
描述 |
---|---|
当Start事件发生时调用这个函数,来执行脚本中设定的操作 |
|
当Init事件发生时在指标和EA中调用这个函数,来初始化启动的MQL5程序 |
|
当Deinit事件发生时在指标和EA中调用这个函数,来去初始化启动的MQL5程序 |
|
当NewTick事件发生时在EA中调用这个函数,来处理一个新报价 |
|
当Calculate事件发生时在指标中调用这个函数,来处理价格数据的变化 |
|
当Timer周期性事件在固定时间间隔内由程序端生成期间,在指标和EA中调用这个函数 |
|
当Trade事件在交易服务器上交易操作结束时生成期间,在EA中调用这个函数 |
|
当TradeTransaction事件发生时在EA中调用这个函数,来处理一个交易请求执行结果 |
|
当BookEvent事件发生时在EA中调用这个函数,来处理市场深度中的变化 |
|
当ChartEvent事件发生时在指标和EA中调用这个函数,来处理由用户或者MQL5程序所做的图表更改 |
|
当Tester事件发生时在EA中调用这个函数,以便在对历史数据测试EA之后执行必要的操作 |
|
当TesterInit事件发生时在EA中调用这个函数,以便在策略测试优化之前执行必要的操作 |
|
在策略测试EA优化之后,当TesterDeinit事件发生时在EA中调用这个函数。 |
|
当TesterPas事件发生时在EA中调用这个函数,以便在策略测试中处理EA优化期间到达的新数据框架 |
客户端将传入事件发送到相应的打开图表中。此外,事件也可以通过图表(图表事件)或mql5程序(自定义事件)来生成。通过设置CHART_EVENT_OBJECT_CREATE和CHART_EVENT_OBJECT_DELETE图表属性可以启用/禁用生成图形对象创建/删除事件。每个mql5应用程序和图表都有其自己的事件队列,所有新到达的事件也都包括其中。
一个程序只从其所运行的图表中获取事件。所有事件都按照它们的接收顺序来处理。如果这个队列已经包括NewTick事件,或者这个事件正在处理阶段,那么新的NewTick事件就不能添加到mql5应用程序队列中。同样,如果ChartEvent已在mql5程序序列或者这种事件正被处理,那么这种类型的新事件都不可放在队列之中。Timer事件处理也以相同的方式进行――如果Timer事件已在队列中或者正被处理中,那么队列中则不设置新的timer事件
事件队列具有一定限制但充足的规模,所以对于一个正确的开发程序来说,不可能出现队列溢出的情况。当队列溢出时,新事件会被舍弃,而不会将其设置为队列。
强烈建议不要使用无限循环来处理事件。可能的例外就是处理单独的Start事件的脚本。
程序库不处理任何事件。