ObjectFind

The function searches for an object with the specified name in the chart with the specified ID.

int  ObjectFind(
   long    chart_id,     // chart identifier
   string  name          // object name
   );

Parameters

chart_id

[in]  Chart identifier. 0 means the current chart.

name

[in]  The name of the searched object.

Return Value

If successful the function returns the number of the subwindow (0 means the main window of the chart), in which the object is found. If the object is not found, the function returns a negative number. To read more about the error call GetLastError().

Note

The function uses a synchronous call, which means that the function waits for the execution of all commands that have been enqueued for this chart prior to its call, that is why this function can be time consuming. This feature should be taken into account when working with a large number of objects on a chart.

When an object is renamed, two events are formed simultaneously. These events can be handled in an Expert Advisor or indicator by the OnChartEvent() function:

  • an event of deletion of an object with the old name;
  • an event of creation of an object with a new name.

 

Example:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND        0
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- chart ID
   long chart_id=ChartID();
 
//--- if the OBJ_NAME graphical object is found on the chart in the WND window,
//--- report this and finish the work
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- if the object is not found
   else
     {
      //--- if the last error code is not 4202 ("Graphical object not found")
      //--- report an error and exit
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- report in the journal that the OBJ_NAME object is not on the chart with chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- create the "vertical line" graphical object named OBJ_NAME in the WND window
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      //--- redraw the chart to immediately reflect the changes
      ChartRedraw(chart_id);
      
      //--- check if the created object is present
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- if the object is created, report this in the journal,
      //--- wait a second and delete the created graphical object
      PrintFormat("Now a graphic object named \"%s\" exists on the chart with ID #%I64d. Let's delete it."OBJ_NAMEchart_id);
      Sleep(1000);
      ObjectDelete(chart_idOBJ_NAME);
      
      //--- redraw the chart to immediately reflect the changes
      ChartRedraw(chart_id);
     }
   /*
   result:
   There is no graphic object named "TestObjectFind" on the chart with ID #133246248352168439Let's create it.
   Now a graphic object named "TestObjectFind" exists on the chart with ID #133246248352168439Let's delete it
   */
  }