ObjectGetTimeByValue

Gibt Zeitwert für den angegebenen Preiswert des angegebenen Objekts.

datetime  ObjectGetTimeByValue(
   long    chart_id,     // Identifikator des Charts 
   string  name,         // Name des Objekts 
   double  value,        // Preis
   int     line_id       // linie
   );

Parameter

chart_id

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

name

[in]  Name des Objekts.

value

[in]  Preiswert.

line_id

[in]  Identifikator der Linie.

Rückgabewert

Zeitwert für den angegebenen Preiswert 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 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 Standardabweichung  (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   "TestObjectGetTimeByValue" // Name des grafischen Objekts
#define   STEP       100                        // Preisschritt
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ID, Symbol
   long   chart_id=ChartID();
   string chart_symbol=ChartSymbol(chart_id);
   
//--- den Punktwert des Chart-Symbols abrufen
   double point=SymbolInfoDouble(chart_symbolSYMBOL_POINT);
   if(point==0)
     {
 PrintFormat("Der Punktwert des Symbols \"%s\" konnte nicht abgerufen werden. Error %d"chart_symbolGetLastError());
      return;
     }
     
//--- Erstellen eines gleichmäßigen Kanals vom Höchstwert des linken sichtbaren Balkens zum Tiefstwert des rechten Balkens
   if(!CreateChannel(chart_id))
      return;
   
//--- Chart-Maximum und -Minimum, Dezimalstellen des Chart-Symbols
   double chart_max=ChartGetDouble(chart_idCHART_PRICE_MAX);
   double chart_min=ChartGetDouble(chart_idCHART_PRICE_MIN);
   int    digits=(int)SymbolInfoInteger(chart_symbolSYMBOL_DIGITS);
 
//--- solange der berechnete Preis größer ist als der Mindestpreiswert des Charts,
//--- durchlaufe die Chartpreise mit STEP in einer Schleife und erhalte den Zeitwert
//--- für den berechneten Preiswert jeder Linie des äquidistanten Kanals.
//--- gib die empfangene Zeit für jede Linie in das Journal aus
   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);
   
//--- 5 Sekunden warten und aufräumen
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   Ergebnis:
   [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
   */
  }
//+--------------------------------------------------------------------------------------------+
//| Erstelle einen gleichmäßigen Kanal vom Hoch des linken Balkens zum Tief des rechten Balkens|
//+--------------------------------------------------------------------------------------------+
bool CreateChannel(const long chart_id=0)
  {
   long     bar1  =0bar2  =0visible=0;
   datetime time1 =0time2 =0;
   double   price1=0price2=0;
 
//--- den ersten Balken des Charts links anzeigen
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      PrintFormat("%s: ChartGetInteger() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- Anzahl der sichtbaren Balken im Chart
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      PrintFormat("%s: ChartGetInteger() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
 
//--- Anpassen der erhaltenen Werte und Berechnen des Index des ersten rechts sichtbaren Balkens
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
   
//--- 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