初期化解除の理由のコード

初期化解除の理由のコードUninitializeReason() 関数から返されます。可能な値は下記の通りです。

定数

説明

REASON_PROGRAM

0

エキスパートアドバイザーが 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

端末が閉じられました。

初期化解除理由のコードは、また、所定の関数 OnDeinit(const int reason) のパラメータとしても渡されます。

例:

//+------------------------------------------------------------------+
//| テキスト記述を取得                                                    |
//+------------------------------------------------------------------+
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)
 {
//--- 初期化解除の理由のコード取得の方法その 1
  Print(__FUNCTION__,"_Uninitalization reason code = ",reason);
//--- 初期化解除の理由のコード取得の方法その 2
  Print(__FUNCTION__,"_UninitReason = ",getUninitReasonText(_UninitReason));
 }