Запрос видов событий по странам и валютам

Календарь экономических событий и праздников имеет в каждой стране свою специфику. MQL-программа может запросить виды событий внутри конкретной страны, а также виды событий, связанных с конкретной валютой. Последнее актуально в тех случаях, когда несколько стран пользуются одной валютой, как, например, большинство участников Евросоюза.

int CalendarEventByCountry(const string country, MqlCalendarEvent &events[])

Функция CalendarEventByCountry заполняет переданный по ссылке массив структур MqlCalendarEvent описаниями всех видов событий, доступных в календаре для страны, заданной двухбуквенным кодом country (по стандарту ISO 3166-1 alpha-2). Примеры таких кодов мы видели в предыдущем разделе, в журнале: EU — Евросоюз, US — США, DE — Германия, CN — Китай, и так далее.

Приемный массив может быть динамическим или фиксированного достаточного размера.

Функция возвращает количество полученных описаний и 0 в случае ошибки. В частности, если фиксированный массив не способен вместить все события, функция заполнит его уместившейся частью имеющихся данных и установит код _LastError, равный CALENDAR_MORE_DATA (5400). Также возможны ошибки выделения памяти (4004, ERR_NOT_ENOUGH_MEMORY) или таймаута запроса календаря с сервера (5401, ERR_CALENDAR_TIMEOUT).

Если страна с заданным кодом не существует, случится ошибка INTERNAL_ERROR (4001).

Указав NULL или пустую строку "" вместо country, можно получить полный перечень событий по всем странам.

Проверим работу функции с помощью простого скрипта CalendarEventKindsByCountry.mq5. Он имеет единственных входной параметр — код интересующей нас страны.

input string CountryCode = "HK";

Далее делается запрос видов событий вызовом CalendarEventByCountry, и в случае успеха полученный массивы выводится в журнал.

void OnStart()
{
   MqlCalendarEvent events[];
   if(PRTF(CalendarEventByCountry(CountryCodeevents)))
   {
      Print("Event kinds for country: "CountryCode);
      ArrayPrint(events);
   }
}

Вот пример результата (из-за того, что строки получаются длинными, они искусственно поделены на 2 блока для публикации в книге: в первый блок попали числовые поля структур MqlCalendarEvent, а во второй — строковые).

CalendarEventByCountry(CountryCode,events)=26 / ok

Event kinds for country: HK

          [id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits] »

[ 0] 344010001      1        5           2           0          344      6            1            3        1 »

[ 1] 344010002      1        5           2           0          344      1            1            0        1 »

[ 2] 344020001      1        4           2           0          344      1            1            0        1 »

[ 3] 344020002      1        2           3           0          344      1            3            0        1 »

[ 4] 344020003      1        2           3           0          344      1            2            0        1 »

[ 5] 344020004      1        6           2           0          344      1            1            0        1 »

[ 6] 344020005      1        6           2           0          344      1            1            0        1 »

[ 7] 344020006      1        6           2           0          344      2            2            3        3 »

[ 8] 344020007      1        9           2           0          344      1            1            0        1 »

[ 9] 344020008      1        3           2           0          344      1            2            0        1 »

[10] 344030001      2       12           0           1          344      0            0            0        0 »

[11] 344030002      2       12           0           1          344      0            0            0        0 »

[12] 344030003      2       12           0           1          344      0            0            0        0 »

[13] 344030004      2       12           0           1          344      0            0            0        0 »

[14] 344030005      2       12           0           1          344      0            0            0        0 »

[15] 344030006      2       12           0           1          344      0            0            0        0 »

[16] 344030007      2       12           0           1          344      0            0            0        0 »

[17] 344030008      2       12           0           1          344      0            0            0        0 »

[18] 344030009      2       12           0           1          344      0            0            0        0 »

[19] 344030010      2       12           0           1          344      0            0            0        0 »

[20] 344030011      2       12           0           1          344      0            0            0        0 »

[21] 344030012      2       12           0           1          344      0            0            0        0 »

[22] 344030013      2       12           0           1          344      0            0            0        0 »

[23] 344030014      2       12           0           1          344      0            0            0        0 »

[24] 344030015      2       12           0           1          344      0            0            0        0 »

[25] 344500001      1        8           2           0          344      0            1            0        1 »

 

Продолжение журнала (правый фрагмент).

    »                      [source_url]                        [event_code]                                  [name]

[ 0]» "https://www.hkma.gov.hk/eng/"    "foreign-exchange-reserves"         "Foreign Exchange Reserves"            

