Bybit MT5 - страница 24

 
Forester #:
Еще не занимался этим подробно. Нашел лимиты https://bybit-exchange.github.io/docs/v5/rate-limit - работать можно чаще.

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

Вы один (или сколько нужно) раз подключились (создали соединение) и данные шарашатся через колл-бэки с макс. частотой, указанной в моем сообщении (это скопировано с сайта байбита - Push frequency).

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

Насчет десериализации - что-то очень много. Не мерил, но померю и напишу результаты.

То, что у Вас в логе - как понял это загрузка описаний символов. Операция однократная после запуска программы и вообще без разницы время загрузки.

У меня асинхронно грузятся описания символов так:

09.05.2025 17:03:09.709 - Start Connecting...
09.05.2025 17:03:09.776 - Connected in 66,4 ms
09.05.2025 17:03:10.025 - Inverse Symbol Info Loaded in 468,1 ms
09.05.2025 17:03:10.032 - Spot Symbol Info Loaded in 676,9 ms
09.05.2025 17:03:10.064 - Linear Symbol Info Loaded in 845,4 ms

 
Dmitriy Skub #:

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

Вы один (или сколько нужно) раз подключились (создали соединение) и данные шарашатся через колл-бэки с макс. частотой, указанной в моем сообщении (это скопировано с сайта байбита - Push frequency).

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

Насчет десериализации - что-то очень много. Не мерил, но померю и напишу результаты.

То, что у Вас в логе - как понял это загрузка описаний символов. Операция однократная после запуска программы и вообще без разницы время загрузки.

У меня асинхронно грузятся описания символов так:

09.05.2025 17:03:09.709 - Start Connecting...
09.05.2025 17:03:09.776 - Connected in 66,4 ms
09.05.2025 17:03:10.025 - Inverse Symbol Info Loaded in 468,1 ms
09.05.2025 17:03:10.032 - Spot Symbol Info Loaded in 676,9 ms
09.05.2025 17:03:10.064 - Linear Symbol Info Loaded in 845,4 ms

Тоже эти медленные запросы 1 раз при запуске планирую делать. Потом они не нужны.
 

Кто и как подключение к стриму через сокеты делал?
Сегодня на основе этой статьи экспериментировал https://www.mql5.com/ru/articles/8196
Но не удалось получить соединеие к //stream.bybit.com/v5/public/linear 
Получаю сообщение

400 ERROR
The request could not be satisfied.
Bad request.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.

Как я понял это CDN CloudFront отклоняет запрос. Даже пробовал испорченый URL //stream.bybit.com/v5/public/linear_0 в надежде получить 404 ошибку, но и тут получил 400.
При этом при запросе из броузера получаю другой 400 ответ от правильного адреса "the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header" и 404 от неправильного. Т.е. проблема не в высоком траффике. Видимо в конфигурации запроса.

К тому же не смог получить ответ от 127.0.0.1 при запущеном локальном сервере из статьи.
И с тестового wss://echo.websocket.org не смог получить ответ.
В комментах к статье сообщения о проблемах и костыли... видимо не рабочий вариант.

Завтра попробую подключиться по новой статье того же автора  https://www.mql5.com/ru/articles/10275
К статье ни одного комментария. Возможно без багов работает. Сделано через WinAPI. И придется на Win10 тестировать.

Или есть другие проверенные варианты вебсокетов? Без dll.

WebSocket для MetaTrader 5
WebSocket для MetaTrader 5
  • www.mql5.com
До появления сетевых функций в обновленном MQL5 API, приложения MetaTrader были ограничены в возможности подключаться и взаимодействовать с сервисами на основе протокола WebSocket. Сейчас ситуация изменилась. В этой статье мы рассмотрим реализацию библиотеки WebSocket на чистом MQL5. Будут представлены краткое описание протокола WebSocket и пошаговое руководство по использованию полученной библиотеки.
 

Глянул код новой статьи, а там

#import "winhttp.dll"

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

 
Forester #:

Кто и как подключение к стриму через сокеты делал?

А с WebRequest всё ок на том же сервере? Т.е. с API-ключами и с заголовками запросов разобрались? Не использует ли тот сервер для WS нестандартные порты? MQL5 разрешает только стандартные, в отличие от WinAP WS.

 
Edgar Akhmadeev #:

А с WebRequest всё ок на том же сервере? Т.е. с API-ключами и с заголовками запросов разобрались? Не использует ли тот сервер для WS нестандартные порты? MQL5 разрешает только стандартные, в отличие от WinAP WS.

Да, с WebRequest все получилось, но пока к публичному адресу без ключей.

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

Кстати когда начал с WebRequest экспериментировать, то тоже получал ошибку от CloudFront, но 403. Как она потом исчезла - я так и не понял. Просто CloudFront начал пропускать.

Порт 443 - нашел в примерах кода на др. языках
 
Forester #:


Или есть другие проверенные варианты вебсокетов? Без dll.

В книге по алготрейдингу. Исходники - в кодебейз, актуальные правки прикладывались в обсуждении английской ветки.

Учебник по MQL5: Расширенные средства языка / Проекты / Теоретические основы протокола WebSockets
Учебник по MQL5: Расширенные средства языка / Проекты / Теоретические основы протокола WebSockets
  • www.mql5.com
Протокол WebSocket-ов строится поверх сетевых соединений TCP/IP, которые характеризуются IP-адресом (или заменяющим его доменным именем), а также...
 
Спасибо - буду пробовать
 
Forester #:
Тоже эти медленные запросы 1 раз при запуске планирую делать. Потом они не нужны.
Ну да, все правильно. Состав символов, конечно, меняется периодически, но это не оперативная инфа.
 

C вашей библиотекой есть подключение и обмен с локальным сервером.Тестировал таким скриптом:

#property script_show_inputs

#include "MQL5Book/AutoPtr.mqh"
#include "MQL5Book/wsclient.mqh"

void OnStart(){
   string Address = "wss://stream.bybit.com/v5/public/linear";
   Address = "wss://echo.websocket.org";
  //Address="127.0.0.1:7681";
   string headers="";
   WebSocketClient<Hybi> wss(Address,!true);
   Print("Opening...");
   if(wss.open(headers)){
      Print("Waiting for welcome message (if any)");
      AutoPtr<IWebSocketMessage> welcome(wss.readMessage());
      Print("Sending message...");
      wss.send("test");
      Print("Receiving echo...");
      AutoPtr<IWebSocketMessage> echo(wss.readMessage());
   }else{// something went wrong - not upgraded or not connected
      if(wss.isConnected()){
         Print("Can't upgrade to websockets");
         bool resolved = false;  string headers[][2], updated_headers="";
         if(wss.getHeaders(headers)) {resolved = 0; } // TODO: analyze status and solve it
         if(resolved){ wss.open(updated_headers);}else{Print("Close socketl.");wss.close();} // try again or close to prevent further attempts to read/write from non-upgraded socket
      }
   }
}

Подключения к ws://echo.websocket.org  выдает 301 редирект на wss://echo.websocket.org.

А подключение к wss://echo.websocket.org не устанавливается с таким сообщением:

Opening...
Connecting to wss://echo.websocket.org:443/
TLS handshake error: 5274
TLS:
  Owner:      /CN=echo.websocket.org
  Issuer:     /C=US/O=Let's Encrypt/CN=E5
  Number:     05:0c:30:77:7d:20:e0:89:9b:97:16:ea:c9:e7:11:2c:07:9d
  Signature:  de56850e71d158edfe773ba56ed5b71d9f513c9f
  Expiration: 2025.07.16 23:27:25

Выдана информация о ключе шифрования.

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