ObjectFind

Recherche l'objet ayant le nom indiqué dans le graphique indiqué.

int  ObjectFind(
   long    chart_id,     // identificateur du graphique
   string  name          // nom de l'objet
   );

Paramètres

chart_id

[in]  L'identificateur du graphique. 0 signifie le graphique courant.

name

[in]  Le nom de l'objet cherché.

Valeur de Retour

En cas du succès la fonction rend le numéro de la sous-fenêtre (0 signifie une principale fenêtre du graphique), dans laquelle il y a un objet trouvé. Si l'objet n'est pas trouvé, la fonction retourne un nombre négatif. Pour obtenir des informations supplémentaires sur l'erreur, il est nécessaire d'appeler la fonction GetLastError().

Note

La fonction utilise un appel synchrone, ce qui signifie que la fonction attend la fin de l'exécution de toutes les commandes présentes dans la queue de ce graphique avant cet appel. C'est pourquoi cette fonction peut être consommatrice en terme de temps. Cette caractéristique doit être prise en compte lors de l'utilisation d'un grand nombre d'objets sur un graphique.

Lors du changement de nom d'un objet graphique, deux événements sont générés, qui peuvent être traité dans les experts ou dans les indicateurs avec la fonction OnChartEvent() :

  • l'événement de la suppression de l'objet avec le nom précédent ;
  • l'événement de la création de l'objet graphique avec un nouveau nom.

 

Exemple :

#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()
  {
//--- identifiant du graphique
   long chart_id=ChartID();
 
//--- si l'objet graphique OBJ_NAME est trouvé sur le graphique dans la fenêtre WND,
//--- le signale et termine le travail
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- si l'objet n'est pas trouvé
   else
     {
      //--- si le dernier code d'erreur n'est pas 4202 ("Graphical object not found" (objet graphique non trouvé))
      //--- signale une erreur et sort
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- signale dans le journal que l'objet OBJ_NAME n'est pas présent sur le graphique avec l'identifiant chart_id
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- crée l'objet graphique "ligne verticale" nommé OBJ_NAME dans la fenêtre WND
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      //--- redessine le graphique pour refléter immédiatement les changements
      ChartRedraw(chart_id);
      
      //--- vérifie si l'objet créé est présent
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- Si l'objet est créé, on l'écrit dans le journal,
      //--- attend 1 seconde et supprime l'objet graphique créé
      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);
      
      //--- redessine le graphique pour refléter immédiatement les changements
      ChartRedraw(chart_id);
     }
   /*
   résultat :
   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
   */
  }