ObjectsDeleteAll 関数
指定したチャートウィンドウから、指定したオブジェクトを削除します。
通常は EAを使っているチャート上に描画したオブジェクトをチャート上から EAを削除 (解除) する時に使われることが大半です。
ここで言うオブジェクトとは、チャート上に描画した線や図形、文字などのことです。
データ型と構成・戻り値
// この関数は4つの構成があります。
int ObjectsDeleteAll(①, ②, ③, ④); // 接頭辞指定有り
int ObjectsDeleteAll(①, ③, ④); // チャートID指定有り
int ObjectsDeleteAll(③, ④); // チャートID指定無し
int ObjectsDeleteAll(); // 全オブジェクト削除
戻り値は、削除したオブジェクトの数を返します。
発生するエラーについては、GetLastError関数で取得することが出来ます。
引数 [0~4]
ObjectsDeleteAll関数は 0~ 4個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | chart_id | long | - | - | 削除対象にするチャートID。「チャートID指定無し」の時は現在のチャートが選択されます。チャートIDはChartID関数で取得することが出来ます。 |
② | prefix | const string | - | - | オブジェクト名の接頭辞。名前がこの文字で始まる全オブジェクトがチャートから削除されます。接頭辞を ‘name’ または ‘name*’ として指定できます。どちらでも同じように機能します。省略した場合は全オブジェクトが削除されます。 |
③ | sub_window | int | - | EMPTY | チャートウィンドウの番号。-1以上 (0はメインチャートウィンドウを意味します) かつ WindowsTotal関数で取得される値未満でなければなりません。EMPTY (-1) は全ウィンドウになります。 |
④ | object_type | int | - | EMPTY | オブジェクトの型。値は、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値を消してから終了してください。