CalendarValueHistory

Obtiene la matriz de valores de todos los eventos en el intervalo temporal indicado con filtro de país y/o divisa.

int  CalendarValueHistory(
   MqlCalendarValue&  values[],              // matriz para obtener las descripciones de los valores 
   datetime           datetime_from,         // límite izquierdo del intervalo temporal
   datetime           datetime_to=0          // límite derecho del intervalo temporal
   const string       country_code=NULL,     // nombre clave del país ISO 3166-1 alpha-2
   const string       currency=NULL          // nombre clave de la divisa del país 
   );

Parámetros

values[]

[out]  Matriz del tipo MqlCalendarValue para obtener los valores de los eventos. Vea el siguiente ejemplo de procesamiento de eventos del calendario.

datetime_from

[in]  Fecha inicial del intervalo temporal desde el cual se eligen los eventos según el identificador indicado, en este caso, además, datetime_from < datetime_to.

datetime_to=0

[in]  Fecha final del intervalo temporal desde el cual se eligen los eventos según el identificador indicado. Si el parámetro datetime_to no ha sido indicado (o es igual a 0), se retornarán todos los valores de los eventos desde la fecha indicada datetime_from existentes en la base de datos del Calendario, incluidos los eventos y valores de eventos planeados para el futuro.

country_code=NULL

[in]  Nombre clave del país según ISO 3166-1 alpha-2

currency=NULL

[in]  Nombre clave de la divisa del país.

Valor retornado

En caso de éxito, retornará el número de valores disponibles en el array "values", en caso contrario -1.. Para obtener información sobre el error, necesitamos llamar la función GetLastError(). Posibles errores:

  • 4001 — ERR_INTERNAL_ERROR  (error general del sistema de ejecución),
  • 4004 — ERR_NOT_ENOUGH_MEMORY (memoria insuficiente para ejecutar la solicitud),
  • 5401 — ERR_CALENDAR_TIMEOUT (se ha superado el límite de solicitud por tiempo),
  • 5400 — ERR_CALENDAR_MORE_DATA (el tamaño de la matriz es insuficiente para obtener las descripciones de todos los valores, por eso ha recibido solo aquellas que cabían),

 

Observación

Todas las funciones para trabajar con el Calendario Económico utilizan la hora del servidor comercial (TimeTradeServer). Esto significa que la hora en la estructura MqlCalendarValue y los parámetros de entrada de hora en las funciones CalendarValueHistoryByEvent/CalendarValueHistory se establecen en el huso horario del servidor comercial, y no en la hora local del usuario.

Si se ha transmitido a la función la matriz events[] de longitud fija, y como resultado de la solicitud no ha habido espacio suficiente para guardar el resultado completo, se generará el error ERR_CALENDAR_MORE_DATA (5400).

Si no se ha indicado el parámetro datetime_to (=0), se retornarán todos los valores de los eventos desde la fecha indicada datetime_from existentes en la base de datos del Calendario, incluidos los eventos y valores de eventos planeados para el futuro.

Para los filtros country_code y currency los valores NULL y "" son equivalentes: designan la ausencia de filtro.

Para country_code es mejor usar el campo code de la estructura MqlCalendarCountry, por ejemplo, "US", "RU" o "EU".

Para currency es mejor usar el campo currency de la estructura MqlCalendarCountry, por ejemplo, "USD", "RUB" o "EUR".

Los filtros se usan mediante conjunción, es decir, a través de un 'Y' lógico se eligen los valores solo de aquellos eventos para los que se cumplen simultáneamente las dos condiciones: país y divisa

La estructura MqlCalendarValue proporciona un método para obtener e comprobar valores a partir de los campos actual_value, forecast_value, prev_value y revised_prev_value. Si el valor del campo no está definido, éste almacenará el valor LONG_MIN (-9223372036854775808).

Es necesario tener en cuenta que los valores de estos campos se almacenan multiplicados por un factor de un millón. Eso quiere decir que cuando las funciones CalendarValueById, CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent y CalendarValueLast reciben valores en MqlCalendarValue, es necesario comprobar que los valores LONG_MIN de esos campos son idénticos; y si el valor está definido en el campo, para obtener el valor, el valor del campo debe dividirse entre 1000 000 (un millón). Otra forma de obtener valores es verificar y obtener valores mediante funciones de la propia estructura MqlCalendarValue.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- código del país de la Unión Europea según el estándar ISO 3166-1 Alpha-2
   string EU_code="EU";
//--- obtenemos todos los valores de los eventos de la Unión Europea
   MqlCalendarValue values[];
//--- establecemos los límites del intervalo del que tomamos los eventos
   datetime date_from=D'01.01.2018';  // tomamos todos los eventos desde el año 2018
   datetime date_to=0;                // 0 indica todos los eventos conocidos, incluso aquellos que aún no se han dado 
//--- solicitamos la historia de un evento de la Unión Europea desde el año 2018
   if(CalendarValueHistory(values,date_from,date_to,EU_code))
     {
      PrintFormat("Se han obtenido los valores de los eventos de country_code=%s: %d",
                  EU_code,ArraySize(values));
      //--- reducimos el tamaño de la matriz para la muestra en el Registro
      ArrayResize(values,10);
//--- mostramos los valores de los eventos en el Registro
      ArrayPrint(values);      
     }
   else
     {
      PrintFormat("Error! No se ha logrado obtener el evento del país country_code=%s",EU_code);
      PrintFormat("Código de error: %d",GetLastError());
     }
//---
  }
/*
  Resultado:
  Se han obtenido los valores de los eventos de country_code=EU: 1384
        [id] [event_id]           [time]               [period] [revision]   [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 54215  999500001 2018.01.02 09:00:00 2017.12.01 00:00:00          3       60600000     60600000 -9223372036854775808         60500000             1          0
   [1] 54221  999500002 2018.01.04 09:00:00 2017.12.01 00:00:00          3       56600000     56500000 -9223372036854775808         56000000             1          0
   [2] 54222  999500003 2018.01.04 09:00:00 2017.12.01 00:00:00          3       58100000     58000000 -9223372036854775808         58400000             2          0
   [3] 45123  999030005 2018.01.05 10:00:00 2017.11.01 00:00:00          0         600000       400000 -9223372036854775808           100000             1          0
   [4] 45124  999030006 2018.01.05 10:00:00 2017.11.01 00:00:00          0        2800000      2500000 -9223372036854775808          1500000             1          0
   [5] 45125  999030012 2018.01.05 10:00:00 2017.12.01 00:00:00          1         900000       900000 -9223372036854775808          1000000             2          0
   [6] 45126  999030013 2018.01.05 10:00:00 2017.12.01 00:00:00          1        1400000      1500000 -9223372036854775808          1500000             2          0
   [7] 54953  999520001 2018.01.05 20:30:00 2018.01.02 00:00:00          0      127900000     92100000 -9223372036854775808         76400000             0          0
   [8] 22230  999040003 2018.01.08 10:00:00 2017.12.01 00:00:00          0        9100000      8200000              8100000          7600000             1          0
   [9] 22231  999040004 2018.01.08 10:00:00 2017.12.01 00:00:00          0       18400000     16300000             16400000         16800000             1          0   
*/ 

Ver también

CalendarCountries, CalendarEventByCountry, CalendarValueHistoryByEvent, CalendarEventById, CalendarValueById