ObjectDelete

Entfernt das Objekt mit dem angegebenen Namen des angegebenen Charts.

bool  ObjectDelete(
   long    chart_id,     // Identifikator des Charts 
   string  name          // Name des Objekts
   );

Parameter

chart_id

[in]  Identifikator des Charts. 0 bedeutet den laufenden Chart.

name

[in]  Name des entfernten Objekts.

Rückgabewert

Gibt true zurück, wenn ein Befehl zur Warteschlange des angegebenen Charts erfolgreich hinzugefügt wurde, andernfalls false.

Hinweis

Beim Aufruf von ObjectDelete() wird immer ein asynchroner Aufruf verwendet, deswegen gibt die Funktion nur das Ergebnis des Hinzufügens eines Befehls zur Warteschlange des Charts zurück. In diesem Fall bedeutet true nur, dass der Befehl zur Warteschlange erfolgreich hinzugefügt wurde, das Ergebnis der Ausführung ist unbekannt.

Für die Überprüfung des Ergebnisses der Ausführung kann man die Funktion ObjectFind() oder andere Funktionen verwenden, die die Eigenschaften des Objektes abrufen, z.B. vom Typ ObjectGetXXX. Dabei muss man beachten, dass solche Funktionen am Ende der Warteschlange hinzugefügt werden und auf das Ergebnis der Ausführung warten (weil sie synchrone Aufrufe sind). D.h. sie können viel Zeit in Anspruch nehmen.  Dies muss man beachten, wenn man mit vielen Objekten im Chart arbeitet.

Bei der Umbenennung des graphischen Objekts werden gleichzeitig zwei Ereignisse gebildet, die im Expert oder im Anzeiger durch die Funktion OnChartEvent() verarbeitet werden können:

  • Ereigniss der Entfernung des Objekts mit dem alten Namen;
  • Ereignis der Erzeugung des graphischen Objekts mit dem neuen Namen.

 

Beispiel:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Chart-ID
   long chart_id=ChartID();
 
//--- in einer Schleife durch alle grafischen Objekte des Chart
   int obj_total=ObjectsTotal(chart_id);
   for(int i=obj_total-1i>=0i--)
     {
 //--- jedes zweite Objekt überspringen 
      if(i%2==0)
         continue;
      
 //--- den Namen des grafischen Objekts abrufen
 //--- wenn es sich um ein Deal-Kennzeichen eines Auto-Trades handelt, dieses Objekt überspringen
      string obj_name=ObjectName(chart_idi);
      if(StringFind(obj_name"autotrade")==0)
         continue;
      
      //--- Löschen des grafischen Objekts aus dem Chart mit 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() fehlgeschlagen. Error "GetLastError());
        }
     }
   /*
   Ergebnis für das Chart, in dem 6 grafische Objekte und automatische Handelskennzeichnungen (übersprungen) platziert sind:
   [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
   */
  }