MQL4(MT4) ObjectsDeleteAllの使い方

MQL4 Reference
スポンサーリンク

ObjectsDeleteAll()の使い方

MQL4 (MT4)のObjectsDeleteAll()の使い方をChatGPTに確認しました。
最初、3パターンをちゃんと出してもらえなかったので、依頼して出してもらいました。

使用GPTs:EA Creator

MT4 MQL4のObjectsDeleteAllの使い方を実装例を交えて教えて下さい。補足で気を付ける点なども教えて下さい。

ObjectsDeleteAll はパラメータの個数が異なるのが3種類あると思います その違いも含めて、説明し直しお願いできますか。

使い方

ObjectsDeleteAll関数の3つの異なるパターンは、MetaTrader 4 (MT4) のMQL4言語において、チャート上のオブジェクトを柔軟に削除するための機能を提供します。各パターンの使い方と違いについて詳しく説明します。

ObjectsDeleteAll関数の基本形式

1. 指定されたチャート、サブウィンドウ、特定のタイプのオブジェクトを削除

int ObjectsDeleteAll(
   long chart_id,          // チャートID
   int sub_window=EMPTY,   // サブウィンドウインデックス
   int object_type=EMPTY   // オブジェクトタイプ
);
  • chart_id: オブジェクトを削除するチャートのID。特定のチャートを対象とする場合に使用します。ChartID()関数で取得できます。
  • sub_window: オブジェクトを削除するサブウィンドウのインデックス。メインチャートは0、その他のインジケーターウィンドウは1から始まります。EMPTYを指定すると、すべてのウィンドウからオブジェクトが削除されます。
  • object_type: 削除するオブジェクトのタイプ。例えば、OBJ_HLINE(水平線)など。EMPTYを指定すると、すべてのタイプのオブジェクトが削除されます。

2. 指定されたサブウィンドウから特定のタイプのオブジェクトを削除

int ObjectsDeleteAll(
   int sub_window=EMPTY,   // サブウィンドウインデックス
   int object_type=EMPTY   // オブジェクトタイプ
);

このオーバーロードは、特定のチャートIDを指定せず、現在のチャートからオブジェクトを削除します。sub_windowobject_typeのパラメータは上記と同様です。

3. オブジェクト名のプレフィックスを使用して特定のタイプのオブジェクトを削除

int ObjectsDeleteAll(
   long chart_id,          // チャートID
   const string prefix,    // オブジェクト名のプレフィックス
   int sub_window=EMPTY,   // サブウィンドウインデックス
   int object_type=EMPTY   // オブジェクトタイプ
);
  • chart_idsub_windowobject_typeは上記と同様です。
  • prefix: オブジェクト名のプレフィックス。このプレフィックスを名前の始まりに含むオブジェクトのみが対象となります。

使用例:

以下は、ObjectsDeleteAll関数の3つの異なるパターンを使用する具体的な例です。

1. 指定されたチャート、サブウィンドウ、特定のタイプのオブジェクトを削除

特定のチャート(例えば、現在のチャート)から、メインウィンドウ(sub_window=0)にあるすべての水平線(object_type=OBJ_HLINE)を削除する例です。

void OnStart()
{
    long chartID = ChartID(); // 現在のチャートIDを取得
    int deleted = ObjectsDeleteAll(chartID, 0, OBJ_HLINE);
    Print("水平線が ", deleted, " 個削除されました。");
}

2. 指定されたサブウィンドウから特定のタイプのオブジェクトを削除

現在アクティブなチャートのメインウィンドウ(sub_window=0)から、すべてのオブジェクト(object_type=EMPTYを指定してタイプを指定しない)を削除する例です。

void OnStart()
{
    int deleted = ObjectsDeleteAll(0, EMPTY);
    Print("メインウィンドウからオブジェクトが ", deleted, " 個削除されました。");
}

3. オブジェクト名のプレフィックスを使用して特定のタイプのオブジェクトを削除

