Экономический календарь. Вопросы, обсуждения.

 

Хочу разобраться с работой экономического календаря MQL5, но что-то не очень движется. Потратил почти весь вчерашний день и начало сегодняшнего, но так и не понял почему CalendarValueHistory возвращает не все события. Или я их, эти события чуток путаю...

Вчера я получал 4 события в хх:45 как и написано в календаре. Часы события пишу как "хх" потому, что полученное время не совпадает с указанным в таблице. Но хотя-бы можно было понять, что это из-за разницы указанного времени и времени терминала или сервера откуда получены эти данные. А сегодня получаю только 3 события с минутами :45 и не могу понять причину.

И вопрос к разработчикам: Почему в массиве сначала дата 2019.07.25 00:00 и следующие строки отсортированы по возрастанию. См. полученный список.

2019.07.24 10:12:22.297 !00 (EURUSD,H1)        [id] [event_id]              [time]            [period] [revision]       [actual_value]         [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 0]  96782   76020005 2019.07.25 00:00:00 1970.01.01 00:00:00          0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 1]  96840   76030003 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808             88500000 -9223372036854775808             91600000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 2] 100501  484020006 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808                10000 -9223372036854775808               110000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 3] 100502  484020007 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808               160000 -9223372036854775808               130000             0          0
// Пропущено, удалено вручную.
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [59]  93627  410010001 2019.07.25 21:00:00 2019.07.01 00:00:00          0 -9223372036854775808             97500000 -9223372036854775808             97000000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [60]  87322  392030006 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               900000 -9223372036854775808               900000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [61]  87323  392030004 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808              1100000 -9223372036854775808              1100000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [62]  87324  392030005 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               800000 -9223372036854775808               800000             0          0
 

Некоторые вопросы отпали. С временем разобрался. Оказалось всё просто. Время получаем GMT, а на сайте было представлено GMT+3, отсюда все мои непонятки складывались.

Вот первый результат: Получено описание события, первая строка на снимке


2019.07.24 11:29:03.972 !00 (EURUSD,H1) время и дата события - 2019.07.24 13:45:00
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор события - 840500001
2019.07.24 11:29:03.972 !00 (EURUSD,H1) тип события из перечисления ENUM_CALENDAR_EVENT_TYPE - CALENDAR_TYPE_INDICATOR
2019.07.24 11:29:03.972 !00 (EURUSD,H1) сектор, к которому относится событие - CALENDAR_SECTOR_BUSINESS
2019.07.24 11:29:03.972 !00 (EURUSD,H1) частота (периодичность) события - CALENDAR_FREQUENCY_MONTH
2019.07.24 11:29:03.972 !00 (EURUSD,H1) режим времени события - CALENDAR_TIMEMODE_DATETIME
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор страны - 840
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя страны (в текущей кодировке терминала) - Соединенные Штаты
2019.07.24 11:29:03.972 !00 (EURUSD,H1) единица измерения значения экономического индикатора - CALENDAR_UNIT_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) важность события - CALENDAR_IMPORTANCE_MODERATE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) множитель значения экономического индикатора - CALENDAR_MULTIPLIER_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) количество знаков после запятой - 1
2019.07.24 11:29:03.972 !00 (EURUSD,H1) URL источника, где публикуется событие - https://www.markiteconomics.com
2019.07.24 11:29:03.972 !00 (EURUSD,H1) код события - markit-manufacturing-pmi
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя события на языке терминала (в текущей кодировке терминала) - Индекс менеджеров по закупкам в производственном секторе от Markit
 

Вопрос к разработчикам:

Почему такой код из документации, с незначительными изменениями

void OnStart()
{
   MqlCalendarValue values[]; 

//--- запросим историю событий от текущего времени до конца сегодняшнего дня.
   if(CalendarValueHistory(values,TimeCurrent(),iTime(_Symbol, PERIOD_D1, 0)+PeriodSeconds(PERIOD_D1))) 
     { 
      PrintFormat("Получены значения событий по country_code=%s: %d", ArraySize(values)); 
//--- выведем значения событий в Журнал 
      ArrayPrint(values);
      
     } 
   else 
     { 
      PrintFormat("Ошибка! Не удалось получить события по стране country_code=%s"); 
      PrintFormat("Код ошибки: %d",GetLastError()); 
     } 
//---
}

выдаёт, что размер массива values равен нулю, но тем не менее распечатывает всё что есть в календаре. То-есть все события получены.

