CalendarValueLast

Belirtilen bir change_id ile takvim veritabanı durumundan bu yana ülkeye ve/veya para birimine göre sıralanan tüm etkinlikler için değer dizisini elde edin.

int  CalendarValueLast(
   ulong&               change_id,             // change ID 
   MqlCalendarValue&    values[],              // değer açıklamaları için dizi 
   const string         country_code=NULL,     // kod olarak ülke adı (ISO 3166-1 alpha-2)
   const string         currency=NULL          // kod olarak ülke para birimi 
   );

Parametreler

change_id

[in][out]  Change ID.

values[]

[out]  Olay değerlerini almak için MqlCalendarValue tip dizisi. Takvim olaylarını yönetme örneğine bakın.

country_code=NULL

[in]  Kod olarak ülke adı (ISO 3166-1 alpha-2)

currency=NULL

[in]  Kod olarak ülke para birimi.

Geri dönüş değeri

Alınan olay değeri sayısı. Hata hakkında bilgi edinmek için, GetLastError() fonksiyonunu çağırın. Olası hatalar:

  • 4001 – ERR_INTERNAL_ERROR  (genel çalışma zamanı hatası),
  • 4004 – ERR_NOT_ENOUGH_MEMORY (istek yürütmek için yeterli bellek yok),
  • 5401 – ERR_CALENDAR_TIMEOUT (istek süresi sınırı aşıldı),
  • 5400 – ERR_CALENDAR_MORE_DATA (dizi boyutu, tüm değerlerin açıklamalarını almak için yetersiz; yalnızca diziye sığan açıklamalar alındı),

Not

Ekonomik takvim ile çalışmak için tüm fonksiyonlar alım-satım sunucusu zamanını (TimeTradeServer) kullanır. Bu; MqlCalendarValue yapısındaki zamanın ve CalendarValueHistoryByEvent/CalendarValueHistory fonksiyonlarındaki zaman girdilerinin, kullanıcının yerel zamanından ziyade, alım-satım sunucusu zaman diliminde ayarlandığı anlamına gelir.

Eğer events[] sabit uzunluklu dizi fonksiyona iletildiyse ve sonucun tamamını kaydetmek için yeterli alan yoksa, ERR_CALENDAR_MORE_DATA (5400) hatası etkinleştirilir.

Eğer change_id = 0 fonksiyona iletilirse, fonksiyon her zaman sıfır geri döndürür, ancak geçerli takvim veritabanı change_id halinde geri döndürülür.

country_code ve currency filtreleri için NULL ve "" değerleri eşdeğerdir ve filtrenin yokluğu anlamına gelir.

country_code için, MqlCalendarCountry yapısının kod alanı, örneğin "US", "RU" veya "EU" kullanılmalıdır.

currency için, MqlCalendarCountry yapısının currency alanı, örneğin "USD", "RUB" veya "EUR" kullanılmalıdır.

Filtreler bir arada uygulanır, yani mantıksal 'VE' sadece her iki koşulun (ülke ve para birimi) aynı anda karşılandığı olayların değerlerini seçmek için kullanılır.

Fonksiyon, belirli bir haber için diziyi ve haberin yeni değerlerini almak adına fonksiyonun sonraki çağrıları için kullanılabilecek yeni bir change_id yi geri döndürür. Böylece, bu fonksiyonu bilinen en son change_id ile çağırarak belirli bir habere ait değerleri güncellemek mümkündür.

MqlCalendarValue yapısı, actual_value, forecast_value, prev_value ve revised_prev_value alanlarındaki değerleri kontrol etmek ve ayarlamak için yöntemler sağlar. Değer belirlenmezse, alan LONG_MIN (-9223372036854775808) olarak ayarlanır.

Lütfen bu alanlarda bulunan değerlerin bir milyon ile çarpıldığını unutmayın. Bunun anlamı, CalendarValueById, CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent ve CalendarValueLast fonksiyonlarını kullanarak MqlCalendarValue'da değerler aldığınızda, alandaki değerlerin LONG_MIN'e eşit olup olmadığını kontrol etmeniz; alanda bir değer belirlenmişse, değeri elde etmek için değeri 1.000.000'a bölmeniz gerektiği anlamına gelir. Değerleri elde etmenin diğer bir yöntemi de MqlCalendarValue yapısının fonksiyonlarını kullanarak değerleri kontrol etmek ve elde etmektir.

