OnDeinit
OnDeinit
当Deinit事件发生时在指标和EA中调用这个函数。它被用于去初始化运行中的MQL5程序。
void OnDeinit(
const int reason //去初始化原因代码
);参数
- reason
[in] 去初始化原因代码。
返回值
无返回值
注意
在以下情况下,为EA和指标生成Deinit事件:
- 由于mql5程序附加的交易品种或图表周期发生变化而重新初始化之前;
- 由于输入变化而重新初始化之前;
- 卸载mql5程序之前。
reason参数可能有以下值:
| 常量 | 值 | 描述 |
|---|---|---|
| REASON_PROGRAM | 0 | EA已停止调用ExpertRemove()函数的工作 |
| REASON_REMOVE | 1 | 程序从图表移除 |
| REASON_RECOMPILE | 2 | 程序重新编译 |
| REASON_CHARTCHANGE | 3 | 交易品种或图表周期被改变 |
| REASON_CHARTCLOSE | 4 | 图表已关闭 |
| REASON_PARAMETERS | 5 | 由用户更改的输入参数 |
| REASON_ACCOUNT | 6 | 由于账户设置的变化,另一个账户已被激活或已被重新连接到交易服务器 |
| REASON_TEMPLATE | 7 | 应用另一个图表模板 |
| REASON_INITFAILED | 8 | OnInit()处理程序返回一个非零值 |
| REASON_CLOSE | 9 | 程序端已关闭 |
EA去初始化原因代码可通过UninitializeReason()函数接收或者从预定义_UninitReason变量接收。
EA的OnInit()和OnDeinit()示例函数
input int fake_parameter=3; // 无用的参数
//+------------------------------------------------------------------+
//| EA交易初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
//--- 获取程序被编译的构建号
Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- 在OnInit()中还可以获得重置原因代码
Print(__FUNCTION__," Deinitialization reason code can be received during the EA reset");
//--- 获得去初始化原因代码的第一个方式
Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- 获得去初始化原因代码的第二个方式
Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| EA交易去初始化函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- 获得去初始化原因代码的第一个方式
Print(__FUNCTION__," Deinitialization reason code = ",reason);
//--- 获得去初始化原因代码的第二个方式
Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- 获得去初始化原因代码的第三个方式
Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
}
//+------------------------------------------------------------------+
//| 返回去初始化原因代码的文本描述 |
//+------------------------------------------------------------------+
string getUninitReasonText(int reasonCode)
{
string text="";
//---
switch(reasonCode)
{
case REASON_ACCOUNT:
text="Account was changed";break;
case REASON_CHARTCHANGE:
text="Symbol or timeframe was changed";break;
case REASON_CHARTCLOSE:
text="Chart was closed";break;
case REASON_PARAMETERS:
text="Input-parameter was changed";break;
case REASON_RECOMPILE:
text="Program "+__FILE__+" was recompiled";break;
case REASON_REMOVE:
text="Program "+__FILE__+" was removed from chart";break;
case REASON_TEMPLATE:
text="New template was applied to chart";break;
default:text="Another reason";
}
//---
return text;
}