ObjectFind

Ищет объект с указанным именем на графике с указанным идентификатором.

int  ObjectFind(
   long    chart_id,     // идентификатор графика
   string  name          // имя объекта
   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

name

[in]  Имя искомого объекта.

Возвращаемое значение

В случае удачи функция возвращает номер подокна (0 означает главное окно графика), в котором находится найденный объект. Если объект не найден, то функция возвращает отрицательное число. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.

При переименовании графического объекта одновременно  формируются два события, которые можно обработать в эксперте или индикаторе функцией OnChartEvent():

  • событие удаления объекта со старым именем;
  • событие создания графического объекта с новым именем.

 

Пример:

#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()
  {
//--- идентификатор графика
   long chart_id=ChartID();
 
//--- если графический объект с именем OBJ_NAME найден на графике в окне с номером WND,
//--- сообщаем об этом и завершаем работу
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- если объект не найден
   else
     {
      //--- если код последней ошибки не 4202 ("Графический объект не найден")
      //--- сообщаем об ошибке и завершаем работу
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- сообщим в журнале, что объекта с именем OBJ_NAME нет на графике с идентификатором chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- создадим графический объект "вертикальная линия" с именем OBJ_NAME в окне с номером WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      //--- перерисуем график для немедленного отображения изменений
      ChartRedraw(chart_id);
      
      //--- проверим наличие созданного объекта
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- если объект создан - сообщим об этом в журнале,
      //--- подождём секунду и удалим созданный графический объект
      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);
      
      //--- перерисуем график для немедленного отображения изменений
      ChartRedraw(chart_id);
     }
   /*
   результат:
   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
   */
  }