ObjectFind

この関数は指定された ID を持つチャートで指定された名称のオブジェクトを探します。

int  ObjectFind(
  long    chart_id,    // チャート識別子
  string  name          // オブジェクト名
  );

パラメータ

chart_id

[in]  チャート識別子( 0 は現在のチャート)

name

[in]  探されるオブジェクトの名称

戻り値

成功した場合、オブジェクトが見つかったサブウィンドウの番号( 0 はメインウィンドウ)。オブジェクトが見つからなかった場合、負の数。エラーの詳細を読むには GetLastError() を呼びます。

注意事項

この関数は同期呼び出しを使用します。つまり、この関数が呼び出される前にこのチャートのエンキューされたすべてのコマンドの実行が待機されるため、この関数は時間がかかることがあります。チャート上で多数のオブジェクトを操作する場合は、この特徴を考慮する必要があります。

オブジェクトの名称が変更された場合、2 つのイベントが同時に形成されます。これらのイベントはエキスパートアドバイザーまたは指標の OnChartEvent() 関数によって処理されます。

  • 古い名称のオブジェクトの削除イベント
  • 新しい名称のオブジェクトの作成イベント

例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link     "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND       0
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- チャートID
  long chart_id=ChartID();
 
//--- WNDウィンドウのチャート上でOBJ_NAMEグラフィックオブジェクトが見つかった場合
//--- これを報告して処理を終了する
  ResetLastError();
  if(ObjectFind(chart_id, OBJ_NAME)==WND)
    {
    PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d", OBJ_NAME, chart_id);
    return;
    }
   
//--- オブジェクトが見つからない場合
  else
    {
    //--- 直近のエラーコードが4202(Graphical object not found)でなかった場合
    //--- エラーを報告して終了する
    if(GetLastError()!=ERR_OBJECT_NOT_FOUND)
       {
        Print("ObjectFind() failed. Error ", GetLastError());
        return;
       }
     
    //--- chart_idのチャートにOBJ_NAME オブジェクトが存在しないことを操作ログで報告する
    PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it.", OBJ_NAME, chart_id);
     
    //--- WNDウィンドウにOBJ_NAMEという名前の「垂直線」グラフィックオブジェクトを作成する
    ResetLastError();
    if(!ObjectCreate(chart_id, OBJ_NAME, OBJ_VLINE, WND, TimeCurrent(), 0))
       {
        Print("ObjectCreate() failed. Error ", GetLastError());
        return;
       }
     
    //--- チャートを即座に再描画して変更を表示する
    ChartRedraw(chart_id);
     
    //--- 作成されたオブジェクトが存在するかどうかをチェックする
    if(ObjectFind(chart_id, OBJ_NAME)!=WND)
       {
        Print("ObjectFind() failed. Error ", GetLastError());
        return;
       }
     
    //--- オブジェクトが作成された場合は、これを操作ログで報告し、
    //--- 1秒待ってから作成されたグラフィックオブジェクトを削除する
    PrintFormat("Now a graphic object named \"%s\" exists on the chart with ID #%I64d. Let's delete it.", OBJ_NAME, chart_id);
    Sleep(1000);
    ObjectDelete(chart_id, OBJ_NAME);
     
    //--- チャートを即座に再描画して変更を表示する
    ChartRedraw(chart_id);
    }
  /*
   結果:
  There is no graphic object named "TestObjectFind" on the chart with ID #133246248352168439. Let's create it.
  Now a graphic object named "TestObjectFind" exists on the chart with ID #133246248352168439. Let's delete it.
  */
 }