オブジェクトを削除 ObjectsDeleteAll 関数

関数

オブジェクト関数

ObjectsDeleteAll 関数

 指定したチャートウィンドウから、指定したオブジェクトを削除します。
 通常は EAを使っているチャート上に描画したオブジェクトをチャート上から EAを削除(解除)する時に使われることが大半です。

 ここで言うオブジェクトとは、チャート上に描画した線や図形、文字などのことです。

データ型と構成・戻り値

// この関数は4つの構成があります。
int ObjectsDeleteAll(①, ②, ③, ④); // 接頭辞指定有り
int ObjectsDeleteAll(①, ③, ④);     // チャートID指定有り
int ObjectsDeleteAll(③, ④);         // チャートID指定無し
int ObjectsDeleteAll();               // 全オブジェクト削除

 戻り値は、削除したオブジェクトの数を返します。
 発生するエラーについては、GetLastError関数で取得することが出来ます。

引数 [0~4]

 ObjectsDeleteAll関数は 0~ 4個の引数で構成されます。


引数名データ型単位初期値説明
chart_idlong削除対象にするチャートID。「チャートID指定無し」の時は現在のチャートが選択されます。チャートIDはChartID関数で取得することが出来ます。
prefixconst stringオブジェクト名の接頭辞。名前がこの文字で始まる全オブジェクトがチャートから削除されます。接頭辞を ‘name’ または ‘name*’ として指定できます。どちらでも同じように機能します。省略した場合は全オブジェクトが削除されます。
sub_windowintEMPTYチャートウィンドウの番号。-1以上(0はメインチャートウィンドウを意味します) かつ WindowsTotal関数で取得される値未満でなければなりません。EMPTY(-1)は全ウィンドウになります。
object_typeintEMPTYオブジェクトの型。値は、ENUM_OBJECT 列挙値の 1つにすることができます。EMPTY(-1)は全タイプになります。
※初期値があるものは省略可。

使用例

ObjectsDeleteAll関数を使ったオブジェクトの削除

 右上に現在チャートの通貨ペアの Bid値(売値)が水色でオブジェクト表示されます。それを EAを削除するのと同時にオブジェクト表示を消します。

 EAを削除する時は全てのオブジェクトを削除するので引数無しの ObjectsDeleteAll関数を使って処理をします。

コード

// ObjectsDeleteAll関数を使ったオブジェクト(Bid値)の削除
#property strict

void OnInit() {

   int xpixcel = (int)(ChartGetInteger(0,CHART_WIDTH_IN_PIXELS));
   int ypixcel = (int)(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS));
   int fontsize = 15;                    // フォントサイズ
   int xWidth = xpixcel - 200;           // 幅
   int yHeight = ypixcel + 20 - ypixcel; // 高さ
   
   ObjectsDeleteAll();
   
   ObjectCreate("obj_label", OBJ_LABEL,0,0,0);        // オブジェクト生成
   ObjectSet("obj_label", OBJPROP_XDISTANCE,xWidth);  // オブジェクトX軸位置設定
   ObjectSet("obj_label", OBJPROP_YDISTANCE,yHeight); // オブジェクトY軸位置設定
   
   ObjectSetText("obj_label", "Bid値:" + string(Bid), fontsize , "MS ゴシック" , clrCyan); 
}

void OnDeinit(const int reason) {
   int dcount = ObjectsDeleteAll(); Print("削除オブジェクト数: ", dcount);
}

通常のコンパイルして実行する方法をすると EAを削除するのと同時にチャートも消えて結果が分かり難いので、こちらの方法でコンパイルしてください。この時、自動売買は許可しなくても大丈夫です。(デモ口座でお試しください)

結果

 右上に現在の Bid値が水色で表示されます。今回の場合、EAを削除するのと同時に ObjectsDeleteAll関数で Bid値が消えるようにしていますので、チャート上で右クリックして EAを削除してみてください。Bid値がチャート上から削除されます。

 エキスパートタブのメッセージには削除したオブジェクト数が表示されます。
 今回は確認のためにデータを取得して表示しましたが普段はデータ取得しなくても良いです。
 (22行目「ObjectsDeleteAll();」だけで OK)


 同じように今度は「int dcount = ObjectsDeleteAll()…」のコードがある 22行目をコメント化して処理を無効にして実行してみてください。

 同様に EAを削除した場合、チャート上に Bid値が残ります。又、EAは削除されているので Bid値は止まったままになります。

 テスト終了後はこのチャートを閉じるか再度、先ほどのコードのコメント化を解除して右上の Bid値を消してから終了してください。

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