初期化解除の理由コードとは?
「初期化解除の理由コード」とは、MQL5でのプログラム(エキスパートアドバイザーやインジケータなど)が終了する理由を示すコードです。
MQL5側で、プログラム終了理由を事前に定数リスト化したもの、という言い方もできます。
「初期化解除の理由コード」はOnDeinit関数が呼び出される際に渡される引数でもあり、プログラムがなぜ終了したのかを示します。
OnDeinit関数が呼び出された際に、UninitializeReason関数という関数が初期化解除の理由コードの値を取得し、OnDeinit関数の引数「reason」に渡される仕様になっています。
※OnDeinit関数についての詳細は↓の記事をご参照ください
※UninitializeReason関数についての詳細は↓の記事をご参照ください
例えば、プログラムがユーザーによってチャートから削除された場合、再コンパイルされた場合、またはチャートが閉じられた場合などが含まれます。
これにより、プログラムの終了処理を適切に行うための対応が可能になります。
初期化解除の理由コードに定められている識別子は以下の通りです。
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端末が閉じられたときに使用されます。
初期化解除の理由コードを使ったサンプルコード
以下は初期化解除の理由コードを使ったサンプルコードになります。
// 初期化解除理由を取得し、理由をテキストで出力する関数
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関数を使い、どの理由でプログラムが終了したのかをログに記録します。
これによりプログラムの終了理由を把握することができます。
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。
コメント