- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnInit
当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时需要考虑的特性:
- OnInit()返回INIT_PARAMETERS_INCORRECT的参数集被认为不适合进行测试,并且在遗传优化期间不用于获取下一个群集。在寻找最佳EA参数时,太多“废弃”参数集可能导致错误的结果。搜索EA假设优化准则函数平滑,在整个输入参数上没有间隙。
- 如果OnInit()返回INIT_FAILED,这意味着测试无法启动,EA从代理内存中卸载。再次加载EA,以使用一组新参数执行下一个传递。与调用TesterStop()相比,启动下一次优化传递需要更多的时间。
EA的OnInit()样例函数
//--- 输入参数
|
另见