OnDeinit()
函数在 MT4 平台中被用作 Deinit 事件的处理程序。当需要进行反初始化动作时,此函数将被调用。接下来,我们将详细解析这个函数,包括其结构、功能,并通过实例来进行说明。
函数结构
根据提供的文档,OnDeinit()
函数应声明为 void 类型,并接受一个 const int 类型的参数,该参数代表反初始化的原因。
void OnDeinit(const int reason);
如果声明了其他类型,虽然编译器会给出警告,但函数将不会被执行。
功能说明
当以下情况发生时,Deinit 事件将为 Expert Advisors (EA) 和指标生成:
- 由于更改了附加到 mql4 程序的符号或图表周期,导致需要重新初始化之前。
- 由于输入参数的更改,导致需要重新初始化之前。
- 卸载 mql4 程序之前。
简单来说,每当你更改图表设置或完全从图表移除 EA 或指标,OnDeinit()
将被调用。
实例
为了更加直观地理解 OnDeinit()
函数的用途,我们提供以下几个实例来进行说明:
1. 关闭文件
如果你在 EA 或指标的生命周期中打开了一个文件,你应该在反初始化时确保关闭它。
int handle;
void OnDeinit(const int reason)
{
if(handle != INVALID_HANDLE)
{
FileClose(handle);
Print("文件已成功关闭");
}
}
2. 清除绘图对象
如果您在图表上绘制了一些对象(如线、标签等),在 EA 或指标被移除之前,您可能希望清除它们。
void OnDeinit(const int reason)
{
ObjectsDeleteAll();
Print("所有图表对象已被删除");
}
3. 根据反初始化原因执行操作
了解 OnDeinit()
的调用原因可以帮助您执行特定的清理操作。
void OnDeinit(const int reason)
{
switch(reason)
{
case REASON_CHARTCHANGE:
Print("因更改图表或时间帧而反初始化");
break;
case REASON_PARAMETERS:
Print("因更改输入参数而反初始化");
break;
case REASON_REMOVE:
Print("EA 或指标已从图表中移除");
break;
}
}
总结,OnDeinit()
函数为 MT4 用户提供了一个方便的反初始化机制,确保在 EA 或指标的生命周期结束时可以正确并高效地进行资源清理和设置恢复。通过了解和正确使用此函数,您可以确保您的 EA 或指标在移除或参数更改时表现得更加稳定和可靠。