MQL4MQL5 スクリプト オブジェクト・画面
自分が作ったオブジェクトだけをまとめて消したい
結論:オブジェクト名の先頭をそろえておき、ObjectsDeleteAll(0, "先頭の文字") で消します。
考え方
ObjectsDeleteAll() は、名前の先頭部分(プレフィックス)を指定すると、その文字で始まるオブジェクトだけを消せます。EA やインジケーターで作るオブジェクトの名前に共通の先頭文字を付けておけば、手で引いたラインを残したまま、自分の作ったものだけを片付けられます。ここでは指定した先頭文字のオブジェクトを消すスクリプトを例にしています。
- オブジェクトを作るときに、名前の先頭に共通の文字(例:「MyEA_」)を付けておく
- 消すときは ObjectsDeleteAll(0, "MyEA_") を呼ぶ
- EA・インジケーターなら OnDeinit() で呼ぶと、外したときに自動で片付く
そのまま使えるコード
MetaEditor の「新規作成」で「スクリプト」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Scripts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
#property script_show_inputs
// 指定した文字で始まるオブジェクトだけを削除するスクリプト
input string InpPrefix = "MyEA_"; // 消すオブジェクト名の先頭
void OnStart()
{
if(InpPrefix == "")
{
Print("先頭の文字を入れてください(空だとすべて消えるため止めました)");
return;
}
int n = ObjectsDeleteAll(0, InpPrefix);
ChartRedraw();
Print(InpPrefix, " で始まるオブジェクトを ", n, " 個削除しました");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 種類で絞りたいときは ObjectsDeleteAll(0, 先頭, -1, OBJ_ARROW) のように種類も指定できます。
注意点
- ObjectsDeleteAll(0) のように先頭を指定しないと、手で引いたラインも含めてすべて消えます。
このコードで使っている関数
あわせて読みたいレシピ
「オブジェクト・画面」のレシピ一覧
- チャートにボタンを置いて、押したら注文したい
- 手で引いた水平線にタッチしたら知らせたい
- 自分が作ったオブジェクトだけをまとめて消したい












