ObjectGetValueByTime

Nesnenin belirtilen zaman değeri için fiyat değerine dönüş yapar.

double  ObjectGetValueByTime(
   long      chart_id,     // çizelge tanımlayıcı
   string    name,         // nesne ismi
   datetime  time,         // Zaman
   int       line_id       // Çizgi numarası
   );

Parametreler

chart_id

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

name

[in]  Nesne ismi.

time

[in]  Zaman değeri.

line_id

[in]  Çizgi tanımlayıcı.

Dönüş değeri

Belirtilen nesnenin belirtilen zaman değeri için fiyat değerine dönüş yapar.

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.

Bir nesne, bir fiyat koordinatında birden fazla değere sahip olabilir, bu yüzden çizgi numarasının da belirtilmesi gerekir. Bu fonksiyon sadece şu nesnelere uygulanır:

  • Trend çizgisi (OBJ_TREND)
  • Açılı trend çizgisi (OBJ_TRENDBYANGLE)
  • Gann çizgisi (OBJ_GANNLINE)
  • Eşit aralıklı kanal (OBJ_CHANNEL) - 2 çizgi
  • Doğrusal regresyon kanalı (OBJ_REGRESSION) - 3 çizgi
  • Standart sapma kanalı (OBJ_STDDEVCHANNEL) - 3 çizgi
  • Oklu çizgi (OBJ_ARROWED_LINE)

 

Örnek:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetValueByTime" // grafiksel nesne adı
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- grafik kimliği, sembol
   long   chart_id=ChartID();
   string symbol=ChartSymbol(chart_id);
 
   long bar1=0, bar2=0, visible=0;
//--- solda görünen grafiğin ilk çubuğunu al
   ResetLastError();
   if(!ChartGetInteger(chart_id, CHART_FIRST_VISIBLE_BAR, 0, bar1))
     {
      Print("ChartGetInteger() failed. Error ", GetLastError());
      return;
     }
//--- grafikteki görünür çubuk sayısı
   if(!ChartGetInteger(chart_id, CHART_VISIBLE_BARS, 0, visible))
     {
      Print("ChartGetInteger() failed. Error ", GetLastError());
      return;
     }
 
//--- elde edilen değerleri ayarla ve sağda görünen ilk çubuğun indeksini hesapla
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
 
//--- soldaki görünür çubuğun Yüksek değerinden sağdaki çubuğun Düşük değerine bir eşit uzaklıklı kanal oluştur
   if(!CreateChannel(chart_id, (int)bar1, (int)bar2))
      return;
   
   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   
//--- grafikte sol görünür çubuktan sağ görünür çubuğa kadar bir döngüde,
//--- eşit uzaklıklı kanalın her çizgisinin döngü çubuğu zamanı için fiyat değerini al.
//--- her çizgi için alınan fiyatı günlükte görüntüle
   for(int i=(int)bar1; i>=bar2 && !IsStopped(); i--)
     {
      datetime time=GetTime(symbol, i);
      if(time==0)
         continue;
      
      string time_str=TimeToString(time);
      double value0=ObjectGetValueByTime(chart_id, OBJ_NAME, time, 0);
      double value1=ObjectGetValueByTime(chart_id, OBJ_NAME, time, 1);
      string idx=StringFormat("%03d", i);
      PrintFormat("[%s] For time %s the price value at 0 line of the object: %.*f, at line 1: %.*f",
                  idx, TimeToString(time), digits, value0, digits, value1);
     }
   
