ObjectGetDouble

Karşılık gelen nesne özelliğinin değerine dönüş yapar. Nesne özelliği double tipinde olmalıdır. Fonksiyonun iki çeşidi vardır.

1. Hemen, özellik değerine dönüş yapar.

double  ObjectGetDouble(
   long                            chart_id,          // çizelge tanımlayıcı
   string                          name,              // nesne ismi
   ENUM_OBJECT_PROPERTY_DOUBLE     prop_id,           // özellik tanımlayıcı
   int                             prop_modifier=0    // istenmesi durumunda, özellik şekillendiricisi
   );

2. Fonksiyonun başarı durumuna göre, 'true' veya 'false' değerine dönüş yapar. Başarılı sonuç mevcutsa, son parametreye referansla geçirilen bir değişkene yerleştirilir.

bool  ObjectGetDouble(
   long                            chart_id,          // çizelge tanımlayıcı
   string                          name,              // nesne ismi
   ENUM_OBJECT_PROPERTY_DOUBLE     prop_id,           // özellik tanımlayıcı
   int                             prop_modifier,     // özellik şekillendirici
   double&                         double_var         // özellik değerini burada kabul ediyoruz
   );

Parametreler

chart_id

[in]  Çizelge tanımlayıcısı. 0, mevcut çizelge anlamına gelir.

name

[in]  Nesne ismi.

prop_id

[in]  Nesne özelliğinin tanıtıcısı. Bu değer ENUM_OBJECT_PROPERTY_DOUBLE sayımının değerlerinden biri olabilir.

prop_modifier

[in]  Belirtilen özelliğin şekillendiricisi. İlk versiyonda, varsayılan şekillendirici değeri sıfıra eşittir. Çoğu özellik için bir şekillendiriciye gerek duyulmaz. Fibonacci araçlarındaki ve Andrews Dirgenindeki seviye numarasını gösterir. Seviyelerin numaralandırılmasına sıfırdan başlanır.

double_var

[out]  İstenen özellik değerini alacak olan double tipli değişken.

Dönüş değeri

İlk çağrı versiyonu için, double tipli bir değer.

İkinci durumda, eğer özellik mevcutsa ve değer double_var değişkenine yerleştirilmişse 'true' değerine, aksi durumda 'false' değerine dönüş yapar. Hata ile ilgili daha fazla bilgi için GetLastError() fonksiyonunu çağırın.

Not

Fonksiyon, eşzamanlı bir çağrı kullanır; bu, fonksiyonun çağrı öncesinde bu grafik için yerine getirilmiş tüm komutların yürütülmesini beklediği anlamına gelir, bu nedenle bu fonksiyon çok zaman alıcı olabilir. Bu özellik, bir grafikte çok sayıda nesneyle çalışırken dikkate alınmalıdır.

 

Örnek:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetDouble"   // nesne adı
#define   WND        0                       // grafik alt penceresi
#define   EXT        " (%$)"                 // fiyat değerlerini seviyelerde görüntülemek için biçim dizgesi
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- mevcut grafik kimliği, grafik sembolü ve sembol basamağı
   long   chart_idChartID();
   string symbol  = ChartSymbol(chart_id);
   int    digits  = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- görünür grafiğin en yüksek ve en düşük fiyatlarında “Fibonacci seviyeleri” grafiksel nesnesi oluştur
   if(!CreateFibo(chart_id))
      return;
      
//--- nesne seviyesi sayısı
   int total=(int)ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_LEVELS);
   double value =0;
   double price0=0;
   double price1=0;
   
//--- çapa noktası fiyatları
   price0=ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_PRICE0);
   price1=ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_PRICE1);
   