2019.07.24 15:20:33.131 !00 (EURUSD,H1) Получены значения событий по country_code=(non-string passed): 0
2019.07.24 15:20:33.131 !00 (EURUSD,H1)      [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [0] 97265   76020013 2019.07.24 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -1227000 -9223372036854775808             -2405000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [1] 87842  840220012 2019.07.24 17:00:00 1970.01.01 00:00:00          0 -9223372036854775808      1791000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [2] 93625  410010011 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      -400000 -9223372036854775808               400000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [3] 93626  410010012 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      1700000 -9223372036854775808              2900000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [4] 87394  392060016 2019.07.24 23:50:00 2019.06.01 00:00:00          0 -9223372036854775808       800000 -9223372036854775808                    0             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [5] 97012  392070003 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    950000000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [6] 97013  392070004 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    -93100000 -9223372036854775808 -9223372036854775808             0          0

Где, что не успевает отработать?

 
В форматной строке %s лишний
 
Renat Fatkhullin:
В форматной строке %s лишний

Да, спасибо. С этим я уже разобрался. Делая исправления примера из документации накосячил.

 

@Renat Fatkhullin Ренат, можно ли надеяться, что когда-то будет сделана функция подобная TimeGMTOffset() только по времени сервера, а не по локальному? Ведь функции экономического календаря используют время GMT, а локальное время зачастую не совпадает с временем сервера. Выходит, что получив время новости надо поизгаляться переводя его во время терминала. Я понимаю, что могут быть проблемы при вызове такой функции в выходные, но ведь можно определить какую-то ошибку, что в данный момент функция недоступна, или ещё как-то.

Пока я сделал так: в OnInit() считается разница времён и пишется в переменную глобального уровня. Но что-то мне не очень это нравится. На мой взгляд было-бы лучше вызвать встроенную функцию и подправить время новости до времени сервера. Тем более терминалу, наверное доступно время сервера и в выходные.

 
Alexey Viktorov:

@Renat Fatkhullin Ренат, можно ли надеяться, что когда-то будет сделана функция подобная TimeGMTOffset() только по времени сервера, а не по локальному? Ведь функции экономического календаря используют время GMT, а локальное время зачастую не совпадает с временем сервера. Выходит, что получив время новости надо поизгаляться переводя его во время терминала. Я понимаю, что могут быть проблемы при вызове такой функции в выходные, но ведь можно определить какую-то ошибку, что в данный момент функция недоступна, или ещё как-то.

Пока я сделал так: в OnInit() считается разница времён и пишется в переменную глобального уровня. Но что-то мне не очень это нравится. На мой взгляд было-бы лучше вызвать встроенную функцию и подправить время новости до времени сервера. Тем более терминалу, наверное доступно время сервера и в выходные.

Конечно доступно, об этом уже была просьба.

 
Vitaly Muzichenko:

Конечно доступно, об этом уже была просьба.

Виталий, любую просьбу надо аргументировать. Надеюсь я достаточно аргументировал необходимость такой функции. Теперь зависит только от загруженности программистов компании и от того как были поняты и приняты-ли аргументы. Надеюсь.

 

Какую информацию можно получить из календаря: (Значения которые используются программой и мало информативны человеку здесь не перечисляются)

  • Название страны
  • Валюта стран
  • тип события

Событие (митинг, речь и так далее)

Индикатор

Праздник


  • сектор, к которому относится событие

Рынок, биржа

Валовый внутренний продукт (GDP)

Рынок труда

Цены

Деньги

Торговля

Правительство

Бизнес

Потребление

Жилье

Налоги

Праздники


  • текстовое имя события на языке терминала (в текущей кодировке терминала)
  • время и дата события
  • отчетный период события
  • актуальное значение показателя
  • предыдущее значение показателя
  • пересмотренное предыдущее значение показателя
  • прогнозное значение показателя
  • потенциальное влияние на курс валюты

Влияния не указано

Положительное влияние

Отрицательное влияние


К сожалению, пока кроме запрета открытия позиций перед выходом новости, я не встречал других решений. Хочется разобраться какие значения из перечисленных можно использовать и как на них реагировать.

Как я понимаю, выделенные значения очень важны для принятия решения, как реагировать на новость, но не понимаю как. Приглашаю к обсуждению.

 
Alexey Viktorov:

Какую информацию можно получить из календаря: (Значения которые используются программой и мало информативны человеку здесь не перечисляются)

  • Название страны
  • Валюта стран
  • тип события

Событие (митинг, речь и так далее)

Индикатор

Праздник


  • сектор, к которому относится событие

Рынок, биржа

Валовый внутренний продукт (GDP)

Рынок труда

Цены

Деньги

Торговля

Правительство

Бизнес

Потребление

Жилье

Налоги

Праздники


  • текстовое имя события на языке терминала (в текущей кодировке терминала)
  • время и дата события
  • отчетный период события
  • актуальное значение показателя
  • предыдущее значение показателя
  • пересмотренное предыдущее значение показателя
  • прогнозное значение показателя
  • потенциальное влияние на курс валюты

Влияния не указано

Положительное влияние

Отрицательное влияние


К сожалению, пока кроме запрета открытия позиций перед выходом новости, я не встречал других решений. Хочется разобраться какие значения из перечисленных можно использовать и как на них реагировать.

Как я понимаю, выделенные значения очень важны для принятия решения, как реагировать на новость, но не понимаю как. Приглашаю к обсуждению.

Вот мой вариант новостного индикатора. В терминал подается информация о времени выхода новостей по валютам, на выбор, степень важности также выбирается. Инфо отображается вертикальной линией на графике цены. В подокне строим, в хронологическом порядке, гистограмму последних значений актуальных данных к прогнозным по новостям, отнесенных к классу- важных. В зависимости от вида новостей(  Процентные ставки,  Уровень безработицы,  Индекс потребительских цен ,ВВП и др. )раскрашиваем в разные цвета.  Полученный график должен быть синхронизирован по времени и масштабу с графиком цены при переключении ТФ. Также интересует скорость получения актуальных данных.

 
Vladimir Kononenko:

Вот мой вариант новостного индикатора. В терминал подается информация о времени выхода новостей по валютам, на выбор, степень важности также выбирается. Инфо отображается вертикальной линией на графике цены. В подокне строим, в хронологическом порядке, гистограмму последних значений актуальных данных к прогнозным по новостям, отнесенных к классу- важных. Полученный график должен быть синхронизирован по времени с графиком цены при переключении ТФ. Также интересует скорость получения актуальных данных.

Вы имеете в виду гистограммы на всю глубину истории доступной на графике?

Но ведь это для реального применения, в режиме реального времени, не даёт никакой информации. Или я совсем ничего не понял? Ну получили прогноз и актуальное значение, ну поставили гистограмму, а дальше? Только вручную принимать решение?

Скорость обновления данных в календаре я не проверял, а скорость получения готовых данных надо замерять, но нет такого желания, так-как скорость достаточно высока.

Причина обращения: