ObjectDelete

Elimina el objeto con el nombre especificado del gráfico especificado.

bool  ObjectDelete(
   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 a eliminar.

Valor devuelto

Retorna true en el caso de que se haya añadido con éxito el comando a la cola del gráfico indicado, de lo contrario, false.

Nota

Al llamar ObjectDelete() siempre se usa una llamada asincrónica, por eso la función retorna solo el resultado de la colocación de la orden en la cola del gráfico. En este caso, true solo significa que el comando se ha puesto en la cola con éxito, el propio resultado de su ejecución aún se desconoce.

Para comprobar el resultado de la ejecución se puede usar la función ObjectFind() o cualquier función que retorne las propiedades del objeto, por ejemplo, del tipo ObjectGetXXX. Pero, en esta caso, además, se deberá tener en cuenta que estas funciones se colocan al final de la cola de comandos del gráfico y esperan el resultado de la ejecución (puesto que que son llamadas sincrónicas), es decir, pueden consumir bastante tiempo.  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"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- identificador del gráfico
   long chart_id=ChartID();
 
//--- en un ciclo a través de todos los objetos gráficos del gráfico
   int obj_total=ObjectsTotal(chart_id);
   for(int i=obj_total-1i>=0i--)
     {
      //--- omitimos cada segundo objeto 
      if(i%2==0)
         continue;
      
      //--- obtenemos el nombre del objeto gráfico
      //--- si se trata de una etiqueta de transacción de comercio automático, omitimos este objeto
      string obj_name=ObjectName(chart_idi);
      if(StringFind(obj_name"autotrade")==0)
         continue;
      
      //--- eliminamos del gráfico el objeto gráfico con el identificador chart_id
      ResetLastError();
      if(ObjectDelete(chart_idobj_name))
        {
         PrintFormat("[%d] Graphic object named \"%s\" removed from the chart with ID #%I64d"iobj_namechart_id);
        }
      else
        {
         Print("ObjectDelete() failed. Error "GetLastError());
        }
     }
   /*
   resultado para el gráfico donde se ubican 6 objetos gráficos y las etiquetas de comercio automático (se omiten):
   [659Graphic object named "M30 Rectangle 5636" removed from the chart with ID #128968168951083984
   [657Graphic object named "M30 Trendline 40731" removed from the chart with ID #128968168951083984
   [1Graphic object named "M30 Vertical Line 13600" removed from the chart with ID #128968168951083984
   */
  }