当Init事件发生时在指标和EA中调用这个函数。它被用于初始化运行中的MQL5程序。有两种函数类型。
返回结果的版本
int OnInit(void); |
返回值
int类型值,0意味着成功初始化。
建议使用返回执行结果的OnInit()调用,因为它不仅可以程序初始化,还可以在早期程序终止的情况下返回一个错误代码。
没有结果返回的版本只为与旧代码兼容而保留。不建议使用
void OnInit(void); |
注意
加载EA或指标之后会立即生成Init事件。不为脚本生成该事件。OnInit()函数被用来初始化MQL5程序。如果OnInit()有一个int类型的返回值,那么非零的返回代码意味着初始化失败,且生成REASON_INITFAILED去初始化原因代码的Deinit事件。
void类型的OnInit()函数始终表示初始化成功,且不建议使用。
为了优化EA 输入,建议使用来自ENUM_INIT_RETCODE枚举值作为返回代码。 这些值旨在建立优化过程管理,包括选择最合适的测试代理。在启动测试之前,在EA初始化过程中,可以使用TerminalInfoInteger()函数请求关于代理配置和资源(核心数量、空闲内存量等)的数据。根据所获得的数据,您既可以允许使用测试代理,也可以禁止它优化EA。
ID |
描述 |
INIT_SUCCEEDED |
初始化成功,EA测试可以继续。 这个代码意同零值――测试中的EA初始化成功。 |
INIT_FAILED |
初始化失败。由于不可避免的错误,因此继续测试没有意义。例如,不能创建EA操作所需的指标。 这个值返回意同返回非零的值――测试中的EA初始化失败。 |
INIT_PARAMETERS_INCORRECT |
旨在表示程序员一组不正确的输入参数。在通用的优化表格中,该返回代码的结果字符串以红色突出显示。 不执行这组EA输入的测试。代理已准备好接收新任务。 当收到该值时,策略测试不将此任务传递到另一个代理重复执行。 |
INIT_AGENT_NOT_SUITABLE |
在初始化过程中没有程序执行错误。然而,出于某些原因,代理不适合进行测试。例如,没有乳沟的RAM,没有OpenCL support等。 返回该代码之后,直至这个优化结束,代理才会再接收任务。 |
使用OnInit()在测试中返回INIT_FAILED/INIT_PARAMETERS_INCORRECT有一些再优化EA时需要考虑的特性:
EA的OnInit()样例函数
//--- 输入参数
|
另见