ObjectDelete

A função remove o objeto com nome específico a partir de um gráfico especificado.

bool  ObjectDelete(
   long    chart_id,     // identificador gráfico
   string  name          // nome objeto
   );

Parâmetros

chart_id

[in]  Identificador do gráfico. Significa o gráfico atual.

nome

[in]  Nome do objeto para ser deletado.

Valor do Retorno

Retorna true, se a colocação do comando na fila do gráfico especificado for bem-sucedida, caso contrário, false.

Observação

Ao chamar ObjectDelete(), sempre é usada uma chamada assíncrona, portanto a função retorna apenas o resultado da colocação do comando na fila do gráfico. Neste caso, true indica apenas que o comando está na fila com sucesso; e em si o resultado de sua execução não é conhecido.

Para verificação do resultado da execução, é possível utilizar a função ObjectFind() ou quaisquer funções que solicitam as propriedades do objeto, por exemplo, do tipo ObjectGetXXX. Mas, ao fazer isto, deve-se ter em mente que estas funções são colocadas na fila de espera dos comandos do gráfico e são esperados os resultados da execução (uma vez que são chamadas síncronas), isso quer dizer que não podem consumir muito tempo. Deve ter isso em mente, se você estiver trabalhando com um grande número de objetos no gráfico.

Quando um objeto é renomeado, dois eventos são formados simultaneamente. Estes eventos podem ser manipulados em um Expert Advisor ou o indicador pela função OnChartEvent():

  • um evento de exclusão de um objeto com o nome antigo;
  • um evento de criação de um objeto com um novo nome.

 

Exemplo:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- identificador do gráfico
   long chart_id=ChartID();
 
//--- em laço por todos os objetos gráficos do chart
   int obj_total=ObjectsTotal(chart_id);
   for(int i=obj_total-1i>=0i--)
     {
      //--- pula cada segundo objeto
      if(i%2==0)
         continue;
      
      //--- obtém o nome do objeto gráfico
      //--- se for uma marca de trade de autotrading, ignora esse objeto
      string obj_name=ObjectName(chart_idi);
      if(StringFind(obj_name"autotrade")==0)
         continue;
      
      //--- remove o objeto gráfico do chart com o 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 o gráfico, onde estão colocados 6 objetos gráficos e marcas de autotrading (que são ignoradas):
   [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
   */
  }