获取可用国家/地区的列表和描述

你可以使用 CalendarCountries 函数获取日历中播报事件的完整国家/地区列表。

int CalendarCountries(MqlCalendarCountry &countries[])

该函数会使用 MqlCalendarCountry 结构体来填充通过引用传递的 countries 数组。该数组可以是动态的,也可以是具有足够大小的固定数组。

成功时,该函数返回从服务器接收到的国家/地区描述数量,如果出错则返回 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(在 id 参数中指定)获取单个国家/地区的描述,你可以使用 CalendarCountryById 函数。

bool CalendarCountryById(const long id, MqlCalendarCountry &country)

如果成功,该函数将返回 true 并填充 country 结构体的字段。

如果未找到该国家/地区,我们将得到 false,并且在 _LastError 中将得到错误代码 5402 (ERR_CALENDAR_NO_DATA)。

有关使用此函数的示例,请参见 按国家/地区或货币获取事件记录