ObjectGetDouble

Gibt den Wert der entsprechenden Eigenschaft des Objekt zurücks. Eigenschaft des Objekts muss des Typs double sein.  Es gibt 2 Varianten der Funktion.

1. Gibt den Wert der Eigenschaft sofort zurück.

double  ObjectGetDouble(
   long                            chart_id,          // Identifikator des Charts
   string                          name,              // Objektname
   ENUM_OBJECT_PROPERTY_DOUBLE     prop_id,           // Identifikator der Eigenschaft
   int                             prop_modifier=0    // Modifikator der Eigenschaft wenn erforderlich 
   );

2. Gibt true oder false zurück abhängig davon, ob die Funktion erfolgreich durchgeführt wird. Im Erfolgsfall wird die Funktion in eine Empfangsvariable gesetzt, die durch Referenz vom letzten Parameter übertragen wird.

bool  ObjectGetDouble(
   long                            chart_id,          // Identifikator des Charts
   string                          name,              // Objektname
   ENUM_OBJECT_PROPERTY_DOUBLE     prop_id,           // Identifikator der Eigenschaft
   int                             prop_modifier,     // Modifikator der Eigenschaft
   double&                         double_var         // hier erhalten wir den Wert der Eigenschaft 
   );

Parameter

chart_id

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

name

[in]  Objektname.

prop_id

[in] Identifikator der Eigenschaft des Objekts. Wert kann einer der Enumerationswerte ENUM_OBJECT_PROPERTY_DOUBLE sein.

prop_modifier

[in]  Modifikator der angegebenen Eigenschaft. Für die erste Variante des Aufrufs ist der Default-Wert des Modifikators 0. Die meisten Eigenschaften erfordern keinen Modifikator. Bedeutet die Standnummer in Fibonacci Werkzeuge und in Andrew's Pitchfork. Nummerierung beginnt bei Null.

double_var

[out]  Variable des Typs double, die den Wert der angeforderten Eigenschaft annimmt.

Rückgabewert

Wert des Typs double für die erste Variante des Aufrufes.

für die zweite Variante des Aufrufs gibt true zurück, wenn diese Eigenschaft unterstuetzt wird und der Wert in die Variable double_var gesetzt wurde, anderenfalls gibt false zurück. Für Erhaltung der weiteren Information über den Fehler, muss die Funktion GetLastError() aufgerufen werden.

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.

 

Beispiel:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetDouble"   // Objekt-Name
#define   WND        0                       // Unterfenster des Charts
#define   EXT        " (%$)"                 // Formatierungszeichenfolge für die Anzeige von Preiswerten auf Ebenen
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- aktuelle Chart-ID, Chart-Symbol und Symbol-Dezimalstelle
   long   chart_idChartID();
   string symbol  = ChartSymbol(chart_id);
   int    digits  = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- Erstellen des grafischen Objekts "Fibonacci-Levels" zu den Höchst- und Tiefstpreisen des sichtbaren Charts
   if(!CreateFibo(chart_id))
      return;
      
//--- Anzahl der Objektebenen
   int total=(int)ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_LEVELS);
   double value =0;
   double price0=0;
   double price1=0;
   
//--- Ankerpunktpreise
   price0=ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_PRICE0);
   price1=ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_PRICE1);
   
