Obtener la lista y las descripciones de los países disponibles

Puede obtener una lista completa de los países para los que se emiten eventos en el calendario utilizando la función CalendarCountries.

int CalendarCountries(MqlCalendarCountry &countries[])

La función rellena el array countries pasado por referencia con estructuras MqlCalendarCountry. El array puede ser dinámico o fijo, de tamaño suficiente.

En caso de éxito, la función devuelve el número de descripciones de países recibidas del servidor, o 0 en caso de error. Entre los posibles códigos de error en _LastError podemos encontrar, en concreto, 5401 (ERR_CALENDAR_TIMEOUT, límite de tiempo de solicitud excedido) o 5400 (ERR_CALENDAR_MORE_DATA, si el tamaño del array fijo es insuficiente para obtener descripciones de todos los países). En este último caso, el sistema copiará sólo lo que quepa.

Escribamos un sencillo script CalendarCountries.mq5, que obtiene la lista completa de países y la registra.

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

He aquí un ejemplo de resultado:

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"                ...

Es importante señalar que el identificador 0 (código «WW» y pseudodivisa «ALL») corresponde a eventos mundiales (relativos a muchos países, por ejemplo, las reuniones del G7, G20), y la divisa «EUR» está asociada a varios países de la UE disponibles en el calendario (como puede ver, no se presenta toda la zona euro). Además, la propia Unión Europea tiene un identificador genérico: 999.

Si está interesado en un país concreto, puede comprobar su disponibilidad mediante un código numérico según la norma ISO 3166-1. En concreto, en el registro anterior, estos códigos aparecen en la primera columna (campo id).

Para obtener la descripción de un país por su ID especificado en el parámetro id, puede utilizar la función CalendarCountryById.

bool CalendarCountryById(const long id, MqlCalendarCountry &country)

Si tiene éxito, la función devolverá true y rellenará los campos de la estructura country.

Si no se encuentra el país, obtendremos false, y en _LastError obtendremos un código de error 5402 (ERR_CALENDAR_NO_DATA).

Para ver un ejemplo de uso de esta función, consulte Obtener registros de eventos por país o divisa.