ObjectGetValueByTime

Gibt den Preizwert für die angegebene Zeit des angegebenen Objekts.

double  ObjectGetValueByTime(
   long      chart_id,     // Identifikator des Charts
   string    name,         // Objektname
   datetime  time,         // Zeit
   int       line_id       // Linie
   );

Parameter

chart_id

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

name

[in]  Objektname.

time

[in]  Zeitwert.

line_id

[in]  Identifikator der Linie.

Rückgabewert

Preiswert für die angegebene Zeit des angegebenen Objekts.

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.

Da das Objekt in einer Preiskoordinate mehrere Werte haben kann, muss man die Nummer der Linie angeben. Diese Funktion ist nur für folgende Objekte anwendbar:

  • Trendlinie (OBJ_TREND)
  • Trendlinie nach der Ecke (OBJ_TRENDBYANGLE)
  • Gann Linie (OBJ_GANNLINE)
  • Abstandsgleicher Kanal (OBJ_CHANNEL) - 2 Linien
  • Kanal auf der linealen Regression (OBJ_REGRESSION) - 3 Linien
  • Kanal der Standardabweichnug (OBJ_STDDEVCHANNEL) - 3 Linien
  • Linie mit der Weiche (OBJ_ARROWED_LINE)

 

Beispiel:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetValueByTime" // Name des grafischen Objekts
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Chart-ID, Symbol
   long   chart_id=ChartID();
   string symbol=ChartSymbol(chart_id);
 
   long bar1=0bar2=0visible=0;
//--- den ersten Balken des Charts links anzeigen
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
//--- Anzahl der sichtbaren Balken im Chart
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
 
//--- Anpassen der erhaltenen Werte und Berechnen des Index des ersten rechts sichtbaren Balkens
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
 
//--- Erstellen eines gleichmäßigen Kanals vom Höchstwert des linken sichtbaren Balkens zum Tiefstwert des rechten Balkens
   if(!CreateChannel(chart_id, (int)bar1, (int)bar2))
      return;
   
   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   
//--- In einer Schleife vom linken sichtbaren Balken bis zum rechten sichtbaren Balken auf dem Chart
//--- den Preiswert für die Zeit des Balkens in der Schleife von jeder äquidistanten Kanallinie abrufen.
//--- Den empfangenen Preis für jede Linie im Journal anzeigen.
   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);
     }
   
//--- 5 Sekunden warten und aufräumen
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   Ergebnis:
   [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
   */
  }
//+------------------------------------------------------------------+
//| Gibt die Zeit des durch den Index angegebenen Balkens zurück     |
//+------------------------------------------------------------------+
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() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(0);
     }
   return(array[0]);
  }
//+--------------------------------------------------------------------------------------------+
//| Erstelle einen gleichmäßigen Kanal vom Hoch des linken Balkens zum Tief des rechten Balkens|
//+--------------------------------------------------------------------------------------------+
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);
   
//--- Zeit des ersten, sichtbaren Balken links im Chart abrufen
   ResetLastError();
   datetime time_array[1];
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar11time_array)!=1)
     {
      PrintFormat("%s: CopyTime() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time1=time_array[0];
   
//--- Ermitteln der Zeit des ersten sichtbaren Balkens rechts auf dem Chart
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar21time_array)!=1)
     {
      PrintFormat("%s: CopyTime() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time2=time_array[0];
   
//--- den Höchstpreis des ersten Balkens links im Chart abrufen
   double price_array[];
   if(CopyHigh(symbolPERIOD_CURRENT, (int)bar11price_array)!=1)
     {
      PrintFormat("%s: CopyHigh() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price1=price_array[0];
   
//--- den Tiefstpreis des ersten sichtbaren Balkens rechts im Chart abrufen
   if(CopyLow(symbolPERIOD_CURRENT, (int)bar21price_array)!=1)
     {
      PrintFormat("%s: CopyLow() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price2=price_array[0];
   
//--- Berechnen der Preisspanne des Charts in Punkten
//--- Bei einem gleichmäßigen Kanal beträgt der Abstand der zweiten Linie 1/3 der Preisspanne
   double range=price1-price2;
   double distance=range*0.3;
   
//--- An den berechneten Koordinaten ein grafisches Objekt erstellen – einen äquidistanten Kanal
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_CHANNEL0time1price1time2price2time1price1-distance))
     {
      PrintFormat("%s: ObjectCreate() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- Aktualisieren des Charts und Zurückgeben von 'true'
   ChartRedraw(chart_id);
   return(true);
  }

 

Sehen Sie auch

Objekttypen