OnDeinit

この関数はDeinitイベントが発生するときに指標やEAで呼び出され、実行中のMQL5プログラムの初期化を解除するのに使用されます。

void OnDeinit(
  const int  reason        // 初期化解除の理由コード
  );

パラメータ

reason

[in]  初期化解除の理由コード

戻り値

なし

注意事項

以下の場合、DeinitイベントがEAと指標に生成されます。

  • MQL5 プログラムが接続されているシンボルまたはチャートの期間の変更に伴う再初期化の前
  • 入力の変更に伴う再初期化の前
  • MQL5プログラムをアンロードする前

reasonパラメータには下記の値を含むことができます。

定数

説明

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

端末が閉じられた

EAの初期化解除の理由コードはUninitializeReason()関数または事前定義された _UninitReason変数から受信されます。

EAのOnInit()およびOnDeinit()関数の例

input int fake_parameter=3;     // 無用のパラメータ
//+------------------------------------------------------------------+
//| エキスパート初期化関数                                                |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- プログラムがコンパイルされるビルド数を取得する
  Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- リセットされた理由コードはOnInit()でも取得できる
  Print(__FUNCTION__," Deinitialization reason code can be received during the EA reset");
//--- 初期化解除の理由コードを取得する1番目の方法
  Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- 初期化解除の理由コードを取得する2番目の方法  
  Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| エキスパート初期化解除に使用される関数                                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
//--- 初期化解除の理由コードを取得する1番目の方法
  Print(__FUNCTION__," Deinitialization reason code = ",reason);
//--- 初期化解除の理由コードを取得する2番目の方法
  Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- 初期化解除の理由コードを取得する3番目の方法  
  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, Event handling functionsProgram runningClient terminal eventsUninitialization reason codesVisibility scope and lifetime of variablesCreating and deleting objects