CalendarValueLastByEvent

Belirtilen bir change_id ile takvim veritabanı durumundan bu yana ID'sine göre olay değer dizisini elde edin.

int  CalendarValueLastByEvent(
   ulong                event_id,      // olay ID'si 
   ulong&               change_id,     // Takvim change ID'si 
   MqlCalendarValue&    values[]       // değer açıklamaları için dizi 
   );

Parametreler

event_id

[in]  Olay ID'si

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.

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.

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.

Nonfarm payrolls olayını dinleyen örnek Uzman Danışman:

#property description "Nonfarm Payrolls olayını izlemek adına"
#property description " CalendarValueLastByEvent 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 ID'si  
   static ulong event_id=0;
//--- olay adı  
   static string event_name=NULL;
//--- olay değeri dizisi
   MqlCalendarValue values[];
//--- başlatmayı gerçekleştir - mevcut calendar_change_id yi elde et
   if(first)
     {
      MqlCalendarEvent events[];
      //--- ABD için ülke kodu (ISO 3166-1 Alpha-2) 
      string USA_code="US";
      //--- ABD olaylarını al    
      int events_count=CalendarEventByCountry(USA_code,events);
      //--- 'events' dizisinde gerekli bir olayın konumu
      int event_pos=-1;
      //--- Günlükte ABD olaylarını görüntüle
      if(events_count>0)
        {
         PrintFormat("%s: ABD olayları: %d",__FUNCTION__,events_count);
         for(int i=0;i<events_count;i++)
           {
            string event_name_low=events[i].name;
            //--- olay adını küçük harf haline değiştir            
            if(!StringToLower(event_name_low))
              {
               PrintFormat("StringToLower() %d hatasını geri döndürdü",GetLastError());
               //--- vaktinden önce fonksiyondan çık
               return;
              }
            //--- "Nonfarm Payrolls" olayı için arama yap            
            if(StringFind(event_name_low,"nonfarm payrolls")!=-1)
              {
               //--- olay bulundu, bu ID'yi hatırla
               event_id=events[i].id;
               //--- "Nonfarm Payrolls" olay adını yaz 
               event_name=events[i].name;
               //--- 'events[]' dizisindeki olayların konumunu hatırla               
               event_pos=i;
               //--- Takvimin, adlarında "nonfarm payrolls" içeren birkaç olaya sahip olduğunu unutmayın
               PrintFormat("\"Nonfarm Payrolls\" olayı bulundu: event_id=%d  event_name=%s",event_id,event_name);
               //--- bu örneği daha iyi anlamak için 'break' operatörünü derleme dışı bırakarak tüm olayları görüntüle
               break;
              }
           }
         //--- "Nonfarm Payrolls"dan sonraki olayları silerek listeyi azaltın
         ArrayRemove(events,event_pos+1);
         //--- daha uygun analiz için "Nonfarm Payrolls"dan önce 9 olay bırak         
         ArrayRemove(events,0,event_pos-9);
         ArrayPrint(events);
        }
      else
        {
         PrintFormat("%s: CalendarEventByCountry(%s) 0 olay geri döndürdü, hata kodu=%d",
                     USA_code,__FUNCTION__,GetLastError());
         //--- operasyon bir hata ile tamamlandı, bir sonraki zamanlayıcı çağrısı sırasında tekrar dene         
         return;
        }
 
      //--- belirtilen olay için Takvim veritabanı change ID'sini elde et   
      if(CalendarValueLastByEvent(event_id,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: event_id=%d için değerler alınamadı",__FUNCTION__,event_id);
            PrintFormat("Hata kodu: %d",error_code);
            //--- operasyon bir hata ile tamamlandı, bir sonraki zamanlayıcı çağrısı sırasında tekrar dene         
            return;
           }
        }
     }
 
//--- Takvim change ID (change_id)'nin en son bilinen değerine sahibiz
   ulong old_change_id=calendar_change_id;
//--- yeni bir Nonfarm Payrolls olay değeri olup olmadığını kontrol et
   if(CalendarValueLastByEvent(event_id,calendar_change_id,values)>0)
     {
      PrintFormat("%s: \"%s\" için yeni olaylar alındı: %d",
                  __FUNCTION__,event_name,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);
/* 
      buraya, "Nonfarm Payrolls" olayının verilerini yönetmek için kodunuzu yazın
      */
     }
//---     
  }
/*
  Sonuç:
   OnTimer: ABD olayları: 202
  "Nonfarm Payrolls" olayı bulundu: event_id=840030016  event_name=Nonfarm Payrolls
            [id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits]          [source_url]                             [event_code]                   [name] [reserved]
   [0] 840030007      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "consumer-price-index-yy"                "CPI y/y"                         0
   [1] 840030008      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "consumer-price-index-ex-food-energy-yy" "Core CPI y/y"                    0
   [2] 840030009      1        4           2           0          840      0            1            0        3 "https://www.bls.gov" "consumer-price-index-nsa"               "CPI n.s.a."                      0
   [3] 840030010      1        4           2           0          840      0            1            0        3 "https://www.bls.gov" "consumer-price-index-ex-food-energy"    "Core CPI"                        0
   [4] 840030011      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "import-price-index-mm"                  "Import Price Index m/m"          0
   [5] 840030012      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "import-price-index-yy"                  "Import Price Index y/y"          0
   [6] 840030013      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "export-price-index-mm"                  "Export Price Index m/m"          0
   [7] 840030014      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "export-price-index-yy"                  "Export Price Index y/y"          0
   [8] 840030015      1        3           2           0          840      1            2            0        1 "https://www.bls.gov" "unemployment-rate"                      "Unemployment Rate"               0
   [9] 840030016      1        3           2           0          840      4            3            1        0 "https://www.bls.gov" "nonfarm-payrolls"                       "Nonfarm Payrolls"                0
   OnTimer: Takvim veritabanı mevcut ID'si elde edildi: change_id=33986560
 
*/  

Ayrıca bakınız

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById