ObjectFind

Sucht ein Objekt mit dem angegebenen Namen auf dem Chart mit dem angegebenen Identifikatoren.

int  ObjectFind(
   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 de gesuchten Objekts.

Rückgabewert

Im Erfolgsfall gibt die Funktion Nummer des Subfensters zurück (0bedeutet das Hauptfenster des Chart), in dem sich das gefundene Objekt befindet. Wenn das Objekt nicht gefunden ist, gibt die Funktion eine negative Zahl zurück. Für die Erhaltung der weiteren Information über den Fehler, muss die Funktion GetLastError() aufgerufen werden.

Hinweis

Die Funktion verwendet einen synchronen Aufruf, d.h. dass die Funktion auf die Ausführung aller Befehle wartet, die vor deren Aufruf zur Warteschlange des Charts hinzugefügt wurden, deswegen kann die Funktion 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 Anzeiger durch die Funktion OnChartEvent() verarbeitet werden können:

  • Entfernung des Objekts mit dem alten Namen;
  • Erzeugung des graphischen Objekts mit dem Namen.

 

Beispiel:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND        0
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Chart-ID
   long chart_id=ChartID();
 
//--- wenn das grafische Objekt OBJ_NAME auf dem Chart im Fenster WND gefunden wird,
//--- dies melden und die Arbeit beenden
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- wenn das Objekt nicht gefunden wird
   else
     {
      //--- wenn der letzte Fehlercode nicht 4202 ("Grafisches Objekt nicht gefunden") ist
      //--- Fehler melden und beenden
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() fehlgeschlagen. Error "GetLastError());
         return;
        }
      
      //--- im Journal melden, dass das Objekt OBJ_NAME nicht auf dem Chart mit der Chart-ID chart_id vorhanden ist
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Lassen Sie es uns erstellen."OBJ_NAMEchart_id);
      
      //--- Erstellen des grafischen Objekts "vertical line" mit dem Namen OBJ_NAME im Fenster WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() fehlgeschlagen. Error "GetLastError());
         return;
        }
      
      //--- Zeichnen Sie das Chart neu, um die Änderungen sofort widerzuspiegeln
      ChartRedraw(chart_id);
      
      //--- Überprüfen, ob das erstellte Objekt vorhanden ist
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() fehlgeschlagen. Error "GetLastError());
         return;
        }
      
      //--- wenn das Objekt erstellt wurde, melde dies im Journal,
      //--- warte eine Sekunde und lösche das erstellte Grafikobjekt
      PrintFormat("Now a graphic object named \"%s\" exists on the chart with ID #%I64d. Löschen wir es."OBJ_NAMEchart_id);
      Sleep(1000);
      ObjectDelete(chart_idOBJ_NAME);
      
      //--- Zeichnen Sie das Chart neu, um die Änderungen sofort widerzuspiegeln
      ChartRedraw(chart_id);
     }
   /*
   Ergebnis:
   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
   */
  }