ObjectGetValueByTime

The function returns the price value for the specified time value of the specified object.

double  ObjectGetValueByTime(
   long      chart_id,     // chart identifier
   string    name,         // object name
   datetime  time,         // Time
   int       line_id       // Line number
   );

Parameters

chart_id

[in]  Chart identifier. 0 means the current chart.

name

[in]  Name of the object.

time

[in]  Time value.

line_id

[in]  Line ID.

Return Value

The price value for the specified time value of the specified object.

Note

The function uses a synchronous call, which means that the function waits for the execution of all commands that have been enqueued for this chart prior to its call, that is why this function can be time consuming. This feature should be taken into account when working with a large number of objects on a chart.

An object can have several values in one price coordinate, therefore it is necessary to specify the line number. This function applies only to the following objects:

  • Trendline (OBJ_TREND)
  • Trendline by angle (OBJ_TRENDBYANGLE)
  • Gann line (OBJ_GANNLINE)
  • Equidistant channel (OBJ_CHANNEL) - 2 lines
  • Linear regression channel (OBJ_REGRESSION) - 3 lines
  • Standard deviation channel (OBJ_STDDEVCHANNEL) - 3 lines
  • Arrowed line (OBJ_ARROWED_LINE)

 

Example:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetValueByTime" // graphical object name
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- chart ID, symbol
   long   chart_id=ChartID();
   string symbol=ChartSymbol(chart_id);
 
   long bar1=0bar2=0visible=0;
//--- get the first bar of the chart visible on the left
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
//--- number of visible bars on the chart
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
 
//--- adjust the obtained values and calculate the index of the first bar visible on the right
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
 
//--- build an equidistant channel from the High of the left visible bar to the Low of the right one
   if(!CreateChannel(chart_id, (int)bar1, (int)bar2))
      return;
   
   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   
//--- in a loop from the left visible bar to the right visible bar on the chart
//--- get the price value for the loop bar time of each equidistant channel line.
//--- display the received price for each line in the journal
   for(int i=(int)bar1i>=bar2 && !IsStopped(); i--)
     {
      datetime time=GetTime(symboli);
      if(time==0)
         continue;
      
      string time_str=TimeToString(time);
      double value0=ObjectGetValueByTime(chart_idOBJ_NAMEtime0);
      double value1=ObjectGetValueByTime(chart_idOBJ_NAMEtime1);
      string idx=StringFormat("%03d"i);
      PrintFormat("[%s] For time %s the price value at 0 line of the object: %.*f, at line 1: %.*f",
                  idxTimeToString(time), digitsvalue0digitsvalue1);
     }
   
//--- wait 5 seconds and clean up
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   result:
   [114For time 2025.01.02 05:00 the price value at 0 line of the object1.03732at line 11.03393
   [113For time 2025.01.02 05:30 the price value at 0 line of the object1.03694at line 11.03355
   [112For time 2025.01.02 06:00 the price value at 0 line of the object1.03657at line 11.03318
   [111For time 2025.01.02 06:30 the price value at 0 line of the object1.03619at line 11.03280
   [110For time 2025.01.02 07:00 the price value at 0 line of the object1.03581at line 11.03242
   [109For time 2025.01.02 07:30 the price value at 0 line of the object1.03544at line 11.03205
   [108For time 2025.01.02 08:00 the price value at 0 line of the object1.03506at line 11.03167
   [107For time 2025.01.02 08:30 the price value at 0 line of the object1.03468at line 11.03129
   [106For time 2025.01.02 09:00 the price value at 0 line of the object1.03431at line 11.03092
   [105For time 2025.01.02 09:30 the price value at 0 line of the object1.03393at line 11.03054
   [104For time 2025.01.02 10:00 the price value at 0 line of the object1.03355at line 11.03016
   [103For time 2025.01.02 10:30 the price value at 0 line of the object1.03318at line 11.02979
   [102For time 2025.01.02 11:00 the price value at 0 line of the object1.03280at line 11.02941
   [101For time 2025.01.02 11:30 the price value at 0 line of the object1.03242at line 11.02903
   [100For time 2025.01.02 12:00 the price value at 0 line of the object1.03205at line 11.02866
   [099For time 2025.01.02 12:30 the price value at 0 line of the object1.03167at line 11.02828
   [098For time 2025.01.02 13:00 the price value at 0 line of the object1.03129at line 11.02790
   [097For time 2025.01.02 13:30 the price value at 0 line of the object1.03092at line 11.02753
   [096For time 2025.01.02 14:00 the price value at 0 line of the object1.03054at line 11.02715
   [095For time 2025.01.02 14:30 the price value at 0 line of the object1.03016at line 11.02677
   [094For time 2025.01.02 15:00 the price value at 0 line of the object1.02979at line 11.02640
   [093For time 2025.01.02 15:30 the price value at 0 line of the object1.02941at line 11.02602
   [092For time 2025.01.02 16:00 the price value at 0 line of the object1.02903at line 11.02564
   [091For time 2025.01.02 16:30 the price value at 0 line of the object1.02866at line 11.02527
   [090For time 2025.01.02 17:00 the price value at 0 line of the object1.02828at line 11.02489
   [089For time 2025.01.02 17:30 the price value at 0 line of the object1.02790at line 11.02451
   [088For time 2025.01.02 18:00 the price value at 0 line of the object1.02753at line 11.02414
   [087For time 2025.01.02 18:30 the price value at 0 line of the object1.02715at line 11.02376
   [086For time 2025.01.02 19:00 the price value at 0 line of the object1.02677at line 11.02338
   [085For time 2025.01.02 19:30 the price value at 0 line of the object1.02640at line 11.02301
   [084For time 2025.01.02 20:00 the price value at 0 line of the object1.02602at line 11.02263
   */
  }
//+------------------------------------------------------------------+
//| Return the time of the bar specified by index                    |
//+------------------------------------------------------------------+
datetime GetTime(const string symbol_nameconst int index)
  {
   if(index<0)
      return(0);
   datetime array[1];
   ResetLastError();
   if(CopyTime(symbol_namePERIOD_CURRENTindex1array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(0);
     }
   return(array[0]);
  }
//+--------------------------------------------------------------------------------------------+
//| Construct an equidistant channel from the High of the left bar to the Low of the right bar |
//+--------------------------------------------------------------------------------------------+
bool CreateChannel(const long chart_idconst int bar1const int bar2)
  {
   long     visible=0;
   datetime time1 =0time2 =0;
   double   price1=0price2=0;
 
//--- chart symbol
   string symbol=ChartSymbol(chart_id);
   
//--- get the time of the first bar visible on the left of the chart
   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];
   
//--- get the time of the first bar of the chart visible on the right
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar21time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time2=time_array[0];
   
//--- get the High price of the first bar visible on the left of the chart
   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];
   
//--- get the Low price of the first bar visible on the right of the chart
   if(CopyLow(symbolPERIOD_CURRENT, (int)bar21price_array)!=1)
     {
      PrintFormat("%s: CopyLow() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price2=price_array[0];
   
//--- calculate the price range of the chart in points
//--- for an equidistant channel, the distance of the second line will be 1/3 of the price range
   double range=price1-price2;
   double distance=range*0.3;
   
//--- at the calculated coordinates, create a graphical object - an equidistant channel
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_CHANNEL0time1price1time2price2time1price1-distance))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- update the chart and return 'true'
   ChartRedraw(chart_id);
   return(true);
  }

See also

Object Types