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=0bar2=0visible=0;
//--- solda görünen grafiğin ilk çubuğunu al
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      Print("ChartGetInteger() failed. Error "GetLastError());
      return;
     }
//--- grafikteki görünür çubuk sayısı
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      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)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 saniye bekle ve temizle
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   sonuç:
   [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
   */
  }
//+------------------------------------------------------------------+
//| İndeks ile belirtilen çubuğun zamanını geri döndür               |
//+------------------------------------------------------------------+
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() 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_idconst int bar1const int bar2)
  {
   long     visible=0;
   datetime time1 =0time2 =0;
   double   price1=0price2=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(symbolPERIOD_CURRENT, (int)bar11time_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(symbolPERIOD_CURRENT, (int)bar21time_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(symbolPERIOD_CURRENT, (int)bar11price_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(symbolPERIOD_CURRENT, (int)bar21price_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_idOBJ_NAMEOBJ_CHANNEL0time1price1time2price2time1price1-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