特定のチャートから、名前が特定のプレフィックス(ここでは “MyIndicator_”)で始まるすべてのオブジェクトを削除する例です。ここでは、サブウィンドウやオブジェクトタイプを指定していません(EMPTY)、つまりすべてのウィンドウとタイプのオブジェクトが対象です。

void OnStart()
{
    long chartID = ChartID(); // 現在のチャートIDを取得
    string prefix = "MyIndicator_";
    int deleted = ObjectsDeleteAll(chartID, prefix, EMPTY, EMPTY);
    Print(prefix, "で始まるオブジェクトが ", deleted, " 個削除されました。");
}

注意点

  • EMPTYマクロは、特にタイプやサブウィンドウを指定しない場合に便利な定数ですが、MQL4では直接的な定義はありません。ここでは、具体的な数値やタイプを指定しない場合の例としてEMPTYを使用していますが、実際のコードでは対応する具体的なデフォルト値(例: -1や特定の関数で定義されているデフォルト値)を使用する必要があります。
  • これらの関数を使用するときは、特にObjectsDeleteAllの3番目のパターンでプレフィックスを使用する場合、誤って必要なオブジェクトまで削除してしまわないように注意してください。
  • 削除操作を行う前に、特定のオブジェクトがチャート上に存在するかどうかを確認することも重要です。これにより、不要なエラーを避けることができます。

これらのパターンを適切に使用することで、チャート上のオブジェクトを効率的に管理し、ユーザーに必要な情報のみを表示することが可能になります。

MQL4リファレンス

正式な仕様は”MQL4 Reference“をご確認下さい。上記内容を確認しておくとより分かりやすいかと思います。
リンク:https://docs.mql4.com/objects/objectsdeleteall

他のオブジェクト関数の利用方法

以下のそれぞれのリンク先で確認していますので、ご参照ください。

関数名概要
ObjectCreateチャート上に新しいオブジェクトを作成します。
ObjectName指定されたインデックスにあるオブジェクトの名前を取得します。
ObjectDeleteチャートから指定された名前のオブジェクトを削除します。
ObjectsDeleteAll特定のウィンドウ、またはすべてのウィンドウからオブジェクトを削除します。
ObjectFind指定された名前のオブジェクトが存在するウィンドウのインデックスを返します。
ObjectGetTimeByValue指定された価格に対応する時間をオブジェクトから取得します。
ObjectGetValueByTime指定された時間に対応する価格をオブジェクトから取得します。
ObjectMove指定されたオブジェクトを新しい位置に移動します。
ObjectsTotalチャート上のオブジェクトの総数を返します。
ObjectGetDouble指定されたオブジェクトのプロパティ値(double型)を取得します。
ObjectGetInteger指定されたオブジェクトのプロパティ値(整数型)を取得します。
ObjectGetString指定されたオブジェクトのプロパティ値(文字列型)を取得します。
ObjectSetDouble指定されたオブジェクトのプロパティ値(double型)を設定します。
ObjectSetInteger指定されたオブジェクトのプロパティ値(整数型)を設定します。
ObjectSetString指定されたオブジェクトのプロパティ値(文字列型)を設定します。
TextSetFontテキストオブジェクトのフォント名、サイズ、スタイル、重さを設定します。
TextOutチャートに直接テキストを描画します。
TextGetSize指定されたテキストのサイズを取得します。
ObjectDescriptionオブジェクトの説明を取得します。
ObjectGetオブジェクトのプロパティを取得します。
ObjectGetFiboDescriptionフィボナッチオブジェクトのレベル説明を取得します。
ObjectGetShiftByValue指定された価格に対応するオブジェクトのシフトを取得します。
ObjectGetValueByShift指定されたシフトに対応するオブジェクトの価格を取得します。
ObjectSetオブジェクトの特定のプロパティを設定します。
ObjectSetFiboDescriptionフィボナッチオブジェクトのレベル説明を設定します。
ObjectSetTextオブジェクトにテキストを設定します。
ObjectTypeオブジェクトのタイプを取得します。

関連記事

スポンサーリンク
海外FXキャッシュバック口座開設ならTariTali(タリタリ)

コメント

タイトルとURLをコピーしました