CalendarValueById

Obtiene la descripción del valor del evento según su identificador.

bool  CalendarValueById(
   ulong                value_id,     // identificador del valor del evento 
   MqlCalendarValue&    value         // variable para obtener el valor del evento
   );

Parámetros

value_id

[in]  Identificador del valor del evento.

value

[out]  Variable del tipo MqlCalendarValue para obtener el valor del evento. Vea el siguiente ejemplo de procesamiento de eventos del calendario.

Valor retornado

Retorna true en el caso de éxito, de lo contrario, false. 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),
  • 5402 — ERR_CALENDAR_NO_DATA (el país no ha sido encontrado),
  • 5401 — ERR_CALENDAR_TIMEOUT (se ha superado el límite de solicitud por tiempo).

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 para Japón según el estándar ISO 3166-1 Alpha-2
   string japan_code="JP";
//--- 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    
//--- obtenemos la matriz de valores de los eventos para Japón
   MqlCalendarValue values[];
   int values_count=CalendarValueHistory(values,date_from,date_to,japan_code);
//--- iteramos por los valores encontrados de los eventos
   if(values_count>0)
     {
      PrintFormat("Número de valores para los eventos de Japón: %d",values_count);
      //--- eliminamos todos los valores "vacíos" (actual_value==-9223372036854775808)       
      for(int i=values_count-1;i>=0;i--)
        {
         if(values[i].actual_value==-9223372036854775808)
            ArrayRemove(values,i,1);
        }
      PrintFormat("Número de valores después de eliminar los vacíos: %d",ArraySize(values));
     }
   else
     {
      PrintFormat("No se ha logrado obtener los eventos para el código de país %s, error %d",
                  japan_code,GetLastError());
      //--- finalizando el script de manera anticipada 
      return;
     }
//--- dejamos no más de 10 valores en la matriz values[]
   if(ArraySize(values)>10)
     {
      PrintFormat("Reducimos la lista de valores hasta 10 y los mostramos");
      ArrayRemove(values,0,ArraySize(values)-10);
     }
   ArrayPrint(values);
 
//--- ahora mostramos cómo obtener la descripción del valor del evento usando una value_id conocida
   for(int i=0;i<ArraySize(values);i++)
     {
      MqlCalendarValue value;
      CalendarValueById(values[i].id,value);
      PrintFormat("%d: value_id=%d value=%d impact=%s",
                  i,values[i].id,value.actual_value,EnumToString(ENUM_CALENDAR_EVENT_IMPACT(value.impact_type)));
     }
//---
  }
/*
  Resultado:
  Número de valores para los eventos de Japón: 1734
  Número de valores después de eliminar los vacíos: 1017
  Reducimos la lista de valores hasta 10 y los mostramos
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 56500  392030004 2019.03.28 23:30:00 2019.03.01 00:00:00          0         900000       600000 -9223372036854775808           500000             1          0
   [1] 56501  392030005 2019.03.28 23:30:00 2019.03.01 00:00:00          0         700000       700000 -9223372036854775808           700000             0          0
   [2] 56502  392030006 2019.03.28 23:30:00 2019.03.01 00:00:00          0        1100000      1100000 -9223372036854775808           900000             1          0
   [3] 56544  392030007 2019.03.28 23:30:00 2019.02.01 00:00:00          0        2300000      2500000 -9223372036854775808          2200000             2          0
   [4] 56556  392050002 2019.03.28 23:30:00 2019.02.01 00:00:00          0        1630000      1630000              1610000          1620000             1          0
   [5] 55887  392020003 2019.03.28 23:50:00 2019.02.01 00:00:00          0         400000       600000 -9223372036854775808          1300000             2          0
   [6] 55888  392020004 2019.03.28 23:50:00 2019.02.01 00:00:00          0       -1800000     -3300000 -9223372036854775808         -2000000             1          0
   [7] 55889  392020002 2019.03.28 23:50:00 2019.02.01 00:00:00          0         200000     -2300000             -1800000           300000             2          0
   [8] 55948  392020006 2019.03.28 23:50:00 2019.02.01 00:00:00          1        1400000     -3400000 -9223372036854775808          -300000             1          0
   [9] 55949  392020007 2019.03.28 23:50:00 2019.02.01 00:00:00          1       -1000000       300000 -9223372036854775808          -100000             2          0
  Mostramos un resumen informativo de los valores value_id
   0: value_id=56500 value=900000 impact=CALENDAR_IMPACT_POSITIVE
   1: value_id=56501 value=700000 impact=CALENDAR_IMPACT_NA
   2: value_id=56502 value=1100000 impact=CALENDAR_IMPACT_POSITIVE
   3: value_id=56544 value=2300000 impact=CALENDAR_IMPACT_NEGATIVE
   4: value_id=56556 value=1630000 impact=CALENDAR_IMPACT_POSITIVE
   5: value_id=55887 value=400000 impact=CALENDAR_IMPACT_NEGATIVE
   6: value_id=55888 value=-1800000 impact=CALENDAR_IMPACT_POSITIVE
   7: value_id=55889 value=200000 impact=CALENDAR_IMPACT_NEGATIVE
   8: value_id=55948 value=1400000 impact=CALENDAR_IMPACT_POSITIVE
   9: value_id=55949 value=-1000000 impact=CALENDAR_IMPACT_NEGATIVE
*/

Ver también

CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent, CalendarValueLast