ObjectGetTimeByValue

Retourne la valeur du temps pour l'objet indiqué avec son prix.

datetime  ObjectGetTimeByValue(
   long    chart_id,     // identificateur du graphique
   string  name,         // nom de l'objet
   double  value,        // prix
   int     line_id       // ligne
   );

Paramètres

chart_id

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

name

[in] Le nom de l'objet.

value

[in]  La valeur du prix.

line_id

[in]  L'identificateur de la ligne.

Valeur de Retour

La valeur du temps pour la valeur indiquée du prix de l'objet indiqué.

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.

Puisqu'un objet à une coordonnée de prix peut avoir plusieurs valeurs, il est nécessaire d'indiquer le numéro de la ligne. Cette fonction est employée seulement pour les objets suivants :

  • La ligne de tendance (OBJ_TREND)
  • La ligne de tendance selon un angle (OBJ_TRENDBYANGLE)
  • Le ligne de Gann (OBJ_GANNLINE)
  • Le canal équidistant (OBJ_CHANNEL) - 2 lignes
  • Le canal de régression linéaire (OBJ_REGRESSION) - 3 lignes
  • Le canal d'écart type (OBJ_STDDEVCHANNEL) - 3 lignes
  • La ligne flêchée (OBJ_ARROWED_LINE)

 

Exemple :

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetTimeByValue" // nom de l'objet graphique
#define   STEP       100                        // pas (step) du prix
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ID, symbole
   long   chart_id=ChartID();
   string chart_symbol=ChartSymbol(chart_id);
   
//--- récupère la valeur du point du symbole du graphique
   double point=SymbolInfoDouble(chart_symbolSYMBOL_POINT);
   if(point==0)
     {
      PrintFormat("Failed to get the Point value of the \"%s\" symbol. Error %d"chart_symbolGetLastError());
      return;
     }
     
//--- crée un canal équidistant entre le plus haut de la barre visible de gauche et le plus bas de celle de droite.
   if(!CreateChannel(chart_id))
      return;
   
//--- valeurs maximales et minimales du graphique, décimales du symbole du graphique
   double chart_max=ChartGetDouble(chart_idCHART_PRICE_MAX);
   double chart_min=ChartGetDouble(chart_idCHART_PRICE_MIN);
   int    digits=(int)SymbolInfoInteger(chart_symbolSYMBOL_DIGITS);
 
//--- tant que le prix calculé est supérieur à la valeur minimale du prix du graphique,
//--- parcours les prix du graphique en boucle avec STEP et récupère la valeur temps
//--- pour la valeur de prix calculée de chaque ligne du canal équidistant.
//--- écrit l'heure de réception de chaque ligne dans le journal
   int index=0;
   double price=chart_max;
   do
     {
      price=chart_max-STEP*index*point;
      datetime time0=ObjectGetTimeByValue(chart_idOBJ_NAMEprice0);
      datetime time1=ObjectGetTimeByValue(chart_idOBJ_NAMEprice1);
      string   time0_str=(time0>0 ? TimeToString(time0) : "No value at this price");
      string   time1_str=(time1>0 ? TimeToString(time1) : "No value at this price");
      string   idx=StringFormat("%02d"index);
      PrintFormat("[%s] For price %.*f the time value at line 0: %s, at line 1: %s"idxdigitspricetime0_strtime1_str);
      index++;
     }
   while(!IsStopped() && price>=chart_min);
   
//--- attends 5 secondes et nettoie tout
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   résultat :
   [00For price 1.26110 the time value at line 0No value at this price,  at line 1No value at this price
   [01For price 1.26010 the time value at line 02024.12.30 17:00at line 1No value at this price
   [02For price 1.25910 the time value at line 02024.12.30 22:30at line 1No value at this price
   [03For price 1.25810 the time value at line 02024.12.31 04:00at line 12024.12.30 16:30
   [04For price 1.25710 the time value at line 02024.12.31 10:00at line 12024.12.30 22:00
   [05For price 1.25610 the time value at line 02024.12.31 15:30at line 12024.12.31 03:30
   [06For price 1.25510 the time value at line 02024.12.31 21:00at line 12024.12.31 09:00
   [07For price 1.25410 the time value at line 02025.01.02 03:30at line 12024.12.31 14:30
   [08For price 1.25310 the time value at line 0No value at this priceat line 12024.12.31 20:30
   [09For price 1.25210 the time value at line 0No value at this priceat line 12025.01.02 03:00
   [10For price 1.25110 the time value at line 0No value at this priceat line 1No value at this price
   [11For price 1.25010 the time value at line 0No value at this priceat line 1No value at this price
   [12For price 1.24910 the time value at line 0No value at this priceat line 1No value at this price
   [13For price 1.24810 the time value at line 0No value at this priceat line 1No value at this price
   */
  }
//+--------------------------------------------------------------------------------------------+
//| Construit un canal équidistant du +haut de la barre de gauche au +bas de celle de droite   |
//+--------------------------------------------------------------------------------------------+
bool CreateChannel(const long chart_id=0)
  {
   long     bar1  =0bar2  =0visible=0;
   datetime time1 =0time2 =0;
   double   price1=0price2=0;
 
//--- récupère la première barre du graphique visible à gauche
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      PrintFormat("%s: ChartGetInteger() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- nombre de barres visibles sur le graphique
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      PrintFormat("%s: ChartGetInteger() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
 
//--- ajuste les valeurs obtenues et calcule l'indice de la première barre visible à droite.
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
   
//--- symbole du graphique
   string symbol=ChartSymbol(chart_id);
   
//--- récupère l'heure de la première barre visible sur la gauche du graphique
   ResetLastError();
   datetime time_array[1];
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar11time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time1=time_array[0];
   
//--- récupère l'heure de la première barre du graphique visible sur la droite
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar21time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time2=time_array[0];
   
//--- récupère le prix le Plus Haut de la première barre visible sur la gauche du graphique
   double price_array[];
   if(CopyHigh(symbolPERIOD_CURRENT, (int)bar11price_array)!=1)
     {
      PrintFormat("%s: CopyHigh() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price1=price_array[0];
   
//--- récupère le prix le Plus Bas de la première barre visible sur la droite du graphique
   if(CopyLow(symbolPERIOD_CURRENT, (int)bar21price_array)!=1)
     {
      PrintFormat("%s: CopyLow() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price2=price_array[0];
   
//--- calcule la plage de prix du graphique en points
//--- pour un canal équidistant, la distance de la deuxième ligne sera égale à 1/3 de la plage de prix
   double range=price1-price2;
   double distance=range*0.3;
   
//--- aux coordonnées calculées, crée un objet graphique : le canal équidistant
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_CHANNEL0time1price1time2price2time1price1-distance))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- met à jour le graphique et retourne 'true'
   ChartRedraw(chart_id);
   return(true);
  }

 

Voir aussi

Les types des objets