下载MetaTrader 5

不能初始化原因代码

使用 UninitializeReason() 函数返回初始化原因代码,可能值如下:

常量

描述

REASON_PROGRAM

0

通过调用 ExpertRemove()函数EA交易终止操作

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

程序端已关闭

无法初始化原因代码通过预定函数 OnDeinit(整数常量原因)传递参数。

示例:

//+------------------------------------------------------------------+
//| 获得文本描述                                                       |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//| 专家无法初始化函数                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 获得无法初始化原因代码的第一种方法 
   Print(__FUNCTION__,"_Uninitalization reason code = ",reason);
//--- 获得无法初始化原因代码的第二种方法
   Print(__FUNCTION__,"_UninitReason = ",getUninitReasonText(_UninitReason));
  }


更新: 2015.12.03