CalendarValueById

Получает описание значения события по его идентификатору.

bool  CalendarValueById(
   ulong                value_id,     // идентификатор значения события 
   MqlCalendarValue&    value         // переменная для получения значения события
   );

Параметры

value_id

[in]  Идентификатор значения события.

value

[out]  Переменная типа MqlCalendarValue для получения значения события. Смотри пример обработки событий календаря.

Возвращаемое значение

Возвращает true в случае успеха, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Возможные ошибки:

  • 4001 – ERR_INTERNAL_ERROR  (общая ошибка исполняющей системы),
  • 5402 – ERR_CALENDAR_NO_DATA (страна не найдена),
  • 5401 – ERR_CALENDAR_TIMEOUT (превышен лимит запроса по времени).

 

Примечание

Все функции для работы с Экономическим календарем используют время торгового сервера (TimeTradeServer). Это означает, что время в структуре MqlCalendarValue и входящие параметры времени в функциях CalendarValueHistoryByEvent/CalendarValueHistory задаются в таймзоне торгового сервера, а не в локальном времени пользователя.

Структура MqlCalendarValue предоставляет методы для проверки и получения значений из полей actual_value, forecast_value, prev_value и revised_prev_value. Если значение поля не задано, то поле хранит значение LONG_MIN (-9223372036854775808).

При этом необходимо иметь в виду, что значения в этих полях хранятся увеличенными в миллион раз. Это означает, что при получении значений в MqlCalendarValue функциями CalendarValueById, CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent и CalendarValueLast, значения этих полей нужно проверять на равенство LONG_MIN, и если значение в поле задано, то для получения значения необходимо разделить значение поля на 1 000 000 (миллион). Другой способ получения значений – делать проверку и получать значения функциями самой структуры MqlCalendarValue.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- код страны для Японии по стандарту ISO 3166-1 Alpha-2 
   string japan_code="JP";
//--- зададим границы диапазона, из которого берем события
   datetime date_from=D'01.01.2018';  // берем все события с 2018 года
   datetime date_to=0;                // 0 означает все известные события, даже те, что не наступили еще    
//--- получим массив значений событий для Японии
   MqlCalendarValue values[];
   int values_count=CalendarValueHistory(values,date_from,date_to,japan_code);
//--- пройдем по найденным значениям событий
   if(values_count>0)
     {
      PrintFormat("Количество значений для событий Японии: %d",values_count);
      //--- удалим все "пустые" значения (actual_value==-9223372036854775808)       
      for(int i=values_count-1;i>=0;i--)
        {
         if(values[i].actual_value==-9223372036854775808)
            ArrayRemove(values,i,1);
        }
      PrintFormat("Количество значений после удаления пустых: %d",ArraySize(values));
     }
   else
     {
      PrintFormat("Не удалось получить события для кода страны %s, ошибка %d",
                  japan_code,GetLastError());
      //--- досрочное завершение скрипта
      return;
     }
//--- оставим не более 10 значений в массиве values[]
   if(ArraySize(values)>10)
     {
      PrintFormat("Уменьшим список значений до 10 и покажем их");
      ArrayRemove(values,0,ArraySize(values)-10);
     }
   ArrayPrint(values);
 
//--- теперь покажем как на основе известного value_id получить описание значения события
   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)));
     }
//---
  }
/*
   Результат:
   Количество значений для событий Японии: 1734
   Количество значений после удаления пустых: 1017
   Уменьшим список значений до 10 и покажем их
        [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
   Выведем краткую информацию по значениям событий на основе 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
*/

Смотри также

CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent, CalendarValueLast