Ekonomik takvim olaylarını dinleyen örnek Uzman Danışman:

#property description "Ekonomik takvim olay dinleyicisini geliştirmek adına"
#property description " CalendarValueLast fonksiyonunu kullanım örneği"
#property description "Bunu başarmak için Takvim veritabanının"
#property description " mevcut change ID'sini elde edin. Devamında, zamanlayıcı anketi aracılığıyla yalnızca yeni olayları"
#property description " almak için bu ID'yi kullanın"
//+------------------------------------------------------------------+
//| Uzman danışman başlatma fonksiyonu                               |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- zamanlayıcı oluştur
   EventSetTimer(60);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman danışman sonlandırma fonksiyonu                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- zamanlayıcıyı kaldır
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Uzman danışman tik fonksiyonu                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Zamanlayıcı fonksiyonu                                           |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- Takvim veritabanı change ID'si
   static ulong calendar_change_id=0;
//--- ilk çalıştırmanın işareti
   static bool first=true;
//--- olay değeri dizisi
   MqlCalendarValue values[];
//--- başlatmayı gerçekleştir - mevcut calendar_change_id yi elde et
   if(first)
     {
      //--- Takvim veritabanı change ID'sini elde et   
      if(CalendarValueLast(calendar_change_id,values)>0)
        {
         //--- bu kod bloğu ilk çalıştırma sırasında yürütülemez ancak yine de ekleyelim
         PrintFormat("%s: Takvim veritabanı mevcut ID'si elde edildi: change_id=%d",
                     __FUNCTION__,calendar_change_id);
         //--- bayrağı ayarla ve zamanlayıcının bir sonraki olayından önce çık
         first=false;
         return;
        }
      else
        {
         //--- veri alınmadı (bu ilk çalıştırma için normaldir), bir hata kontrolü yapın
         int error_code=GetLastError();
         if(error_code==0)
           {
            PrintFormat("%s: Takvim veritabanı mevcut ID'si elde edildi: change_id=%d",
                        __FUNCTION__,calendar_change_id);
            //--- bayrağı ayarla ve zamanlayıcının bir sonraki olayından önce çık
            first=false;
            //--- şimdi calendar_change_id değerine sahibiz
            return;
           }
         else
           {
            //--- ve bu gerçekten bir hatadır            
            PrintFormat("%s: CalendarValueLast'ta olaylar alınamadı. Hata kodu: %d",
                        __FUNCTION__,error_code);
            //--- operasyon bir hata ile tamamlandı, bir sonraki zamanlayıcı çağrısı sırasında yeniden başlat         
            return;
           }
        }
     }
 
//--- Takvim change ID (change_id)'nin en son bilinen değerine sahibiz
   ulong old_change_id=calendar_change_id;
//--- Yeni Takvim olayları olup olmadığını kontrol et
   if(CalendarValueLast(calendar_change_id,values)>0)
     {
      PrintFormat("%s: Yeni Takvim olayları alındı: %d",
                  __FUNCTION__,ArraySize(values));
      //--- Günlükteki 'değerler' dizisinden verileri görüntüle 
      ArrayPrint(values);
      //--- Günlükteki önceki ve yeni Takvim ID değerlerini görüntüle
      PrintFormat("%s: Önceki change_id=%d, Yeni change_id=%d",
                  __FUNCTION__,old_change_id,calendar_change_id);
      //--- Günlükte yeni olayları görüntüle
      ArrayPrint(values);
      /* 
     buraya, olayların meydana gelmesini yönetmek için kodunuzu yazın
      */
     }
//---     
  }
/*
  Dinleyici operasyonuna örnek:
  OnTimer: Takvim veritabanı mevcut ID'si elde edildi: change_id=33281792
  OnTimer: Yeni Takvim olayları alındı: 1
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Önceki change_id=33281792, yeni change_id=33282048
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Yeni Takvim olayları alındı: 1
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
  OnTimer: Önceki change_id=33282048, yeni change_id=33282560
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
 
*/  

Ayrıca bakınız

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById