- Основные понятия календаря
- Получение списка и описаний доступных стран
- Запрос видов событий по странам и валютам
- Получение описания вида события по идентификатору
- Получение записей о событиях по странам или валютам
- Получение записей о событиях конкретного вида
- Чтение записи о событии по идентификатору
- Отслеживание изменений событий по стране или валюте
- Отслеживание изменений событий по типу
- Фильтрация событий по множеству условий
- Перенос базы календаря в тестер
- Торговля по календарю
Запрос видов событий по странам и валютам
Календарь экономических событий и праздников имеет в каждой стране свою специфику. 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()
|
Вот пример результата (из-за того, что строки получаются длинными, они искусственно поделены на 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()
|
Вот пример результата (приводится с сокращениями).
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.