定義済み変数「_UninitReason」とは?
「_UninitReason」は、MQL5プログラムが終了した理由(=初期化解除理由)に関する情報が格納された定義済み変数です。
※定義済み変数についての詳細は↓の記事をご参照ください
「MQL5プログラムが終了した理由」には事前に定義された定数リスト(=初期化解除の理由コード)があり、UninitializeReason関数はそれを取得して戻り値として返します。
※初期化解除の理由コードについての詳細は↓の記事をご参照ください
OnDeinit関数が呼び出されるたびに、UninitializeReason関数が初期化解除の理由コードを取得し、その値がOnDeinit関数の引数「reason」に格納される仕様になっているのですが、定義済み変数「_UninitReason」にもUninitializeReason関数が取得した値が格納されているので、「_UninitReason」をつかっても同じ情報を取得する事が出来ます。
※OnDeinit関数についての詳細は↓の記事をご参照ください
※UninitializeReason関数についての詳細は↓の記事をご参照ください
定義済み変数「_UninitReason」が格納し得る値について
定義済み変数「_UninitReason」にはプログラム終了理由に応じて、以下の事前に定義された「プログラムが終了した理由」の定数リスト(=初期化解除の理由コード)の値が格納されます。
終了理由に応じて以下の値を取得します。
REASON_PROGRAM
値: 0
説明: エキスパートアドバイザーがExpertRemove関数を呼び出して操作を終了した場合にこのコードが使用されます。
※ExpertRemove関数についての詳細は↓の記事をご参照ください
REASON_REMOVE
- 定数名: REASON_REMOVE
- 値: 1
- 説明: プログラムがユーザーによってチャートから直接削除された場合に返されます。
REASON_RECOMPILE
- 定数名: REASON_RECOMPILE
- 値: 2
- 説明: プログラムが再コンパイルされたことを示します。
※コンパイルについての詳細は↓の記事をご参照ください
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
- 定数名: REASON_INITFAILED
- 値: 8
- 説明: OnInit関数がゼロ以外の値を返した場合に設定されます。
※OnInit関数についての詳細は↓の記事をご参照ください
REASON_CLOSE
- 定数名: REASON_CLOSE
- 値: 9
- 説明: MT5端末が閉じられたときに使用されます。
定義済み変数「_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」を記述することによって、どの理由でプログラムが終了したのかをログに記録します。
これによりプログラムの終了理由を把握することができます。
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。
コメント