В самом деле, штатные Calendar-функции тяжелы для понимания. Отлично, что автор разобрался и снабдил статью примерами.
Правда, простота предложенного высокоуровневого календарного API не кажется очевидной. Трудно.
Наверное, нужно обозначить список каких-то наиболее востребованных сценариев применения Календаря. И попробовать их реализовать.
В самом деле, штатные Calendar-функции тяжелы для понимания. Отлично, что автор разобрался и снабдил статью примерами.
Правда, простота предложенного высокоуровневого календарного API не кажется очевидной. Трудно.
Наверное, нужно обозначить список каких-то наиболее востребованных сценариев применения Календаря. И попробовать их реализовать.
Хотелось бы иметь способ обеспечить стопроцентную гарантию синхронизации новостей с котировками в произвольный момент времени.
В самом деле, штатные Calendar-функции тяжелы для понимания. Отлично, что автор разобрался и снабдил статью примерами.
Правда, простота предложенного высокоуровневого календарного API не кажется очевидной. Трудно.
Наверное, нужно обозначить список каких-то наиболее востребованных сценариев применения Календаря. И попробовать их реализовать.
Спасибо за мнение :-)
На мой взгляд некоторая трудность восприятия связана с тем, что класс CiCalendarInfo имеет дело с тремя сущностями: странами, событиями и значениями. Если сравнивать его например с торговыми классами СБ CAccountInfo, CSymbolInfo и т.п., то там в каждом классе 1 объект - счёт, символ и т.п. Может стоило бы сделать иерархию классов, к примеру такую: базовый класс - CiCalendarBaseInfo, потомки - CiCalendarCountryInfo, CiCalendarEventInfo и CiCalendarValueInfo. Но для последних трёх есть свои аналоги в виде структур. Поэтому от идеи отказался.
Наверное, нужно обозначить список каких-то наиболее востребованных сценариев применения Календаря. И попробовать их реализовать.
Так их может быть ровно столько, сколько идей в плане использования данных календаря. Можно сделать простой информер о выходе события, календарную панель, советник, которые торгует или учитывает время выхода новостей и пр. Можно брать данные макроэкономических индикаторов и изучать их влияние на курсы, привлекая нейросети. Big data одним словом...
Удобство в том, что не нужно куда-то обращаться в другой источник. Всё можно делать в среде MQL5.
Дмитрий, вот например штатная функция.
int CalendarValueLast( ulong& change_id, // идентификатор изменения MqlCalendarValue& values[], // массив для получения описаний значений const string country_code=NULL, // кодовое имя страны по ISO 3166-1 alpha-2 const string currency=NULL // кодовое наименование валюты страны );
В ней видно, что change_id - это параметр по ссылке. Т.е. сервер нам его возвращает. Это серверная константа. Когда значение меняется, значит, что изменилось состояние базы данных календаря. В документации есть пример советника.
Да, мы также можем отправить последнее известное значение change_id. Если состояние базы поменяется, то функция CalendarValueLast() вернёт нам кол-во новых событий, а наш отправленный change_id перепишет на новый.

- www.mql5.com
Дмитрий, вот например штатная функция.
В ней видно, что change_id - это параметр по ссылке. Т.е. сервер нам его возвращает. Это серверная константа. Когда значение меняется, значит, что изменилось состояние базы данных календаря. В документации есть пример советника.
Тогда понятно. Спасибо.
Нашел в справке:
CalendarValueLastЕсли в функцию передан change_id = 0, то функция всегда возвращает ноль, но при этом в change_id возвращается текущее состояние базы Календаря.
Нашел в справке:
CalendarValueLast
Если в функцию передан change_id = 0, то функция всегда возвращает ноль, но при этом в change_id возвращается текущее состояние базы Календаря.
Да, есть такое.
У меня в примере индикатора есть такие строчки, когда prev_calculated == 0:
//--- just to get a change id MqlCalendarValue values[]; gPtrValuesInfo.ValueLastSelectByEvent(gChangeId, values);
И тут gChangeId=0. Обнуляется в блоке инициализации. Хотя наверное правильнее обнулять gChangeId всякий раз когда prev_calculated == 0. И сделать эту переменную локальной.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Рецепты MQL5 – Экономический календарь:
В статье освещаются программные возможности по работе с Экономическим календарём. Для этих целей создаётся класс для упрощенного доступа к свойствам календаря и получения значений событий. В качестве практического примера предлагается запрограммировать индикатор, использующий данные по чистому объёму спекулятивных позиций от CFTC.
Поработаем со структурой временного ряда в следующем примере. Скрипт Test_TS.mq5 получает данные по нон-фармам США с 1 января 2016 по 1 ноября 2021 и отображает их на научном графике. Сделаем так, чтобы на графике было две кривые - фактические и прогнозные значения. В качестве временной шкалы возьмём отчётный период события.
После запуска скрипта получим, во-первых, вывод значений временного ряда в журнал, а во-вторых — отрисовку диаграммы на графике (Рис.2).
Рис.2 Данные по американским нон-фармам (2016-2021)
Автор: Denis Kirichenko