CalendarValueHistoryByEvent

Obtiene la matriz de valores de todos los eventos en el intervalo temporal indicado según el identificador del evento.

int  CalendarValueHistoryByEvent(
   ulong              event_id,          // identificador del evento 
   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
   );

Parámetros

event_id

[in]  Identificador del evento.

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.

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),

Si para el valor del evento no existe alguno de los campos de abajo

struct MqlCalendarValue
  {
   ...
   long              actual_value;              // valor actual del evento
   long              prev_value;                // valor anterior del evento
   long              revised_prev_value;        // valor anterior revisado del evento
   long              forecast_value;            // valor pronosticado del evento
   ...
  };

entonces el valor del campo ausente se retornará como INT64_MIN (-9223372036854775808). Mire en el ejemplo de abajo el valor del campo revised_prev_value.

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.

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 los eventos de la Unión Europea
   MqlCalendarEvent events[];
   int events_count=CalendarEventByCountry(EU_code,events);
//--- mostramos los eventos de la Unión Europea en el Registro
   if(events_count>0)
     {
      PrintFormat("Eventos para la Unión Europea: %d",events_count);
      //--- reducimos la lista de eventos, para el estudio basta con dejar 10
      ArrayResize(events,10);
      ArrayPrint(events);
     }
//--- vemos que el evento "ECB Interest Rate Decision" tiene event_id=999010007
   ulong event_id=events[6].id;        // la id de este evento puede cambiar en el Calendario, por eso, compruébela
   string event_name=events[6].name;   // nombre del evento del Calendario
   PrintFormat("Obtenemos los valores para el evento event_name=%s event_id=%d",event_name,event_id);
//--- obtenemos todos los valores del evento "ECB Interest Rate Decision"
   MqlCalendarValue values[];
//--- establecemos los límites del intervalo del que tomamos los eventos
   datetime date_from=0;           // tomamos todos los eventos desde el comienzo de la historia disponible
   datetime date_to=D'01.01.2016'; // tomamos los eventos no anteriores al año 2016
   if(CalendarValueHistoryByEvent(event_id,values,date_from,date_to))
     {
      PrintFormat("Se han obtenido los valores %s: %d",
                  event_name,ArraySize(values));
      //--- reducimos la lista de valores, para el estudio basta con dejar 10
      ArrayResize(values,10);
      ArrayPrint(values);
     }
   else
     {
      PrintFormat("Error! No se ha logrado obtener los valores para el evento event_id=%d",event_id);
      PrintFormat("Código de error: %d",GetLastError());
     }
  }
//---
/*
  Resultado:
  Eventos para la Unión Europea: 56
            [id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits]                                        [source_url]                                 [event_code]                                    [name] [reserv
   [0] 999010001      0        5           0           0          999      0            2            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-non-monetary-policy-meeting"            "ECB Non-monetary Policy Meeting"                
   [1] 999010002      0        5           0           0          999      0            2            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-meeting-accounts"       "ECB Monetary Policy Meeting Accounts"           
   [2] 999010003      0        5           0           0          999      0            3            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-press-conference"       "ECB Monetary Policy Press Conference"           
   [3] 999010004      0        5           0           0          999      0            3            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-president-draghi-speech"                "ECB President Draghi Speech"                    
   [4] 999010005      0        5           0           0          999      0            2            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-vice-president-vitor-constancio-speech" "ECB Vice President Constancio Speech"           
   [5] 999010006      1        5           0           0          999      1            3            0        2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-deposit-rate-decision"                  "ECB Deposit Facility Rate Decision"             
   [6] 999010007      1        5           0           0          999      1            3            0        2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-interest-rate-decision"                 "ECB Interest Rate Decision"                     
   [7] 999010008      0        5           0           0          999      0            2            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-economic-bulletin"                      "ECB Economic Bulletin"                          
   [8] 999010009      1        5           0           0          999      2            2            3        3 "https://www.ecb.europa.eu/home/html/index.en.html" "targeted-ltro"                              "ECB Targeted LTRO"                              
   [9] 999010010      0        5           0           0          999      0            2            0        0 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-executive-board-member-praet-speech"    "ECB Executive Board Member Praet Speech"        
  Obtenemos los valores para el evento event_name=ECB Interest Rate Decision event_id=999010007
  Se han obtenido los valores del evento ECB Interest Rate Decision: 102
       [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
   [0] 2776  999010007 2007.03.08 11:45:00 1970.01.01 00:00:00          0        3750000      4250000 -9223372036854775808 -9223372036854775808             0          0
   [1] 2777  999010007 2007.05.10 11:45:00 1970.01.01 00:00:00          0        3750000      3750000 -9223372036854775808 -9223372036854775808             0          0
   [2] 2778  999010007 2007.06.06 11:45:00 1970.01.01 00:00:00          0        4000000      3750000 -9223372036854775808 -9223372036854775808             0          0
   [3] 2779  999010007 2007.07.05 11:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [4] 2780  999010007 2007.08.02 11:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [5] 2781  999010007 2007.09.06 11:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [6] 2782  999010007 2007.10.04 11:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [7] 2783  999010007 2007.11.08 12:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [8] 2784  999010007 2007.12.06 12:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
   [9] 2785  999010007 2008.01.10 12:45:00 1970.01.01 00:00:00          0        4000000      4000000 -9223372036854775808 -9223372036854775808             0          0
*/

 

Ver también

CalendarCountries, CalendarEventByCountry, CalendarValueHistory, CalendarEventById, CalendarValueById