オブジェクトを削除したい!

オブジェクトの削除

チャート上に配置されたオブジェクトは、MQL4のプログラムから削除することが可能です。何らかの条件を達成して表示したオブジェクトが時間の経過と共に条件を満たさなくなった場合は、必ず該当のオブジェクトを削除しましょう。特に最新のローソク足で条件を判定してオブジェクトを表示している場合は、現在価格の変動により条件を満たす状態と満たさない状態を繰り返す可能性があるため、現在価格が変動する毎にオブジェクトを一旦削除して表示するかどうかの判定を繰り返す、という対応が必要になります。

オブジェクトを削除するObjectDelete関数

オブジェクトを削除するには、MQL4で提供されているObjectDelete関数を使用します。

bool ObjectDelete(
    long   chart_id,        // chart ID
    string object_name      // object name
);

引用元:ObjectDelete – MQL4 Reference

引数

chart_id

第一引数のchart_idには、削除するオブジェクトが表示されているチャートのIDを指定します。MQL4プログラムが設定されたチャートの場合はChartID関数でチャートIDを取得できるためChartID関数の戻り値、または「0」を指定します。それ以外のチャートの場合は削除対象のオブジェクトが表示されているチャートIDを取得して指定します。

object_name

第二引数のobject_nameには、削除するオブジェクトの名前を指定します。

戻り値

オブジェクトの削除に成功した場合はtrue、失敗した場合はfalseが返却されます。

使用例

ObjectDelete(ChartID(), "TREND");

MQL4プログラムが設定されたチャート上にある「TREND」という名前のオブジェクトを削除します。

複数オブジェクトの削除

複数のオブジェクトを削除する場合はObjectsTotal関数でチャート上の全オブジェクト数を取得してループ処理を行い、ObjectName関数で削除したい名前かどうかを判断して削除することになりますが、チャート上の全てのオブジェクトを削除する場合はObjectsDeleteAllという関数がMQL4であらかじめ用意されています。詳細については以下のリンク先をご参照ください。

オブジェクトを全て削除したい! – MQL4逆引きリファレンス
https://www.mql4-encyclopedia.com/objectsdeleteall/

オブジェクトの削除タイミング

ObjectDelete関数によるオブジェクト削除のタイミングは、オブジェクトの作成と同じく一連の処理が終了するか、もしくは処理中にChartRefresh関数を実行したタイミングとなります。詳細については以下のリンク先をご参照ください。

オブジェクトを作りたい! – MQL4逆引きリファレンス
https://www.mql4-encyclopedia.com/objectcreate/

まとめ

オブジェクトを削除するにはObjectDelete関数を使用する
第一引数は削除するオブジェクトが表示されているチャートのID
第二引数は削除するオブジェクトの名前
複数のオブジェクトを削除するにはループまたはObjectsDeleteAll関数を使用
オブジェクトをすぐに削除するにはChartRefresh関数を使用する

参考URL

ObjectDelete – MQL4 Reference
https://docs.mql4.com/objects/objectdelete