//--- nesne seviyelerinin sayısına göre bir döngü içinde
   for(int i=0i<totali++)
     {
      //--- mevcut seviye için ayarlanan değeri al
      ResetLastError();
      if(!ObjectGetDouble(chart_idOBJ_NAMEOBJPROP_LEVELVALUEivalue))
        {
         Print("ObjectGetDouble() failed. Error "GetLastError());
         return;
        }
      
      //--- nesnenin en yüksek ve en düşük bağlanma fiyatlarını ve fiyat değeri cinsinden aralarındaki mesafeyi al
      double max=fmax(price0price1);
      double min=fmin(price0price1);
      double range=max-min;
      
      //--- nesnenin mevcut seviyesi için fiyat değerini hesapla
      double level_price=min+range*value;
      
      //--- seviye için rengi, grafiğin hem koyu hem de açık arka planlarında görülebilecek şekilde ayarla
      ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_LEVELCOLORiclrRed);
      
      //--- fiyat değerinin seviye değeriyle birlikte görüntülenmesi için seviye için bir biçim dizgesi ayarla
      string level_text=ObjectGetString(chart_idOBJ_NAMEOBJPROP_LEVELTEXTi);
      if(StringFind(level_textEXT)<0)
        {
         level_text+=EXT;
         ObjectSetString(chart_idOBJ_NAMEOBJPROP_LEVELTEXTilevel_text);
        }
      
      //--- seviye numarasını ve verilerini - seviye değeri ve fiyatı - günlükte yazdır
      PrintFormat("Fibo level [%d] value: %.3f,  price: %.*f"ivaluedigitslevel_price);
     }
   /*
   sonuç:
   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
   */
  }
//+------------------------------------------------------------------+
//| Belirtilen grafikte Fibo seviyeleri grafiksel nesnesi oluştur |
//+------------------------------------------------------------------+
bool CreateFibo(const long chart_id)
  {
//--- Fibo seviyelerini grafikte görünen en yüksek fiyat değerinden en düşük fiyat değerine kadar çiz ve bunları al
   double   price_high=0price_low=0;
   datetime time_high =0time_low =0;
   
   if(!GetChartExtremums(chart_idprice_highprice_lowtime_hightime_low))
      return(false);
 
//--- bulunan fiyat/zaman koordinatları üzerinde Fibo seviyeleri nesnesini oluştur
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_FIBOWNDtime_highprice_hightime_lowprice_low))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- her şey yolunda - grafiği güncelle ve ‘true’ geri döndür
   ChartRedraw();
   return(true);
  }
//+------------------------------------------------------------------+
//| Grafikteki maksimum, minimum fiyatları ve zamanlarını geri döndür|
//+------------------------------------------------------------------+
bool GetChartExtremums(const long chart_iddouble &price_highdouble &price_lowdatetime &time_highdatetime &time_low)
  {
//--- değişkenleri sıfırla
   price_high=price_low=0;
   time_high =time_low =0;
//--- grafik sembolü
   string symbol = ChartSymbol(chart_id);
 
//--- ilk görünür çubuğun numarasına ve grafikteki çubuk sayısına göre kopyalanan zaman serisi aralığının başlangıcını hesapla
   int first = (int)ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR);
   int count = (int)ChartGetInteger(chart_idCHART_VISIBLE_BARS);
   int start = first+1-count;
   
//--- zaman serilerinin kopyalanacağı diziler
   double   array_high[];
   double   array_low[];
   datetime array_time[];
   int      index;
   
//--- üç zaman serisini ‘count’ miktarında ve 'start'tan başlayarak dizilere kopyala
   ResetLastError();
   if(CopySeries(symbolPERIOD_CURRENTstartcountCOPY_RATES_TIME|COPY_RATES_HIGH|COPY_RATES_LOWarray_timearray_higharray_low)!=count)
     {
      PrintFormat("%s: CopySeries() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   
//--- array_high dizisinde en yüksek fiyat indeksini ara
   index=ArrayMaximum(array_high);
   if(index<0)
     {
      PrintFormat("%s: ArrayMaximum() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- görünür grafikteki en yüksek fiyatı ve bu fiyatın bulunduğu çubuğun zaman değerini hatırla
   price_high=array_high[index];
   time_high=array_time[index];
   
//--- array_low dizisinde en düşük fiyat indeksini ara
   index=ArrayMinimum(array_low);
   if(index<0)
     {
      PrintFormat("%s: ArrayMinimum() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- görünür grafikteki en düşük fiyatı ve bu fiyatın bulunduğu çubuğun zaman değerini hatırla
   price_low=array_low[index];
   time_low=array_time[index];
   
//--- her şey yolunda
   return(true);
  }