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.

struct MqlCalendarEvent
  {
   ulong                               id;                    // olay ID'si
   ENUM_CALENDAR_EVENT_TYPE            type;                  // ENUM_CALENDAR_EVENT_TYPE numaralandırmasından olay tipi
   ENUM_CALENDAR_EVENT_SECTOR          sector;                // olayın ilgili olduğu sektör
   ENUM_CALENDAR_EVENT_FREQUENCY       frequency;             // olay sıklığı
   ENUM_CALENDAR_EVENT_TIMEMODE        time_mode;             // olayın zamanı modu
   ulong                               country_id;            // ülke ID'si
   ENUM_CALENDAR_EVENT_UNIT            unit;                  // ekonomik gösterge değerinin ölçü birimi
   ENUM_CALENDAR_EVENT_IMPORTANCE      importance;            // olayın önemi
   ENUM_CALENDAR_EVENT_MULTIPLIER      multiplier;            // ekonomik gösterge değeri çarpanı
   uint                                digits;                // ondalık basamak sayısı
   string                              source_url;            // olayın yayımlandığı kaynağın URL'si
   string                              event_code;            // olay kodu
   string                              name;                  // olayın terminal dilindeki yazısal olarak adı (geçerli terminal kodlamasındaki)
  };

 

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(voidconst;   // actual_value belirlenmişse true değerini geri döndürür
   bool                         HasPreviousValue(voidconst; // prev_value belirlenmişse true değerini geri döndürür
   bool                         HasRevisedValue(voidconst;  // revised_prev_value belirlenmişse true değerini geri döndürür
   bool                         HasForecastValue(voidconst; // forecast_value belirlenmişse true değerini geri döndürür
  //--- değerleri alan fonksiyonlar
   double                       GetActualValue(voidconst;   // actual_value değerini veya değer belirlenmemişse nan değerini geri döndürür
   double                       GetPreviousValue(voidconst; // prev_value değerini veya değer belirlenmemişse nan değerini geri döndürür
   double                       GetRevisedValue(voidconst;  // revised_prev_value değerini veya değer belirlenmemişse nan değerini geri döndürür
   double                       GetForecastValue(voidconst; // 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(valuesdate_fromdate_toEU_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_codeArraySize(values));
//--- Günlük çıktısı için dizinin boyutunu küçült
   if(ArraySize(values)>5)
      ArrayResize(values5);
//--- 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_1total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
   for(int i=0i<totali++)
     {
      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_2total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
   for(int i=0i<totali++)
     {
      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_3total);
//--- değerleri kontroller ve ayarlamalar ile kopyala
   for(int i=0i<totali++)
     {
      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]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3             55200000             55500000 -9223372036854775808             55500000             2        ...
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0            143100000            143900000 -9223372036854775808 -9223372036854775808             0        ...
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0        ...
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0             11000000             10500000 -9223372036854775808             11000000             0        ...
   [4111619  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]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  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]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  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]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

ID

Açıklama

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

Ekonomik Takvim