ObjectFind関数の働き・役割
ObjectFind関数は、指定されたチャート内で特定の名前を持つオブジェクトを検索するための関数です。この関数を使用することで、チャート上に存在するオブジェクトの位置を特定し、そのオブジェクトに対して操作を行うことができます。
ObjectFind関数の引数について
ObjectFind関数の引数構成は以下の通りです。
書式
int ObjectFind(
long chart_id, // チャート識別子
string name // オブジェクト名
);
各引数の説明
chart_id
チャートの識別子を指定します。0を指定すると現在のチャートを意味します。
name
検索するオブジェクトの名前を指定します。
ObjectFind関数の戻り値について
ObjectFind関数は、指定されたオブジェクトが見つかった場合、そのオブジェクトが存在するサブウィンドウの番号を返します。メインウィンドウの場合は0を返します。オブジェクトが見つからなかった場合、関数は負の数を返します。エラーの詳細を知りたい場合は、GetLastError関数を使用してください。
※GetLastError関数の詳細は↓の記事をご参照ください。
ObjectFind関数を使う際の注意点
ObjectFind関数同期呼び出しを使用します。
これは、この関数が呼び出される前に、そのチャートのキュー(処理待ちの命令リスト)にあるすべてのコマンドが実行されるまで待機することを意味します。
そのため、大量のオブジェクトを操作する際には、処理に時間がかかる可能性があります。
同期呼び出しとは、命令が順番に実行されることを意味し、次の命令が前の命令の完了を待つ必要があります。この点を考慮して、効率的なコード設計を行う必要があります。
オブジェクトの名称が変更された場合、「古い名称のオブジェクトの削除イベント」と「新しい名称のオブジェクトの作成イベント」という2つのイベントが同時に発生します。これらのイベントはエキスパートアドバイザーまたはインジケータのOnChartEvent関数で処理されます。
ObjectFind関数を使ったサンプルコード
以下は、ObjectCreate関数を使用してチャート上に現在時刻に垂直線オブジェクトを作成し、その後ObjectFind関数を使用してそのオブジェクトを検索し、結果をエキスパートログに出力するサンプルコードです。
// スクリプトの開始関数
void OnStart()
{
long chart_id = 0; // 現在のチャート
string obj_name = "MyTrendLine";
// オブジェクトの検索
int window_num = ObjectFind(chart_id, obj_name);
if(window_num >= 0)
{
PrintFormat("オブジェクト '%s' はウィンドウ %d に存在します", obj_name, window_num);
}
else
{
PrintFormat("オブジェクト '%s' は見つかりませんでした", obj_name);
}
}
サンプルコードに使われた関数や文法要素の簡単な解説
OnStart関数
OnStart関数は、スクリプトの実行が開始されたときに自動的に呼び出されます。この関数内に実行したい処理を記述します。
ObjectCreate関数
ObjectCreate関数は、指定されたチャートにグラフィカルオブジェクトを作成するための関数です。このサンプルコードでは、垂直線(OBJ_VLINE)を現在のチャートに作成します。current_timeは現在時刻を示し、垂直線の時間座標として使用されます。
ObjectFind関数
ObjectFind関数は、指定されたチャート内で特定の名前を持つオブジェクトを検索するための関数です。chart_idでチャートの識別子を、nameで検索するオブジェクトの名前を指定します。オブジェクトが見つかった場合、そのオブジェクトが存在するサブウィンドウの番号を返します。見つからなかった場合は、負の数を返します。
PrintFormat関数
PrintFormat関数は、指定されたフォーマットに従って文字列を作成し、エキスパートログに出力する関数です。引数としてフォーマット文字列と、それに続く可変数の引数を指定します。
TimeCurrent関数
TimeCurrent関数は、現在のサーバー時間を取得するための関数です。返される値はdateTime型です。これを使用して、垂直線を現在時刻に描画します。
このサンプルコードでは、チャート上に現在時刻に垂直線オブジェクトを作成し、その後ObjectFind関数を使用してそのオブジェクトを検索し、結果をエキスパートログに出力します。オブジェクトが見つかった場合、そのオブジェクトが存在するサブウィンドウの番号を表示します。見つからなかった場合は、オブジェクトが見つからなかった旨を表示します。