Ekonomik Takvim yapıları
Bu bölümde, doğrudan MetaTrader platformunda bulunan ekonomik takvim ile çalışma adına yapıları açıklanmaktadır. Ekonomik takvim, makroekonomik göstergelerin açıklamalarını, yayımlama tarihlerini ve önem derecelerini içeren hazır bir ansiklopedidir. Makroekonomik göstergelerin ilgili değerleri, yayımlandığı anda MetaTrader platformuna gönderilir ve bu değerler, gerekli göstergeleri ülkeler, para birimleri ve önem açısından görsel olarak izlemenizi sağlayan etiketler halinde görüntülenir.
Ekonomik takvim fonksiyonları, gelen olayların otomatik olarak gerekli ülke/döviz pariteleri perspektifinden özel önem kriterlerine göre analiz edilmesini sağlar.
Ülke açıklamaları MqlCalendarCountry yapısı tarafından ayarlanır. Bu yapı, CalendarCountryById() ve CalendarCountries() fonksiyonlarında kullanılır.
struct MqlCalendarCountry
{
ulong id; // ülke ID'si (ISO 3166-1)
string name; // yazısal olarak ülke adı (mevcut terminal kodlamasındaki)
string code; // kod olarak ülke adı (ISO 3166-1 alpha-2)
string currency; // ülke para birimi kodu
string currency_symbol; // ülke para birimi sembolü
string url_name; // mql5.com web sitesi URL’sinde kullanılan ülke adı
};
|
Olay açıklamaları MqlCalendarEvent yapısı tarafından ayarlanır. Bu yapı, CalendarEventById(), CalendarEventByCountry() ve CalendarEventByCurrency() fonksiyonlarında kullanılır.
Olay değerleri MqlCalendarValue yapısı tarafından ayarlanır. Bu yapı, CalendarValueById(), CalendarValueHistoryByEvent(), CalendarValueHistory(), CalendarValueLastByEvent() ve CalendarValueLast() fonksiyonlarında kullanılır.
struct MqlCalendarValue
{
ulong id; // değerin kimliği
ulong event_id; // olayın kimliği
datetime time; // olayın zamanı ve tarihi
datetime period; // olayın raporlama dönemi
int revision; // yayımlanan göstergenin raporlama dönemine ilişkin olarak revizyonu
long actual_value; // ppm cinsinden açıklanan değer veya değer belirlenmezse LONG_MIN
long prev_value; // ppm cinsinden önceki değer veya değer belirlenmezse LONG_MIN
long revised_prev_value; // ppm cinsinden revize edilmiş önceki değer veya değer belirlenmezse LONG_MIN
long forecast_value; // ppm cinsinden beklenti değeri veya değer belirlenmezse LONG_MIN
ENUM_CALENDAR_EVENT_IMPACT impact_type; // döviz kuru üzerindeki potansiyel etki
//--- değerleri kontrol eden fonksiyonlar
bool HasActualValue(void) const; // actual_value belirlenmişse true değerini geri döndürür
bool HasPreviousValue(void) const; // prev_value belirlenmişse true değerini geri döndürür
bool HasRevisedValue(void) const; // revised_prev_value belirlenmişse true değerini geri döndürür
bool HasForecastValue(void) const; // forecast_value belirlenmişse true değerini geri döndürür
//--- değerleri alan fonksiyonlar
double GetActualValue(void) const; // actual_value değerini veya değer belirlenmemişse nan değerini geri döndürür
double GetPreviousValue(void) const; // prev_value değerini veya değer belirlenmemişse nan değerini geri döndürür
double GetRevisedValue(void) const; // revised_prev_value değerini veya değer belirlenmemişse nan değerini geri döndürür
double GetForecastValue(void) const; // forecast_value değerini veya değer belirlenmemişse nan değerini geri döndürü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.
Takvim olaylarını yönetmeye bir örnek:
//--- Takvim olaylarını tam sayılar yerine gerçek değerlerle elde etmek için bir yapı oluştur
struct AdjustedCalendarValue
{
ulong id; // değerin kimliği
ulong event_id; // olayın kimliği
datetime time; // olayın zamanı ve tarihi
datetime period; // olayın raporlama dönemi
int revision; // yayımlanan göstergenin raporlama dönemine ilişkin olarak revizyonu
double actual_value; // açıklanan değer
double prev_value; // önceki değer
double revised_prev_value; // revize edilmiş önceki değer
double forecast_value; // beklenti değeri
ENUM_CALENDAR_EVENT_IMPACT impact_type; // döviz kuru üzerindeki potansiyel etki
};
//+------------------------------------------------------------------+
//| Script programı başlatma fonksiyonu |
//+------------------------------------------------------------------+
void OnStart()
{
//---
//--- AB için ülke kodu (ISO 3166-1 Alpha-2)
string EU_code="EU";
//--- tüm AB olaylarının değerlerini al
MqlCalendarValue values[];
//--- olayların alındığı aralığın sınırlarını belirle
datetime date_from=D'01.01.2021'; // 2021'deki tüm olayları al
datetime date_to=0; // 0, henüz gerçekleşmemiş olanlar dahil tüm bilinen olaylar anlamına gelir
//--- 2021 yılından bu yana AB olay geçmişini talep et
if(!CalendarValueHistory(values, date_from, date_to, EU_code))
{
PrintFormat("Hata! country_code=%s için olaylar alınamadı", EU_code);
PrintFormat("Hata kodu: %d", GetLastError());
return;
}
else
PrintFormat("country_code=%s için olayların değerleri alındı: %d",
EU_code, ArraySize(values));
//--- Günlük çıktısı için dizinin boyutunu küçült
if(ArraySize(values)>5)
ArrayResize(values, 5);
//--- olayların değerlerini, kontrol etmeden veya gerçek değerlere dönüştürmeden, oldukları gibi Günlüğe gönder
Print("Takvim değerlerini oldukları gibi elde et");
ArrayPrint(values);
//--- alan değerlerini kontrol et ve gerçek değerlere dönüştür
//--- değerleri kontrol etmek ve almak için 1. seçenek
AdjustedCalendarValue values_adjusted_1[];
int total=ArraySize(values);
ArrayResize(values_adjusted_1, total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
for(int i=0; i<total; i++)
{
values_adjusted_1[i].id=values[i].id;
values_adjusted_1[i].event_id=values[i].event_id;
values_adjusted_1[i].time=values[i].time;
values_adjusted_1[i].period=values[i].period;
values_adjusted_1[i].revision=values[i].revision;
values_adjusted_1[i].impact_type=values[i].impact_type;
//--- değerleri kontrol et ve 1.000.000'a böl
if(values[i].actual_value==LONG_MIN)
values_adjusted_1[i].actual_value=double("nan");
else
values_adjusted_1[i].actual_value=values[i].actual_value/1000000.;
if(values[i].prev_value==LONG_MIN)
values_adjusted_1[i].prev_value=double("nan");
else
values_adjusted_1[i].prev_value=values[i].prev_value/1000000.;
if(values[i].revised_prev_value==LONG_MIN)
values_adjusted_1[i].revised_prev_value=double("nan");
else
values_adjusted_1[i].revised_prev_value=values[i].revised_prev_value/1000000.;
if(values[i].forecast_value==LONG_MIN)
values_adjusted_1[i].forecast_value=double("nan");
else
values_adjusted_1[i].forecast_value=values[i].forecast_value/1000000.;
}
Print("Takvim değerlerini kontrol etmenin ve almanın ilk yöntemi");
ArrayPrint(values_adjusted_1);
//--- değerleri kontrol etmek ve almak için 2. seçenek
AdjustedCalendarValue values_adjusted_2[];
ArrayResize(values_adjusted_2, total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
for(int i=0; i<total; i++)
{
values_adjusted_2[i].id=values[i].id;
values_adjusted_2[i].event_id=values[i].event_id;
values_adjusted_2[i].time=values[i].time;
values_adjusted_2[i].period=values[i].period;
values_adjusted_2[i].revision=values[i].revision;
values_adjusted_2[i].impact_type=values[i].impact_type;
//--- değerleri kontrol et ve al
if(values[i].HasActualValue())
values_adjusted_2[i].actual_value=values[i].GetActualValue();
else
values_adjusted_2[i].actual_value=double("nan");
if(values[i].HasPreviousValue())
values_adjusted_2[i].prev_value=values[i].GetPreviousValue();
else
values_adjusted_2[i].prev_value=double("nan");
if(values[i].HasRevisedValue())
values_adjusted_2[i].revised_prev_value=values[i].GetRevisedValue();
else
values_adjusted_2[i].revised_prev_value=double("nan");
if(values[i].HasForecastValue())
values_adjusted_2[i].forecast_value=values[i].GetForecastValue();
else
values_adjusted_2[i].forecast_value=double("nan");
}
Print("Takvim değerlerini kontrol etmenin ve almanın ikinci yöntemi");
ArrayPrint(values_adjusted_2);
//--- değerleri almak için 3. seçenek - kontroller olmadan
AdjustedCalendarValue values_adjusted_3[];
ArrayResize(values_adjusted_3, total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
for(int i=0; i<total; i++)
{
values_adjusted_3[i].id=values[i].id;
values_adjusted_3[i].event_id=values[i].event_id;
values_adjusted_3[i].time=values[i].time;
values_adjusted_3[i].period=values[i].period;
values_adjusted_3[i].revision=values[i].revision;
values_adjusted_3[i].impact_type=values[i].impact_type;
//--- kontroller olmadan değerleri al
values_adjusted_3[i].actual_value=values[i].GetActualValue();
values_adjusted_3[i].prev_value=values[i].GetPreviousValue();
values_adjusted_3[i].revised_prev_value=values[i].GetRevisedValue();
values_adjusted_3[i].forecast_value=values[i].GetForecastValue();
}
Print("Takvim değerlerini almanın üçüncü yöntemi - kontroller olmadan");
ArrayPrint(values_adjusted_3);
}
/*
country_code=EU için olayların değerlerini aldık: 1051
Takvim değerlerini oldukları gibi elde et
[id] [event_id] [time] [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
[0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00 3 55200000 55500000 -9223372036854775808 55500000 2 ...
[1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00 0 143100000 143900000 -9223372036854775808 -9223372036854775808 0 ...
[2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00 0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808 0 ...
[3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00 0 11000000 10500000 -9223372036854775808 11000000 0 ...
[4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00 0 3100000 3100000 3200000 3100000 0 ...
Takvim değerlerini kontrol etmenin ve almanın ilk yöntemi
[id] [event_id] [time] [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
[0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00 3 55.20000 55.50000 nan 55.50000 2
[1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00 0 143.10000 143.90000 nan nan 0
[2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00 0 nan nan nan nan 0
[3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00 0 11.00000 10.50000 nan 11.00000 0
[4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00 0 3.10000 3.10000 3.20000 3.10000 0
Takvim değerlerini kontrol etmenin ve almanın ikinci yöntemi
[id] [event_id] [time] [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
[0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00 3 55.20000 55.50000 nan 55.50000 2
[1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00 0 143.10000 143.90000 nan nan 0
[2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00 0 nan nan nan nan 0
[3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00 0 11.00000 10.50000 nan 11.00000 0
[4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00 0 3.10000 3.10000 3.20000 3.10000 0
Takvim değerlerini almanın üçüncü yöntemi - kontroller olmadan
[id] [event_id] [time] [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
[0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00 3 55.20000 55.50000 nan 55.50000 2
[1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00 0 143.10000 143.90000 nan nan 0
[2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00 0 nan nan nan nan 0
[3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00 0 11.00000 10.50000 nan 11.00000 0
[4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00 0 3.10000 3.10000 3.20000 3.10000 0
*/
|
Olay sıklığı, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_FREQUENCY
|
|
CALENDAR_FREQUENCY_NONE
|
Yayımlama sıklığı ayarlanmadı
|
CALENDAR_FREQUENCY_WEEK
|
Haftada bir yayın
|
CALENDAR_FREQUENCY_MONTH
|
Ayda bir yayın
|
CALENDAR_FREQUENCY_QUARTER
|
3 ayda(çeyrekte) bir yayın
|
CALENDAR_FREQUENCY_YEAR
|
Yılda bir yayın
|
CALENDAR_FREQUENCY_DAY
|
Günde bir yayın
|
Olay tipi, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_TYPE
|
|
CALENDAR_TYPE_EVENT
|
Olay (toplantı, konuşma vb.)
|
CALENDAR_TYPE_INDICATOR
|
Gösterge
|
CALENDAR_TYPE_HOLIDAY
|
Tatil
|
Bir olayın ilişkili olduğu ekonominin sektörü, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_SECTOR
|
|
CALENDAR_SECTOR_NONE
|
Sektör ayarlanmadı
|
CALENDAR_SECTOR_MARKET
|
Piyasa, borsa
|
CALENDAR_SECTOR_GDP
|
Gayri Safi Yurtiçi Hasıla (GSYİH)
|
CALENDAR_SECTOR_JOBS
|
İş piyasası
|
CALENDAR_SECTOR_PRICES
|
Fiyatlar
|
CALENDAR_SECTOR_MONEY
|
Para
|
CALENDAR_SECTOR_TRADE
|
Alım-satım
|
CALENDAR_SECTOR_GOVERNMENT
|
Devlet
|
CALENDAR_SECTOR_BUSINESS
|
Ticari faaliyet (iş)
|
CALENDAR_SECTOR_CONSUMER
|
Tüketim
|
CALENDAR_SECTOR_HOUSING
|
Konut
|
CALENDAR_SECTOR_TAXES
|
Vergiler
|
CALENDAR_SECTOR_HOLIDAYS
|
Tatiller
|
Olayın önemi, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_IMPORTANCE
|
|
CALENDAR_IMPORTANCE_NONE
|
Önem ayarlanmadı
|
CALENDAR_IMPORTANCE_LOW
|
Düşük önem
|
CALENDAR_IMPORTANCE_MODERATE
|
Orta önem
|
CALENDAR_IMPORTANCE_HIGH
|
Yüksek önem
|
Olay değerlerinin görüntülenmesinde kullanılan ölçü birimi tipi, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_UNIT
|
|
CALENDAR_UNIT_NONE
|
Ölçüm birimi ayarlanmadı
|
CALENDAR_UNIT_PERCENT
|
Yüzde
|
CALENDAR_UNIT_CURRENCY
|
Ulusal para birimi
|
CALENDAR_UNIT_HOUR
|
Saatler
|
CALENDAR_UNIT_JOB
|
İşler
|
CALENDAR_UNIT_RIG
|
Sondaj kuleleri
|
CALENDAR_UNIT_USD
|
USD
|
CALENDAR_UNIT_PEOPLE
|
İnsanlar
|
CALENDAR_UNIT_MORTGAGE
|
İpotek kredileri
|
CALENDAR_UNIT_VOTE
|
Oylar
|
CALENDAR_UNIT_BARREL
|
Variller
|
CALENDAR_UNIT_CUBICFEET
|
Kübik kadem
|
CALENDAR_UNIT_POSITION
|
Ticari Olmayan Net Pozisyonlar
|
CALENDAR_UNIT_BUILDING
|
Binalar
|
Bazı durumlarda, ekonomik parametre değerleri MqlCalendarEvent yapısında ayarlanmış bir çarpan gerektirir. Olası çarpanlar şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_MULTIPLIER
|
|
CALENDAR_MULTIPLIER_NONE
|
Çarpan ayarlanmadı
|
CALENDAR_MULTIPLIER_THOUSANDS
|
Binler
|
CALENDAR_MULTIPLIER_MILLIONS
|
Milyonlar
|
CALENDAR_MULTIPLIER_BILLIONS
|
Milyarlar
|
CALENDAR_MULTIPLIER_TRILLIONS
|
Trilyonlar
|
Olayın ulusal para birimi oranı üzerindeki potansiyel etkisi, MqlCalendarValue yapısında gösterilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_IMPACT
|
|
CALENDAR_IMPACT_NA
|
Etki ayarlanmadı
|
CALENDAR_IMPACT_POSITIVE
|
Pozitif etki
|
CALENDAR_IMPACT_NEGATIVE
|
Negatif etki
|
Olayın zamanı, MqlCalendarEvent yapısında belirtilir. Olası değerler şu listede belirtilmiştir: ENUM_CALENDAR_EVENT_TIMEMODE
|
|
CALENDAR_TIMEMODE_DATETIME
|
Kaynak, bir olayın kesin zamanını yayımlamaktadır
|
CALENDAR_TIMEMODE_DATE
|
Olay tüm gün sürmektedir
|
CALENDAR_TIMEMODE_NOTIME
|
Kaynak, olay için hiçbir zaman yayımlamamaktadır
|
CALENDAR_TIMEMODE_TENTATIVE
|
Kaynak, olayın kesin zamanı yerine bir olay günü yayımlamaktadır. Olayın gerçekleşmesi akabinde zaman belirlenir.
|
Ayrıca bakınız