[ 1]» "https://www.hkma.gov.hk/eng/"    "hkma-m3-money-supply-yy"           "HKMA M3 Money Supply y/y"             

[ 2]» "https://www.censtatd.gov.hk/en/" "cpi-yy"                            "CPI y/y"                              

[ 3]» "https://www.censtatd.gov.hk/en/" "gdp-qq"                            "GDP q/q"                              

[ 4]» "https://www.censtatd.gov.hk/en/" "gdp-yy"                            "GDP y/y"                              

[ 5]» "https://www.censtatd.gov.hk/en/" "exports-mm"                        "Exports y/y"                          

[ 6]» "https://www.censtatd.gov.hk/en/" "imports-mm"                        "Imports y/y"                          

[ 7]» "https://www.censtatd.gov.hk/en/" "trade-balance"                     "Trade Balance"                        

[ 8]» "https://www.censtatd.gov.hk/en/" "retail-sales-yy"                   "Retail Sales y/y"                     

[ 9]» "https://www.censtatd.gov.hk/en/" "unemployment-rate-3-months"        "Unemployment Rate 3-Months"           

[10]» "https://publicholidays.hk/"      "new-years-day"                     "New Year's Day"                       

[11]» "https://publicholidays.hk/"      "lunar-new-year"                    "Lunar New Year"                       

[12]» "https://publicholidays.hk/"      "ching-ming-festival"               "Ching Ming Festival"                  

[13]» "https://publicholidays.hk/"      "good-friday"                       "Good Friday"                          

[14]» "https://publicholidays.hk/"      "easter-monday"                     "Easter Monday"                        

[15]» "https://publicholidays.hk/"      "birthday-of-buddha"                "The Birthday of the Buddha"           

[16]» "https://publicholidays.hk/"      "labor-day"                         "Labor Day"                            

[17]» "https://publicholidays.hk/"      "tuen-ng-festival"                  "Tuen Ng Festival"                     

[18]» "https://publicholidays.hk/"      "hksar-establishment-day"           "HKSAR Establishment Day"              

[19]» "https://publicholidays.hk/"      "day-following-mid-autumn-festival" "The Day Following Mid-Autumn Festival"

[20]» "https://publicholidays.hk/"      "national-day"                      "National Day"                         

[21]» "https://publicholidays.hk/"      "chung-yeung-festival"              "Chung Yeung Festival"                 

[22]» "https://publicholidays.hk/"      "christmas-day"                     "Christmas Day"                        

[23]» "https://publicholidays.hk/"      "first-weekday-after-christmas-day" "The First Weekday After Christmas Day"

[24]» "https://publicholidays.hk/"      "day-following-good-friday"         "The Day Following Good Friday"        

[25]» "https://www.markiteconomics.com" "nikkei-pmi"                        "S&P Global PMI"                       

 

int CalendarEventByCurrency(const string currency, MqlCalendarEvent &events[])

Функция CalendarEventByCurrency заполняет переданный массив events описаниями всех видов событий в календаре, которые связаны с указанной валютой currency. Трехбуквенное обозначение валют хорошо знакомо трейдерам Forex.

При указании неверного кода валюты, функция вернет 0 (нет ошибки) и пустой массив.

Указав NULL или пустую строку "" вместо currency, можно получить полный перечень событий календаря.

Протестируем функцию скриптом CalendarEventKindsByCurrency.mq5. Во входном параметре задаётся код валюты.

input string Currency = "CNY";

В обработчике OnStart мы запрашиваем события и выводим их в журнал.

void OnStart()
{
   MqlCalendarEvent events[];
   if(PRTF(CalendarEventByCurrency(Currencyevents)))
   {
      Print("Event kinds for currency: "Currency);
      ArrayPrint(events);
   }
}

Вот пример результата (приводится с сокращениями).

CalendarEventByCurrency(Currency,events)=40 / ok

Event kinds for currency: CNY

          [id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits] »

[ 0] 156010001      1        4           2           0          156      1            2            0        1 »

[ 1] 156010002      1        4           2           0          156      1            1            0        1 »

[ 2] 156010003      1        4           2           0          156      1            1            0        1 »

[ 3] 156010004      1        2           3           0          156      1            3            0        1 »

[ 4] 156010005      1        2           3           0          156      1            2            0        1 »

[ 5] 156010006      1        9           2           0          156      1            2            0        1 »

[ 6] 156010007      1        8           2           0          156      1            2            0        1 »

[ 7] 156010008      1        8           2           0          156      0            3            0        1 »

[ 8] 156010009      1        8           2           0          156      0            3            0        1 »

