
MT4・MT5 実行中のログメッセージ
uninit reason
- 意味
- EA・インジケーターが停止した理由(uninit reason の番号)
「uninit reason」とは
EA・インジケーターが停止したとき、エキスパートタブに「uninit reason 3」のように停止理由の番号が出ます。この番号は OnDeinit(const int reason) の reason と同じで、なぜ止まったのかを調べる手がかりになります。
ログの表示例
MyEA USDJPY,H1: uninit reason 3
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
「uninit reason」の主な原因
- 0(REASON_PROGRAM):プログラム自身が ExpertRemove() で停止した
- 1(REASON_REMOVE):チャートから削除された
- 2(REASON_RECOMPILE):再コンパイルされた
- 3(REASON_CHARTCHANGE):通貨ペアか時間足が変更された
- 4(REASON_CHARTCLOSE):チャートが閉じられた
- 5(REASON_PARAMETERS):パラメータが変更された
- 6(REASON_ACCOUNT):別の口座にログインした、または再接続で口座情報が変わった
- 7(REASON_TEMPLATE):テンプレートが適用された
- 8(REASON_INITFAILED):OnInit() が 0 以外を返した
- 9(REASON_CLOSE):MT4 / MT5 が終了した
「uninit reason」の対処法
- 意図しない停止なら、番号から原因を確認する(例:8 なら OnInit の失敗)
- OnDeinit(const int reason) で reason を Print() しておくと、停止理由をログに残せる
- 3 や 5 で停止したときに状態がリセットされないよう、必要な値はグローバル変数やファイルに保存する
コード例(MQL5)
// 停止理由をログに残す(uninit reason の確認)(MQL5)
string ReasonText(const int reason)
{
switch(reason)
{
case REASON_PROGRAM: return "ExpertRemove() で停止";
case REASON_REMOVE: return "チャートから削除";
case REASON_RECOMPILE: return "再コンパイル";
case REASON_CHARTCHANGE: return "通貨ペア・時間足の変更";
case REASON_CHARTCLOSE: return "チャートを閉じた";
case REASON_PARAMETERS: return "パラメータの変更";
case REASON_ACCOUNT: return "口座の変更・再接続";
case REASON_TEMPLATE: return "テンプレートの適用";
case REASON_INITFAILED: return "OnInit() が失敗";
case REASON_CLOSE: return "ターミナルの終了";
}
return "不明";
}
void OnDeinit(const int reason)
{
PrintFormat("停止理由 %d:%s", reason, ReasonText(reason));
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