//--- 5 saniye bekle ve temizle
   Sleep(5000);
   ObjectDelete(chart_id, OBJ_NAME);
   ChartRedraw(chart_id);
   /*
   sonuç:
   [114] For time 2025.01.02 05:00 the price value at 0 line of the object: 1.03732, at line 1: 1.03393
   [113] For time 2025.01.02 05:30 the price value at 0 line of the object: 1.03694, at line 1: 1.03355
   [112] For time 2025.01.02 06:00 the price value at 0 line of the object: 1.03657, at line 1: 1.03318
   [111] For time 2025.01.02 06:30 the price value at 0 line of the object: 1.03619, at line 1: 1.03280
   [110] For time 2025.01.02 07:00 the price value at 0 line of the object: 1.03581, at line 1: 1.03242
   [109] For time 2025.01.02 07:30 the price value at 0 line of the object: 1.03544, at line 1: 1.03205
   [108] For time 2025.01.02 08:00 the price value at 0 line of the object: 1.03506, at line 1: 1.03167
   [107] For time 2025.01.02 08:30 the price value at 0 line of the object: 1.03468, at line 1: 1.03129
   [106] For time 2025.01.02 09:00 the price value at 0 line of the object: 1.03431, at line 1: 1.03092
   [105] For time 2025.01.02 09:30 the price value at 0 line of the object: 1.03393, at line 1: 1.03054
   [104] For time 2025.01.02 10:00 the price value at 0 line of the object: 1.03355, at line 1: 1.03016
   [103] For time 2025.01.02 10:30 the price value at 0 line of the object: 1.03318, at line 1: 1.02979
   [102] For time 2025.01.02 11:00 the price value at 0 line of the object: 1.03280, at line 1: 1.02941
   [101] For time 2025.01.02 11:30 the price value at 0 line of the object: 1.03242, at line 1: 1.02903
   [100] For time 2025.01.02 12:00 the price value at 0 line of the object: 1.03205, at line 1: 1.02866
   [099] For time 2025.01.02 12:30 the price value at 0 line of the object: 1.03167, at line 1: 1.02828
   [098] For time 2025.01.02 13:00 the price value at 0 line of the object: 1.03129, at line 1: 1.02790
   [097] For time 2025.01.02 13:30 the price value at 0 line of the object: 1.03092, at line 1: 1.02753
   [096] For time 2025.01.02 14:00 the price value at 0 line of the object: 1.03054, at line 1: 1.02715
   [095] For time 2025.01.02 14:30 the price value at 0 line of the object: 1.03016, at line 1: 1.02677
   [094] For time 2025.01.02 15:00 the price value at 0 line of the object: 1.02979, at line 1: 1.02640
   [093] For time 2025.01.02 15:30 the price value at 0 line of the object: 1.02941, at line 1: 1.02602
   [092] For time 2025.01.02 16:00 the price value at 0 line of the object: 1.02903, at line 1: 1.02564
   [091] For time 2025.01.02 16:30 the price value at 0 line of the object: 1.02866, at line 1: 1.02527
   [090] For time 2025.01.02 17:00 the price value at 0 line of the object: 1.02828, at line 1: 1.02489
   [089] For time 2025.01.02 17:30 the price value at 0 line of the object: 1.02790, at line 1: 1.02451
   [088] For time 2025.01.02 18:00 the price value at 0 line of the object: 1.02753, at line 1: 1.02414
   [087] For time 2025.01.02 18:30 the price value at 0 line of the object: 1.02715, at line 1: 1.02376
   [086] For time 2025.01.02 19:00 the price value at 0 line of the object: 1.02677, at line 1: 1.02338
   [085] For time 2025.01.02 19:30 the price value at 0 line of the object: 1.02640, at line 1: 1.02301
   [084] For time 2025.01.02 20:00 the price value at 0 line of the object: 1.02602, at line 1: 1.02263
   */
  }
//+------------------------------------------------------------------+
//| İndeks ile belirtilen çubuğun zamanını geri döndür               |
//+------------------------------------------------------------------+
datetime GetTime(const string symbol_name, const int index)
  {
   if(index<0)
      return(0);
   datetime array[1];
   ResetLastError();
   if(CopyTime(symbol_name, PERIOD_CURRENT, index, 1, array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__, GetLastError());
      return(0);
     }
   return(array[0]);
  }
//+--------------------------------------------------------------------------------------------+
//| Sol çubuğun Yüksek değerinden sağ çubuğun Düşük değerine bir eşit uzaklıklı kanal oluştur |
//+--------------------------------------------------------------------------------------------+
bool CreateChannel(const long chart_id, const int bar1, const int bar2)
  {
   long     visible=0;
   datetime time1 =0, time2 =0;
   double   price1=0, price2=0;
 
//--- grafik sembolü
   string symbol=ChartSymbol(chart_id);
   
//--- grafiğin solunda görünen ilk çubuğun zamanını al
   ResetLastError();
   datetime time_array[1];
   if(CopyTime(symbol, PERIOD_CURRENT, (int)bar1, 1, time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__, GetLastError());
      return(false);
     }
   time1=time_array[0];
   
//--- grafiğin sağında görünen ilk çubuğun zamanını al
   if(CopyTime(symbol, PERIOD_CURRENT, (int)bar2, 1, time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__, GetLastError());
      return(false);
     }
   time2=time_array[0];
   
//--- grafiğin solunda görünen ilk çubuğun Yüksek fiyatını al
   double price_array[];
   if(CopyHigh(symbol, PERIOD_CURRENT, (int)bar1, 1, price_array)!=1)
     {
      PrintFormat("%s: CopyHigh() failed. Error %d",__FUNCTION__, GetLastError());
      return(false);
     }
   price1=price_array[0];
   
//--- grafiğin sağında görünen ilk çubuğun Düşük fiyatını al
   if(CopyLow(symbol, PERIOD_CURRENT, (int)bar2, 1, price_array)!=1)
     {
      PrintFormat("%s: CopyLow() failed. Error %d",__FUNCTION__, GetLastError());
      return(false);
     }
   price2=price_array[0];
   
//--- grafiğin fiyat aralığını puan cinsinden hesapla
//--- bir eşit uzaklıklı kanal için, ikinci çizginin mesafesi fiyat aralığının 1/3'ü olacaktır
   double range=price1-price2;
   double distance=range*0.3;
   
//--- hesaplanan koordinatlarda bir grafiksel nesne oluştur - eşit uzaklıklı kanal
   if(!ObjectCreate(chart_id, OBJ_NAME, OBJ_CHANNEL, 0, time1, price1, time2, price2, time1, price1-distance))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__, GetLastError());
      return(false);
     }
     
//--- grafiği güncelle ve ‘true’ geri döndür
   ChartRedraw(chart_id);
   return(true);
  }

 

Ayrıca Bakınız

Nesne Tipleri