不能初始化原因代码

使用 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));

  }