//--- in einer Schleife über die Anzahl der Objektebenen
   for(int i=0i<totali++)
     {
      //--- den für die aktuelle Ebene festgelegten Wert abrufen
      ResetLastError();
      if(!ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_LEVELVALUEivalue))
        {
         Print("ObjectGetDouble() failed. Error "GetLastError());
         return;
        }
      
      //--- Ermitteln von Höchst- und Tiefstpreis der Objektbindung und den Abstand zwischen ihnen im Preiswert
      double max=fmax(price0price1);
      double min=fmin(price0price1);
      double range=max-min;
      
      //--- Farbe für die Ebene festlegen, damit sie sowohl auf dunklen als auch auf hellen Hintergründen des Charts sichtbar ist
      double level_price=min+range*value;
      
 //--- Festlegen einer Formatzeichenfolge für das Niveau, sodass dessen Preiswert zusammen mit dem Niveauwert angezeigt wird
      ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_LEVELCOLORiclrRed);
      
      //--- einen Formatstring für das Niveau festlegen, damit dessen Preiswert zusammen mit dem Level-Wert angezeigt wird
      string level_text=ObjectGetString(chart_idOBJ_NAMEOBJPROP_LEVELTEXTi);
      if(StringFind(level_textEXT)<0)
        {
         level_text+=EXT;
         ObjectSetString(chart_idOBJ_NAMEOBJPROP_LEVELTEXTilevel_text);
        }
      
      //--- Ausgabe der Levelnummer und die dazugehörigen Daten – den Levelwert und den Preis – im Journal
      PrintFormat("Fibo level [%d] value: %.3f,  price: %.*f"ivaluedigitslevel_price);
     }
   /*
   Ergebnis:
   Fibo level [0value0.000,  price0.61989
   Fibo level [1value0.236,  price0.62533
   Fibo level [2value0.382,  price0.62869
   Fibo level [3value0.500,  price0.63140
   Fibo level [4value0.618,  price0.63412
   Fibo level [5value1.000,  price0.64292
   Fibo level [6value1.618,  price0.65715
   Fibo level [7value2.618,  price0.68018
   Fibo level [8value4.236,  price0.71745
   */
  }
//+------------------------------------------------------------------+
//| Erstellen des grafischen Objekts "Fibo-Levels" auf dem Chart   |
//+------------------------------------------------------------------+
bool CreateFibo(const long chart_id)
  {
//--- Zeichnen und abrufen der Fibonacci-Niveaus vom höchsten bis zum niedrigsten sichtbaren Preiswert im Chart
   double   price_high=0price_low=0;
   datetime time_high =0time_low =0;
   
   if(!GetChartExtremums(chart_idprice_highprice_lowtime_hightime_low))
      return(false);
 
//--- Erstellen des Fibo-Levels-Objekts anhand der gefundenen Preis-/Zeitkoordinaten.
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_FIBOWNDtime_highprice_hightime_lowprice_low))
     {
      PrintFormat("%s: ObjectCreate() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- alles in Ordnung – Chart aktualisieren und "true" zurückgeben
   ChartRedraw();
   return(true);
  }
//+------------------------------------------------------------------+
//| Gibt Höchst- und Tiefstpreise des Charts & deren Zeitpunkt zurück|
//+------------------------------------------------------------------+
bool GetChartExtremums(const long chart_iddouble &price_highdouble &price_lowdatetime &time_highdatetime &time_low)
  {
//--- Variablen zurücksetzen
   price_high=price_low=0;
   time_high =time_low =0;
//--- Chart-Symbol
   string symbol = ChartSymbol(chart_id);
 
//--- Berechnen des Beginns des Bereichs der kopierten Zeitreihe basierend auf der Nummer des ersten sichtbaren Balkens und der Anzahl der Balken im Chart
   int first = (int)ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR);
   int count = (int)ChartGetInteger(chart_idCHART_VISIBLE_BARS);
   int start = first+1-count;
   
//--- Arrays, in die Zeitreihen kopiert werden sollen
   double   array_high[];
   double   array_low[];
   datetime array_time[];
   int      index;
   
//--- Kopiere drei Zeitreihen in Arrays in der Menge "count" und beginnend bei "start"
   ResetLastError();
   if(CopySeries(symbolPERIOD_CURRENTstartcountCOPY_RATES_TIME|COPY_RATES_HIGH|COPY_RATES_LOWarray_timearray_higharray_low)!=count)
     {
      PrintFormat("%s: CopySeries() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   
//--- Suche nach dem maximalen Preisindex im Array array_high
   index=ArrayMaximum(array_high);
   if(index<0)
     {
      PrintFormat("%s: ArrayMaximum() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- Merke dir den höchsten Preis auf dem sichtbaren Chart und den Zeitwert des Balkens, auf dem sich dieser Preis befindet
   price_high=array_high[index];
   time_high=array_time[index];
   
//--- Suche nach dem Mindestpreisindex im Array array_low
   index=ArrayMinimum(array_low);
   if(index<0)
     {
      PrintFormat("%s: ArrayMinimum() fehlgeschlagen. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- Merke dir den niedrigsten Preis auf dem sichtbaren Chart und den Zeitwert des Balkens, auf dem sich dieser Preis befindet
   price_low=array_low[index];
   time_low=array_time[index];
   
//--- alles in Ordnung
   return(true);
  }