Предложение: PUSH-события для экономического календаря MetaTrader 5 реализованного MetaQuotes.

Здравствуйте.

Предлагаю рассмотреть возможность добавления PUSH / событийного механизма для экономического календаря MetaTrader 5, реализованного MetaQuotes.

Сейчас советнику для определения момента появления нового значения Actual приходится регулярно вызывать CalendarValueLast() и фактически постоянно опрашивать календарь.

Было бы значительно удобнее иметь событийный механизм, например что-то вроде:

OnCalendarEvent()

или функцию подписки на обновления календаря, чтобы советник получал новое значение Actual сразу после его появления на серверах MetaQuotes, без постоянного polling.

Это дало бы несколько преимуществ:

  • уменьшение количества постоянных запросов к календарю;

  • снижение нагрузки на серверы MetaQuotes;

  • уменьшение задержки получения Actual;

  • возможность более корректной автоматизации систем, работающих на экономических новостях.

Также было бы очень полезно, если вместе с событием передавалось точное серверное время появления Actual на стороне MetaQuotes, желательно с точностью до миллисекунд. Это позволило бы объективно измерять задержку получения экономических данных.

Например, логика могла бы выглядеть примерно так:

OnCalendarEvent(event_id, actual, forecast, previous, server_timestamp)

Разумеется, конкретная реализация может быть другой.

Главная идея — дать MQL5 возможность подписаться на обновления встроенного экономического календаря MetaTrader 5 и получать их сразу после появления новых данных, вместо постоянных вызовов CalendarValueLast() .

Возможно ли технически реализовать такой механизм? Рассматривается ли подобная функциональность в будущих версиях MetaTrader 5?

Alexander Bervinov:
Сейчас советнику для определения момента появления нового значения Actual приходится регулярно вызывать CalendarValueLast() и фактически постоянно опрашивать календарь.

Это просто у вас неоптимально сделано. Для большинства событий указано время, у вас есть таймер и все карты вам в руки - реализуйте свой OnCalendarEvent(), с фильтрами, алертами, блекджеком и девами 

Maxim Kuznetsov #:
Это просто у вас неоптимально сделано. Для большинства событий указано время, у вас есть таймер и все карты вам в руки - реализуйте свой OnCalendarEvent(), с фильтрами, алертами, блекджеком и девами 

Я как раз имею в виду не эмуляцию события через OnTimer() . Время публикации известно, но точный момент появления Actual на сервере MetaQuotes заранее неизвестен. Таймер всё равно заставляет советник после времени релиза постоянно вызывать CalendarValueLast() и проверять, появились ли новые данные.

Главное здесь — скорость получения фактического значения Actual. Хотелось бы, чтобы терминал сам генерировал событие в момент получения нового Actual от сервера MetaQuotes, например через OnCalendarEvent() , без polling со стороны советника.

А точное серверное время появления Actual нужно прежде всего для измерения задержки: чтобы можно было посчитать, через сколько миллисекунд после официального релиза данные дошли до MetaQuotes и затем до терминала.

Если терминал и сейчас получает обновления календаря PUSH-ом, а CalendarValueLast() только читает уже обновлённый локальный кэш, было бы интересно узнать, так ли это.

Весь смысл именно в скорости доставки Actual, а timestamp — как инструмент измерения задержки.

И это, скорее, вопрос именно к разработчикам MetaQuotes: как сейчас технически доставляются обновления экономического календаря в терминал и возможно ли добавить встроенное событие MT5 для получения Actual без постоянного опроса сервера.