#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
*/
|