Wininet.dll - как добиться высокой скорости получения данных из интернета при создании новостного советника

 

Приветствую всех!!! Прошу подсказать как решить следующую задачу: получать данные с экономического календаря с investing.com в советник, как только они там публикуются, т.е. начинать "слушать" сайт незадолго до публикации экономического показателя и получать его как только он будет опубликован с задержкой, по-крайней мере, не более 100 мс. Извиняюсь, если моя постановка вопроса не вполне корректна, т.к. подробно разбираться с тем, каким образом происходит обмен информацией по HTTP протоколу я начал только сейчас, как и с Wininet, и, соответственно, мне не известно большое количество нюансов.

Попробовал использовать для этого WinInet и WebRequest, и получил для основанного на  wininet простого скрипта для скачивания страницы из интернет (https://www.mql5.com/ru/code/7089)  среднее время установления сессии (среднее время выполнения функций InternetAttemptConnect, InternetOpen и InternetOpenUrl в приведенном коде) около 500мс, а время прочтения данных (InternetReadFile) около 1400 мс, итого  1900 мс. Использование функции WebRequest (код соответствует 1-му примеру https://www.mql5.com/ru/docs/common/webrequest) позволяет получить данные чуть побыстрее - 1050 мс, однако, я так понимаю, что повлиять на скорость запроса WebRequest я никак не могу.

Пробовал колдовать (не вполне понимая, как эти флаги будут работать, и будут ли работать вообще) с флагами в InternetOpenUrl, но не помогло (что именно, приводить не буду, потому что, по-моему, особого смысла это не имело).

Надеюсь, что при помощи WinInet, либо какого-то другого dll эту задачу решить можно, и уважаемые форумчане мне дадут необходимые советы, однако, была идея попытаться написать приложение для браузера, которое бы записывало показатель в текстовый файл сразу после его публикации, а советник считывал показатель уже из этого файла, однако, для этого мне надо будет с нуля разбираться в Java, и перед этим я бы хотел спросить у специалистов в этой области (написание приложений для браузера), если таковые имеются, а реально ли такую программу написать, и попросить подсказать правильное направление, если это осуществимо.


Заранее спасибо за ответы.

s_wininet
s_wininet
  • голосов: 10
  • 2007.04.17
  • Dmitry Fedoseev
  • www.mql5.com
В скрипте демонстрируется использование функций библиотеки Windows wininet.dll для загрузки из интернета веб-страницы. В качестве примера загружается стараница форума mql4.com c профилем автора скрипта...
 

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

Эти ресурсы не построены как датафиды с нулевой задержкой. Обычно уже через несколько сотен быстрых запросов ваш IP адрес будет заблокирован.

А вот наш сервис календаря именно построен как датафид с нулевой задержкой. Сейчас вы выдите его только на сайте, но в следующих билдах МТ5 мы включим доставку рилтаймового транзакционного календаря. Его события будут доступны в MQL5, включая новый обработчик событий.

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

Рекомендую не сканировать наш веб календарь - будут тоже автоматические блокировки.

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

Через один билд будет и рилтаймовый календарь в MQL5.
 
Спасибо за ответы, жду последующий билд.
 
Renat Fatkhullin:

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

Эти ресурсы не построены как датафиды с нулевой задержкой. Обычно уже через несколько сотен быстрых запросов ваш IP адрес будет заблокирован.

А вот наш сервис календаря именно построен как датафид с нулевой задержкой. Сейчас вы выдите его только на сайте, но в следующих билдах МТ5 мы включим доставку рилтаймового транзакционного календаря. Его события будут доступны в MQL5, включая новый обработчик событий.

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

Рекомендую не сканировать наш веб календарь - будут тоже автоматические блокировки.

Спасибо за ответ, Ренат, но я, наверное, несколько переформулирую вопрос (хотя не берусь утверждать, что он будет поставлен достаточно корректно). На сервере инвестинга есть скрипт, благодаря которому значения показателя публикуются в браузере, как только показатель поступает на сервер. Можно ли каким-нибудь образом заставить советник в MT5 везти себя как браузер, получая, благодаря этому скрипту на сервере, значения показателя.

 
Через штатный WebRequest
 

Как и ожидалось, информация о изменениях курсов на  investing.com  передается пользователям сайта через websocket соединение:
wss://stream66.forexpros.com/echo/457/zs_x7kxx/websocket

Если нужна реальная скорость возможным решением будет:
Написать отдельного советника, который используя DLL/WinAPI получает информацию от investing.com через websocket, парсит полученные данные и отправляет кастомные события MQL на чарт торгующего советника.
Но какая общая задержка обработки кастомного события - тоже не известно, нужно исследовать.

 
Renat Fatkhullin:
Коммуникационную систему запускаем уже.

Через один билд будет и рилтаймовый календарь в MQL5.

1) Будет ли в мобильной версии MT5 вывод на график новостей (по аналогии с версией для компьютера)?

2) Будет ли возможность использовать на мобильной версии MT5 собственные индикаторы (написанные для MT5, возможно с ограничениями)? Железо мобильных устройств, теоретически давно уже может тянуть индикаторы не только из официальной поставки.

 
Renat Fatkhullin:
Через штатный WebRequest

Может уже где-то отвечали, но как насчет штатного WebSocketRequest в следующих версиях?

 

ПОДСКАЖИТЕ!

Если ли возможность вести торговлю без терминала, то есть с веб-сайта средствами POST-запросов вести полноценную торговлю?

Спасибо!

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