Получение списка и описаний доступных стран

Получить полный список стран, события по которым транслируются в календаре, можно с помощью функции CalendarCountries.

int CalendarCountries(MqlCalendarCountry &countries[])

Функция заполняет переданный по ссылке массив countries структурами MqlCalendarCountry. Массив может быть динамическим или фиксированного достаточного размера.

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

Напишем простой скрипт CalendarCountries.mq5, который получает полный список стран и выводит его в журнал.

void OnStart()
{
   MqlCalendarCountry countries[];
   PRTF(CalendarCountries(countries));
   ArrayPrint(countries);
}

Вот пример результата.

CalendarCountries(countries)=23 / ok
     [id]           [name] [code] [currency] [currency_symbol]       [url_name] [reserved]
[ 0]  554 "New Zealand"    "NZ"   "NZD"      "$"               "new-zealand"           ...
[ 1]  999 "European Union" "EU"   "EUR"      "€"               "european-union"        ...
[ 2]  392 "Japan"          "JP"   "JPY"      "¥"               "japan"                 ...
[ 3]  124 "Canada"         "CA"   "CAD"      "$"               "canada"                ...
[ 4]   36 "Australia"      "AU"   "AUD"      "$"               "australia"             ...
[ 5]  156 "China"          "CN"   "CNY"      "¥"               "china"                 ...
[ 6]  380 "Italy"          "IT"   "EUR"      "€"               "italy"                 ...
[ 7]  702 "Singapore"      "SG"   "SGD"      "R$"              "singapore"             ...
[ 8]  276 "Germany"        "DE"   "EUR"      "€"               "germany"               ...
[ 9]  250 "France"         "FR"   "EUR"      "€"               "france"                ...
[10]   76 "Brazil"         "BR"   "BRL"      "R$"              "brazil"                ...
[11]  484 "Mexico"         "MX"   "MXN"      "Mex$"            "mexico"                ...
[12]  710 "South Africa"   "ZA"   "ZAR"      "R"               "south-africa"          ...
[13]  344 "Hong Kong"      "HK"   "HKD"      "HK$"             "hong-kong"             ...
[14]  356 "India"          "IN"   "INR"      "₹"               "india"                 ...
[15]  578 "Norway"         "NO"   "NOK"      "Kr"              "norway"                ...
[16]    0 "Worldwide"      "WW"   "ALL"      ""                "worldwide"             ...
[17]  840 "United States"  "US"   "USD"      "$"               "united-states"         ...
[18]  826 "United Kingdom" "GB"   "GBP"      "£"               "united-kingdom"        ...
[19]  756 "Switzerland"    "CH"   "CHF"      "₣"               "switzerland"           ...
[20]  410 "South Korea"    "KR"   "KRW"      "₩"               "south-korea"           ...
[21]  724 "Spain"          "ES"   "EUR"      "€"               "spain"                 ...
[22]  752 "Sweden"         "SE"   "SEK"      "Kr"              "sweden"                ...

Важно отметить, что идентификатор 0 (код "WW" и псевдо-валюта "ALL") соответствует общемировым событиям (касающихся многих стран, например, встречи G7, G20), а валюта "EUR" связана с несколькими странами Евросоюза, доступными в календаре (как видно, представлена не вся зона Евро). Также и сам Евросоюз имеет обобщающий идентификатор 999.

Если вас интересует конкретная страна, можно проверить её наличие по цифровому коду согласно стандарту ISO 3166-1. В частности, в журнале выше эти коды выведены в первом столбце (поле id).

Получить описание одной страны по её идентификатору, заданному в параметре id, позволяет функция CalendarCountryById.

bool CalendarCountryById(const long id, MqlCalendarCountry &country)

В случае успеха функция вернет true и заполнит поля структуры country.

Если страна не найдена, получим false, а в _LastError — код ошибки 5402 (ERR_CALENDAR_NO_DATA).

Пример использования данной функции смотрите в разделе Получение записей о событиях по странам или валютам.