
MQL4MQL5 イベント関数
OnDeinit()
- できること
- EA・インジケーターの終了時に呼ばれる
- 対応
- MQL4・MQL5
OnDeinit() とは
EA やインジケーターをチャートから外したとき、パラメーターや時間足を変えたとき、ターミナルを閉じたときなどに呼ばれる関数です。オブジェクトの削除、タイマーの停止、インジケーターハンドルの解放などの後始末を書きます。
OnDeinit() の書式と引数
void OnDeinit(const int reason)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
reason | const int | 必須 | 終了の理由を表す番号。REASON_REMOVE(チャートから削除)、REASON_PARAMETERS(パラメーター変更)、REASON_CHARTCHANGE(通貨ペア・時間足の変更)など。 |
戻り値
なし
OnDeinit() の使い方(コード例)
MQL4・MQL5 共通
int OnInit()
{
ObjectCreate(0, "MyLabel", OBJ_LABEL, 0, 0, 0);
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
// 通貨ペア・時間足の変更以外なら、作ったオブジェクトを消す
if(reason != REASON_CHARTCHANGE)
ObjectDelete(0, "MyLabel");
Print("終了理由:", reason);
}
void OnTick()
{
}MetaEditor でコンパイルできることを確認済みです。
OnDeinit() の注意点
- 時間足を切り替えただけでも OnDeinit() → OnInit() の順に呼ばれます。オブジェクトを毎回消して作り直したくない場合は、reason が REASON_CHARTCHANGE かどうかで処理を分けます。
- OnDeinit() の中で長い処理をすると、ターミナルが終了を待ちきれずに強制終了することがあります。後始末は短く済ませます。
- 理由の番号は UninitializeReason() でも取得できます。












