ObjectDelete

La funzione rimuove l'oggetto con il nome specificato dalla tabella specificata.

bool  ObjectDelete(
   long    chart_id,     // identificatore del grafico
   string  name          // nome dell'oggetto
   );

Parametri

chart_id

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

name

[un] Nome dell' oggetto da eliminare.

Valore restituito

La funzione restituisce true se il comando è stato aggiunto con successo alla coda del chart specificato, altrimenti false.

Nota

Una chiamata asincrona viene sempre utilizzata per ObjectDelete(), che è ciò per cui la funzione restituisce solo i risultati di aggiunta comando ad una coda(queue) chart. In questo caso, true significa solo che il comando è stato accodato correttamente, ma il risultato della sua esecuzione non è noto.

Per verificare il risultato di esecuzione del comando, è possibile utilizzare la funzione ObjectFind() o qualsiasi altra funzione che richiede proprietà dell'oggetto, come ObjectGetXXX. Tuttavia, dovresti tenere presente che tali funzioni vengono aggiunte alla fine della coda di quel grafico ed aspettano il risultato dell'esecuzione (dovuto alla chiamata sincrona) e quindi possono 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"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ID del grafico
   long chart_id=ChartID();
 
//--- in un ciclo attraverso tutti gli oggetti grafici del grafico
   int obj_total=ObjectsTotal(chart_id);
   for(int i=obj_total-1i>=0i--)
     {
      //--- saltare ogni secondo oggetto 
      if(i%2==0)
         continue;
      
      //--- ottenere il nome dell'oggetto grafico
      //--- se questa è un'etichetta di operazione automatica, salta questo oggetto
      string obj_name=ObjectName(chart_idi);
      if(StringFind(obj_name"autotrade")==0)
         continue;
      
      //--- eliminare l'oggetto grafico dal grafico con 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());
        }
     }
   /*
 risultato per il grafico in cui sono posizionati 6 oggetti grafici ed etichette di trading automatico (saltate):
   [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
   */
  }