【MQL5】定義済み変数「_UninitReason」について

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

定義済み変数「_UninitReason」とは?

_UninitReason」は、MQL5プログラムが終了した理由(=初期化解除理由)に関する情報が格納された定義済み変数です。

定義済み変数についての詳細は↓の記事をご参照ください

MQL5プログラムが終了した理由」には事前に定義された定数リスト(=初期化解除の理由コード)があり、UninitializeReason関数はそれを取得して戻り値として返します。

初期化解除の理由コードについての詳細は↓の記事をご参照ください

OnDeinit関数が呼び出されるたびに、UninitializeReason関数初期化解除の理由コードを取得し、その値がOnDeinit関数引数「reason」に格納される仕様になっているのですが、定義済み変数_UninitReason」にもUninitializeReason関数が取得した値が格納されているので、「_UninitReason」をつかっても同じ情報を取得する事が出来ます。

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

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

定義済み変数「_UninitReason」が格納し得る値について

定義済み変数_UninitReason」にはプログラム終了理由に応じて、以下の事前に定義された「プログラムが終了した理由」の定数リスト(=初期化解除の理由コード)の値が格納されます。

終了理由に応じて以下の値を取得します。

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

定義済み変数「_UninitReason」を使ったサンプルコード

// 初期化解除理由を取得し、理由をテキストで出力する関数
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__, " 初期化解除の理由コード = ",_UninitReason);
    Print(__FUNCTION__, " 初期化解除の理由 = ", getUninitReasonText(reason));
}

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

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

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

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

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

OnDeinit関数は、プログラムがチャートから削除された際に自動的に呼び出される関数です。OnDeinit関数では、初期化解除の理由コードをエクスパートログに出力するためにPrint関数の第2引数定義済み変数_UninitReasonを記述することによって、どの理由でプログラムが終了したのかをログに記録します。

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

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

<MQL5でEAを作ろう講座>

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

【言語基礎編】

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

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

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

コメント

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