ObjectFind

A função pesquisa por um objeto com o nome específico no gráfico com o ID especifico.

int  ObjectFind(
   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]  O nome do objeto pesquisado.

Valor do Retorno

Se for bem sucedido, a função retorna o número da sub-janela (0 significa a janela principal do gráfico), no qual o objeto foi encontrado. Se o objeto não for encontrado, a função retorna um número negativo. Para ler mais sobre o erro, chamar GetLastError().

Observação

A função utiliza uma chamada síncrona, isso significa que a função espera a execução de todos os comandos que foram colocados na fila do gráfico antes de sua chamada, e por isso este recurso pode 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"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND        0
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- identificador do gráfico
   long chart_id=ChartID();
 
//--- se o objeto gráfico com o nome OBJ_NAME for encontrado no gráfico na janela com o número WND,
//--- informamos isso e encerramos a execução
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- se o objeto não for encontrado
   else
     {
      ///--- se o código do último erro não for 4202 ("Objeto gráfico não encontrado")
      ///--- informamos o erro e encerramos a execução
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      ///--- registramos no log que não há objeto com o nome OBJ_NAME no gráfico com o identificador chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      ///--- criaremos o objeto gráfico "linha vertical" com o nome OBJ_NAME na janela com o número WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      ///--- redesenhamos o gráfico para exibir imediatamente as alterações
      ChartRedraw(chart_id);
      
      ///--- verificamos a existência do objeto criado
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      ///--- se o objeto for criado, informamos isso no log,
      ///--- aguardamos um segundo e removemos o objeto gráfico criado
      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);
      
      ///--- redesenhamos o gráfico para exibir imediatamente as alterações
      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
   */
  }