【MQL5】初期化解除の理由コード(Uninitialization Reason Codes)について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

初期化解除の理由コードとは?

初期化解除の理由コード」とは、MQL5でのプログラム(エキスパートアドバイザーインジケータなど)が終了する理由を示すコードです。

MQL5側で、プログラム終了理由を事前に定数リスト化したもの、という言い方もできます。

初期化解除の理由コード」はOnDeinit関数が呼び出される際に渡される引数でもあり、プログラムがなぜ終了したのかを示します。

OnDeinit関数が呼び出された際に、UninitializeReason関数という関数初期化解除の理由コードの値を取得し、OnDeinit関数引数「reason」に渡される仕様になっています。

OnDeinit関数についての詳細は↓の記事をご参照ください

UninitializeReason関数についての詳細は↓の記事をご参照ください

例えば、プログラムがユーザーによってチャートから削除された場合、再コンパイルされた場合、またはチャートが閉じられた場合などが含まれます。

これにより、プログラムの終了処理を適切に行うための対応が可能になります。

初期化解除の理由コードに定められている識別子は以下の通りです。

REASON_PROGRAM

定数: REASON_PROGRAM

: 0

説明: エキスパートアドバイザーExpertRemove関数を呼び出して操作を終了した場合にこのコードが使用されます。

ExpertRemove関数についての詳細は↓の記事をご参照ください

REASON_REMOVE

  • 定数: REASON_REMOVE
  • : 1
  • 説明: プログラムがユーザーによってチャートから直接削除された場合に返されます。

REASON_RECOMPILE

コンパイルについての詳細は↓の記事をご参照ください

REASON_CHARTCHANGE

  • 定数: REASON_CHARTCHANGE
  • : 3
  • 説明: シンボルまたはチャートの時間枠が変更された場合に指定されます。

REASON_CHARTCLOSE

  • 定数: REASON_CHARTCLOSE
  • : 4
  • 説明: チャートが閉じられたときにこの理由が設定されます。

REASON_PARAMETERS

  • 定数: REASON_PARAMETERS
  • : 5
  • 説明: ユーザーによって入力パラメータが変更された場合に使用されます。

REASON_ACCOUNT

  • 定数: REASON_ACCOUNT
  • : 6
  • 説明: アカウントが変更されたり、取引サーバへの再接続が必要になった場合に返されます。

REASON_TEMPLATE

  • 定数: REASON_TEMPLATE
  • : 7
  • 説明: 新しいテンプレートがチャートに適用されたことを示します。

REASON_INITFAILED

OnInit関数についての詳細は↓の記事をご参照ください

REASON_CLOSE

初期化解除の理由コードを使ったサンプルコード

以下は初期化解除の理由コードを使ったサンプルコードになります。

// 初期化解除理由を取得し、理由をテキストで出力する関数
string getUninitReasonText(int reasonCode) {
    string text = "";
    switch(reasonCode) {
        case REASON_ACCOUNT:
            text = "アカウントが変更されました";
            break;
        case REASON_CHARTCHANGE:
            text = "シンボルまたは時間枠が変更されました";
            break;
        case REASON_CHARTCLOSE:
            text = "チャートが閉じられました";
            break;
        case REASON_PARAMETERS:
            text = "入力パラメータが変更されました";
            break;
        case REASON_RECOMPILE:
            text = "プログラムが再コンパイルされました";
            break;
        case REASON_REMOVE:
            text = "プログラムがチャートから削除されました";
            break;
        case REASON_TEMPLATE:
            text = "新しいテンプレートが適用されました";
            break;
        default:
            text = "その他の理由";
    }
    return text;
}

// エキスパートの初期化解除時に呼び出される関数
void OnDeinit(const int reason) {
    // 初期化解除の理由のコードを取得し、コンソールに出力
    Print(__FUNCTION__, " 初期化解除の理由コード = ", reason);
    Print(__FUNCTION__, " 初期化解除の理由 = ", getUninitReasonText(reason));
}

サンプルコードの解説

上記のコードは、エキスパートアドバイザーがチャートから削除される際に発生する初期化解除の理由コードを取得し、それを理解するためのものです。

オリジナル関数であるgetUninitReasonText関数では、整数で指定された初期化解除の理由コードを受け取り、対応するテキスト説明に変換して返します。

この関数内でswitch文を使用し、各理由コードに応じて異なるテキストを割り当てています。

例えば、REASON_ACCOUNTの場合は”アカウントが変更されました”というテキストが割り当てられます。

switch文についての詳細は↓の記事をご参照ください

OnDeinit関数は、プログラムがチャートから削除された際に自動的に呼び出される関数です。OnDeinit関数では、初期化解除の理由コードをエクスパートログに出力するためにPrint関数を使い、どの理由でプログラムが終了したのかをログに記録します。

これによりプログラムの終了理由を把握することができます。

※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる

<MQL5でEAを作ろう講座>

をメインコンテンツとして展開しています。

【言語基礎編】

【中級実際にEAを作ろう編】

【発展編・MT5用EAを作る工程をカスタマイズしていく】

第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。

コメント

タイトルとURLをコピーしました