跳至内容

OnDeinit

OnDeinit

Deinit事件发生时在指标和EA中调用这个函数。它被用于去初始化运行中的MQL5程序。

void  OnDeinit(
   const int  reason         //去初始化原因代码
   );

参数

reason

[in] 去初始化原因代码。

返回值

无返回值

注意

在以下情况下,为EA和指标生成Deinit事件:

  • 由于mql5程序附加的交易品种或图表周期发生变化而重新初始化之前;
  • 由于输入变化而重新初始化之前;
  • 卸载mql5程序之前。

reason参数可能有以下值:

常量描述
REASON_PROGRAM0EA已停止调用ExpertRemove()函数的工作
REASON_REMOVE1程序从图表移除
REASON_RECOMPILE2程序重新编译
REASON_CHARTCHANGE3交易品种或图表周期被改变
REASON_CHARTCLOSE4图表已关闭
REASON_PARAMETERS5由用户更改的输入参数
REASON_ACCOUNT6由于账户设置的变化,另一个账户已被激活或已被重新连接到交易服务器
REASON_TEMPLATE7应用另一个图表模板
REASON_INITFAILED8OnInit()处理程序返回一个非零值
REASON_CLOSE9程序端已关闭

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;
  }

另见

OnInit事件处理函数程序运行客户端事件去初始化原因代码可视范围和变量的生命周期创建和删除对象