ObjectFind

La funzione cerca un oggetto con il nome specificato nella tabella con l'ID specificato.

int  ObjectFind(
longchart_id,// Identificatore del chart
   string  name          // nome dell'oggetto
   );

Parametri

chart_id

[in] Identificatore del Grafico. 0 significa il grafico corrente.

name

[in] Il nome dell'oggetto ricercato.

Valore restituito

In caso di successo la funzione restituisce il numero della finestra secondaria (0 significa la finestra principale del grafico), in cui l'oggetto si trova. Se l'oggetto non viene trovato, la funzione restituisce un numero negativo. Per saperne di più sull' errore chiamare GetLastError().

Nota

La funzione utilizza una chiamata sincrona, il che significa che la funzione attende l'esecuzione di tutti i comandi che sono stati accodati per questo chart prima della sua chiamata, per cui questa funzione può richiedere molto tempo. Questa funzione deve essere presa in considerazione quando si lavora con un gran numero di oggetti su un chart.

Quando un oggetto viene rinominato, due eventi si formano simultaneamente. Questi eventi possono essere gestiti in un Expert Advisor o indicatore della funzione OnChartEvent():

  • un evento di eliminazione di un oggetto con il vecchio nome;
  • un evento di creazione di un oggetto con un nuovo nome.

 

Esempio:

#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()
  {
//--- ID del grafico
   long chart_id=ChartID();
 
//--- se l'oggetto grafico OBJ_NAME si trova sul grafico nella finestra WND,
//--- segnalalo e termina il lavoro
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- se l'oggetto non viene trovato
   else
     {
      //--- se l'ultimo codice di errore non è 4202 ("Graphical object not found")
      //--- segnala un errore ed esci
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- segnalare nel journal che l'oggetto OBJ_NAME non è sul grafico con chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- creare l'oggetto grafico "linea verticale" denominato OBJ_NAME nella finestra WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
 //--- ridisegnare il grafico per riflettere immediatamente i cambiamenti
      ChartRedraw(chart_id);
      
      //--- controllare se l'oggetto creato è presente
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- se l'oggetto viene creato, segnalalo nel journal,
      //--- attendere un secondo ed eliminare l'oggetto grafico creato
      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);
      
 //--- ridisegnare il grafico per riflettere immediatamente i cambiamenti
      ChartRedraw(chart_id);
     }
   /*
   risultato:
   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
   */
  }