Consultar tipos de eventos por país y divisa

El calendario de eventos económicos y días festivos tiene sus propias especificidades en cada país. Un programa MQL puede consultar los tipos de eventos dentro de un país concreto, así como los tipos de eventos asociados a una divisa determinada. Esto último es relevante en los casos en que varios países utilizan la misma divisa, como, por ejemplo, la mayoría de los miembros de la Unión Europea.

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

La función CalendarEventByCountry rellena un array de estructuras MqlCalendarEvent pasadas por referencia con descripciones de todos los tipos de eventos disponibles en el calendario para el país especificado por el código de país de dos letras (según la norma ISO 3166-1 alfa-2). Hemos visto ejemplos de este tipo de códigos en la sección anterior, en el registro: EU para la Unión Europea, US para Estados Unidos, DE para Alemania, CN para China, etc.

El array receptor puede ser dinámico o fijo de tamaño suficiente.

La función devuelve el número de descripciones recibidas, y 0 en caso de error. En particular, si el array fijo no puede contener todos los eventos, la función la rellenará con la parte ajustada de los datos disponibles y establecerá el código _LastError, igual a CALENDAR_MORE_DATA (5400). También es posible que se produzcan errores de asignación de memoria (4004, ERR_NOT_ENOUGH_MEMORY) o que se agote el tiempo de espera de la solicitud de calendario al servidor (5401, ERR_CALENDAR_TIMEOUT).

Si el país con el código dado no existe, se producirá un INTERNAL_ERROR (4001).

Especificando NULL o una cadena vacía «» en lugar de country, puede obtener una lista completa de eventos para todos los países.

Probemos el rendimiento de la función utilizando el sencillo script CalendarEventKindsByCountry.mq5. Tiene un único parámetro de entrada que es el código del país que nos interesa.

input string CountryCode = "HK";

A continuación, se realiza una petición de tipos de eventos llamando a CalendarEventByCountry, y si tiene éxito, se registran los arrays resultantes.

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

He aquí un ejemplo del resultado (debido a que las líneas son largas, se han dividido artificialmente en 2 bloques para su publicación en el libro: el primer bloque contiene los campos numéricos de las estructuras MqlCalendarEvent, y el segundo bloque contiene campos de cadena).

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 »

 

Continuación del registro (fragmento derecho).

» [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[])

La función CalendarEventByCurrency rellena el array events pasado con descripciones de todos los tipos de eventos del calendario que están asociados con el currency especificado. La denominación de tres letras de las divisas es conocida por todos los operadores de Forex.

Si se especifica un código de divisa no válido, la función devolverá 0 (sin error) y un array vacío.

Especificando NULL o una cadena vacía «» en lugar de currency, puede obtener una lista completa de los eventos del calendario.

Vamos a probar la función utilizando el script CalendarEventKindsByCurrency.mq5. El parámetro de entrada especifica el código de divisa.

input string Currency = "CNY";

En el manejador OnStart solicitamos eventos y los enviamos al log.

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

He aquí un ejemplo del resultado (dado con abreviaturas).

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 »

...

Fragmento derecho.

» [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"

...

Un lector atento observará que el identificador del tipo de evento contiene el código del país, el número de la fuente de noticias y el número de serie dentro de la fuente (la numeración empieza por 1). Así, el formato general del identificador de tipo de evento es: CCCSSNNNN, donde CCC es el código de país, SS es la fuente, NNNN es el número. Por ejemplo, 156020001 es la primera noticia de la segunda fuente para China y 344030010 es la décima noticia de la tercera fuente para Hong Kong. La única excepción son las noticias mundiales, para las que el código «país» no es 000, sino 1000.