Некоторые вопросы отпали. С временем разобрался. Оказалось всё просто. Время получаем 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
Где, что не успевает отработать?
Да, спасибо. С этим я уже разобрался. Делая исправления примера из документации накосячил.
@Renat Fatkhullin Ренат, можно ли надеяться, что когда-то будет сделана функция подобная TimeGMTOffset() только по времени сервера, а не по локальному? Ведь функции экономического календаря используют время GMT, а локальное время зачастую не совпадает с временем сервера. Выходит, что получив время новости надо поизгаляться переводя его во время терминала. Я понимаю, что могут быть проблемы при вызове такой функции в выходные, но ведь можно определить какую-то ошибку, что в данный момент функция недоступна, или ещё как-то.
Пока я сделал так: в OnInit() считается разница времён и пишется в переменную глобального уровня. Но что-то мне не очень это нравится. На мой взгляд было-бы лучше вызвать встроенную функцию и подправить время новости до времени сервера. Тем более терминалу, наверное доступно время сервера и в выходные.
@Renat Fatkhullin Ренат, можно ли надеяться, что когда-то будет сделана функция подобная TimeGMTOffset() только по времени сервера, а не по локальному? Ведь функции экономического календаря используют время GMT, а локальное время зачастую не совпадает с временем сервера. Выходит, что получив время новости надо поизгаляться переводя его во время терминала. Я понимаю, что могут быть проблемы при вызове такой функции в выходные, но ведь можно определить какую-то ошибку, что в данный момент функция недоступна, или ещё как-то.
Пока я сделал так: в OnInit() считается разница времён и пишется в переменную глобального уровня. Но что-то мне не очень это нравится. На мой взгляд было-бы лучше вызвать встроенную функцию и подправить время новости до времени сервера. Тем более терминалу, наверное доступно время сервера и в выходные.
Конечно доступно, об этом уже была просьба.
Конечно доступно, об этом уже была просьба.
Виталий, любую просьбу надо аргументировать. Надеюсь я достаточно аргументировал необходимость такой функции. Теперь зависит только от загруженности программистов компании и от того как были поняты и приняты-ли аргументы. Надеюсь.
Какую информацию можно получить из календаря: (Значения которые используются программой и мало информативны человеку здесь не перечисляются)
- Название страны
- Валюта стран
- тип события
Событие (митинг, речь и так далее) |
Индикатор |
Праздник |
- сектор, к которому относится событие
Рынок, биржа |
Рынок труда |
Цены |
Деньги |
Торговля |
Правительство |
Бизнес |
Потребление |
Жилье |
Налоги |
Праздники |
- текстовое имя события на языке терминала (в текущей кодировке терминала)
- время и дата события
- отчетный период события
- актуальное значение показателя
- предыдущее значение показателя
- пересмотренное предыдущее значение показателя
- прогнозное значение показателя
- потенциальное влияние на курс валюты
Влияния не указано |
Положительное влияние |
Отрицательное влияние |
К сожалению, пока кроме запрета открытия позиций перед выходом новости, я не встречал других решений. Хочется разобраться какие значения из перечисленных можно использовать и как на них реагировать.
Как я понимаю, выделенные значения очень важны для принятия решения, как реагировать на новость, но не понимаю как. Приглашаю к обсуждению.
Какую информацию можно получить из календаря: (Значения которые используются программой и мало информативны человеку здесь не перечисляются)
- Название страны
- Валюта стран
- тип события
Событие (митинг, речь и так далее) |
Индикатор |
Праздник |
- сектор, к которому относится событие
Рынок, биржа |
Рынок труда |
Цены |
Деньги |
Торговля |
Правительство |
Бизнес |
Потребление |
Жилье |
Налоги |
Праздники |
- текстовое имя события на языке терминала (в текущей кодировке терминала)
- время и дата события
- отчетный период события
- актуальное значение показателя
- предыдущее значение показателя
- пересмотренное предыдущее значение показателя
- прогнозное значение показателя
- потенциальное влияние на курс валюты
Влияния не указано |
Положительное влияние |
Отрицательное влияние |
К сожалению, пока кроме запрета открытия позиций перед выходом новости, я не встречал других решений. Хочется разобраться какие значения из перечисленных можно использовать и как на них реагировать.
Как я понимаю, выделенные значения очень важны для принятия решения, как реагировать на новость, но не понимаю как. Приглашаю к обсуждению.
Вот мой вариант новостного индикатора. В терминал подается информация о времени выхода новостей по валютам, на выбор, степень важности также выбирается. Инфо отображается вертикальной линией на графике цены. В подокне строим, в хронологическом порядке, гистограмму последних значений актуальных данных к прогнозным по новостям, отнесенных к классу- важных. В зависимости от вида новостей( Процентные ставки, Уровень безработицы, Индекс потребительских цен ,ВВП и др. )раскрашиваем в разные цвета. Полученный график должен быть синхронизирован по времени и масштабу с графиком цены при переключении ТФ. Также интересует скорость получения актуальных данных.
Вот мой вариант новостного индикатора. В терминал подается информация о времени выхода новостей по валютам, на выбор, степень важности также выбирается. Инфо отображается вертикальной линией на графике цены. В подокне строим, в хронологическом порядке, гистограмму последних значений актуальных данных к прогнозным по новостям, отнесенных к классу- важных. Полученный график должен быть синхронизирован по времени с графиком цены при переключении ТФ. Также интересует скорость получения актуальных данных.
Вы имеете в виду гистограммы на всю глубину истории доступной на графике?
Но ведь это для реального применения, в режиме реального времени, не даёт никакой информации. Или я совсем ничего не понял? Ну получили прогноз и актуальное значение, ну поставили гистограмму, а дальше? Только вручную принимать решение?
Скорость обновления данных в календаре я не проверял, а скорость получения готовых данных надо замерять, но нет такого желания, так-как скорость достаточно высока.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хочу разобраться с работой экономического календаря MQL5, но что-то не очень движется. Потратил почти весь вчерашний день и начало сегодняшнего, но так и не понял почему CalendarValueHistory возвращает не все события. Или я их, эти события чуток путаю...
Вчера я получал 4 события в хх:45 как и написано в календаре. Часы события пишу как "хх" потому, что полученное время не совпадает с указанным в таблице. Но хотя-бы можно было понять, что это из-за разницы указанного времени и времени терминала или сервера откуда получены эти данные. А сегодня получаю только 3 события с минутами :45 и не могу понять причину.
И вопрос к разработчикам: Почему в массиве сначала дата 2019.07.25 00:00 и следующие строки отсортированы по возрастанию. См. полученный список.