ObjectFind

Busca un objeto con el nombre especificado en el gráfico con el identificador especificado.

int  ObjectFind(
   long    chart_id,     // identificador del gráfico
   string  name          // nombre del objeto
   );

Parámetros

chart_id

[in]  Identificador del gráfico. 0 significa el gráfico actual.

name

[in]  Nombre del objeto que se busca.

Valor devuelto

En caso del éxito la función devuelve el número de subventana (0 significa la ventana principal del gráfico) donde se encuentra el objeto encontrado. Si el objeto no ha sido encontrado, la función devuelve un número negativo. Para la información más detallada sobre el error hay que llamar a la función GetLastError().

Nota

La función usa una llamada sincrónica, esto significa que la función espera a la ejecución de todos los comandos que han sido ubicados en la cola del gráfico antes de su llamada, y por eso puede consumir un tiempo considerable. Hay que tener esta circunstancia en cuenta al trabajar con multitud de objetos en el gráfico.

Al renombrar un objeto gráfico, se generan al mismo tiempo dos eventos que pueden ser procesados en el Asesor Experto o el indicador usando la función OnChartEvent():

  • evento de eliminación del objeto con el nombre anterior;
  • evento de creación del objeto gráfico con el nombre nuevo.

 

Ejemplo:

#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()
  {
//--- identificador del gráfico
   long chart_id=ChartID();
 
//--- si se encuentra un objeto gráfico con el nombre OBJ_NAME en el gráfico de la ventana con el número WND,
//--- informamos de ello y finalizamos el funcionamiento
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- si no se ha encontrado el objeto
   else
     {
      //--- si el último código de error no es 4202 ("Objeto gráfico no encontrado")
      //--- informamos del error y finalizamos el funcionamiento
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- informaremos en el diario que el objeto con el nombre OBJ_NAME no está presente en el gráfico con el identificador chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- crearemos un objeto gráfico "línea vertical" con el nombre OBJ_NAME en la ventana con el número WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      //--- redibujamos el gráfico para que refleje inmediatamente los cambios
      ChartRedraw(chart_id);
      
      //--- comprobaremos la presencia del objeto creado
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- si se ha creado un objeto, lo registraremos en el diario
      //--- esperamos un segundo y eliminamos el objeto gráfico creado
      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);
      
      //--- redibujamos el gráfico para que refleje inmediatamente los cambios
      ChartRedraw(chart_id);
     }
   /*
   resultado:
   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
   */
  }