[ 9] 156010010      1        8           2           0          156      1            2            0        1 »

[10] 156010011      0        5           0           0          156      0            2            0        0 »

[11] 156010012      1        3           2           0          156      1            2            0        1 »

[12] 156010013      1        8           2           0          156      1            1            0        1 »

[13] 156010014      1        8           2           0          156      1            1            0        1 »

[14] 156010015      1        8           2           0          156      0            3            0        1 »

[15] 156010016      1        8           2           0          156      1            2            0        1 »

[16] 156010017      1        9           2           0          156      1            2            0        1 »

[17] 156010018      1        2           3           0          156      1            2            0        1 »

[18] 156020001      1        6           2           3          156      6            2            3        2 »

[19] 156020002      1        6           2           3          156      1            1            0        1 »

[20] 156020003      1        6           2           3          156      1            1            0        1 »

[21] 156020004      1        6           2           3          156      2            2            3        2 »

[22] 156020005      1        6           2           3          156      1            1            0        1 »

[23] 156020006      1        6           2           3          156      1            1            0        1 »

...

Правый фрагмент.

    »                        [source_url]                                 [event_code]                                       [name]

[ 0]» "http://www.stats.gov.cn/english/"  "cpi-mm"                                     "CPI m/m"                                   

[ 1]» "http://www.stats.gov.cn/english/"  "cpi-yy"                                     "CPI y/y"                                   

[ 2]» "http://www.stats.gov.cn/english/"  "ppi-yy"                                     "PPI y/y"                                   

[ 3]» "http://www.stats.gov.cn/english/"  "gdp-qq"                                     "GDP q/q"                                   

[ 4]» "http://www.stats.gov.cn/english/"  "gdp-yy"                                     "GDP y/y"                                   

[ 5]» "http://www.stats.gov.cn/english/"  "retail-sales-yy"                            "Retail Sales y/y"                          

[ 6]» "http://www.stats.gov.cn/english/"  "industrial-production-yy"                   "Industrial Production y/y"                 

[ 7]» "http://www.stats.gov.cn/english/"  "manufacturing-pmi"                          "Manufacturing PMI"                         

[ 8]» "http://www.stats.gov.cn/english/"  "non-manufacturing-pmi"                      "Non-Manufacturing PMI"                     

[ 9]» "http://www.stats.gov.cn/english/"  "fixed-asset-investment-yy"                  "Fixed Asset Investment y/y"                

[10]» "http://www.stats.gov.cn/english/"  "nbs-press-conference-on-economic-situation" "NBS Press Conference on Economic Situation"

[11]» "http://www.stats.gov.cn/english/"  "unemployment-rate"                          "Unemployment Rate"                         

[12]» "http://www.stats.gov.cn/english/"  "industrial-profit-yy"                       "Industrial Profit y/y"                     

[13]» "http://www.stats.gov.cn/english/"  "industrial-profit-ytd-yy"                   "Industrial Profit YTD y/y"                 

[14]» "http://www.stats.gov.cn/english/"  "composite-pmi"                              "Composite PMI"                             

[15]» "http://www.stats.gov.cn/english/"  "industrial-production-ytd-yy"               "Industrial Production YTD y/y"             

[16]» "http://www.stats.gov.cn/english/"  "retail-sales-ytd-yy"                        "Retail Sales YTD y/y"                      

[17]» "http://www.stats.gov.cn/english/"  "gdp-ytd-yy"                                 "GDP YTD y/y"                               

[18]» "http://english.customs.gov.cn/"    "trade-balance-usd"                          "Trade Balance USD"                         

[19]» "http://english.customs.gov.cn/"    "imports-usd-yy"                             "Imports USD y/y"                           

[20]» "http://english.customs.gov.cn/"    "exports-usd-yy"                             "Exports USD y/y"                           

[21]» "http://english.customs.gov.cn/"    "trade-balance"                              "Trade Balance"                             

[22]» "http://english.customs.gov.cn/"    "imports-yy"                                 "Imports y/y"                               

[23]» "http://english.customs.gov.cn/"    "exports-yy"                                 "Exports y/y"                               

...

Внимательный читатель заметит, что идентификатор вида события содержит в себе код страны, номер источника новости и порядковый номер внутри источника (нумерация начинается с 1). То есть общий формат идентификатора вида события такой: СССSSNNNN, где CCC — код страны, SS — источник, NNNN — номер. Например, 156020001 — первая новость из второго источника по Китаю, а 344030010 — десятая новость из третьего источника по Гонконгу. Единственное исключение — общемировые новости, для них код "страны" — не 000, а 1000.