Native Websocket
- Библиотеки
- Racheal Samson
- Версия: 1.3
- Обновлено: 4 марта 2024
- Активации: 15
Простая в использовании, быстрая, асинхронная библиотека WebSocket для MQL5.
Он поддерживает:
- ws:// и wss:// (защищенный веб-сокет "TLS")
- текстовые и бинарные данные
Он обрабатывает:
- фрагментированное сообщение автоматически (передача больших объемов данных)
- кадры пинг-понга автоматически (подтверждение активности)
Преимущества:
- DLL не требуется.
- Установка OpenSSL не требуется.
- До 128 соединений WebSocket из одной программы
- Различные уровни журнала для отслеживания ошибок
- Возможна синхронизация с виртуальным хостингом MQL5.
- Полностью родной для MQL5.
Пример кода ниже:
//Включить WSMQL.mqh — файл со всеми объявлениями, необходимыми для взаимодействия с библиотекой #include <WSMQL.mqh> // Или импортируйте декларации WebsocketClient.ex5 — переименуйте «Native Websocket.ex5» в «WebsocketClient.ex5» //#import "WebSocketClient.ex5" // WSHANDLE Initialize(void); // ENUM_WEBSOCKET_STATE ClientState(WSHANDLE handle); // void SetMaxSendSize(WSHANDLE handle, int max_send_size); // bool Connect(const WSHANDLE handle, const string url, const uint port = 443, const uint timeout = 5000, bool use_tls = true, ENUM_LOG_LEVEL log_level = LOG_LEVEL_ERROR); // bool Disconnect(WSHANDLE handle, ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); // int SendString(WSHANDLE handle, const string message); // int SendData(WSHANDLE handle, uchar& message_buffer[]); // int SendPong(WSHANDLE handle, const string msg = ""); // int SendPing(WSHANDLE handle, const string msg); // uint ReadString(WSHANDLE handle, string& out); // uint ReadBinary(WSHANDLE handle, uchar& out[]); // uint ReadStrings(WSHANDLE handle, string& out[]); // uint OnReceiveString(WSHANDLE handle, OnMessage callback); // uint OnReceiveBinary(WSHANDLE handle, OnBinaryMessage callback); //#import //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { // Создать экземпляр клиента CWebSocketClient client; // Или инициализировать клиент с помощью метода ниже // WSHANDLE handle = WebSocketClient::Initialize(); // Проверить, инициализирован ли клиент if (!client.Initialized()) // или if(handle == 0) return; string url = "stream.binance.com/ws";// Или wss://stream.binance.com/ws string msg = "{\"params\":[\"btcusdt@bookTicker\"],\"method\":\"SUBSCRIBE\",\"id\":27175}"; //ВНИМАНИЕ: убедитесь, что stream.binance.com добавлен в список WebRequest в разделе Параметры -> Советники // Подключиться к серверу WebSocket if (!client.Connect(url)) // Или if(!WebSocketClient::Connect(handle, url)) return; // Отправить строковое сообщение client.SendString(msg); // Или WebSocketClient::SendString(handle, msg); while (true) { if (IsStopped()) break; // Получить строковые сообщения и обработать их с помощью обратного вызова OnMessage uint frames = client.OnReceiveString(OnMessage); // Или uint frames = WebSocketClient::OnReceiveString(handle, OnMessage); Print("Обработано кадров: ", frames); } // Отключиться от сервера WebSocket Print("Отключение..."); if(client.Disconnect()) // Или if(WebSocketClient::Disconnect(handle)) Print("Отключено!"); } //+------------------------------------------------------------------+ void OnMessage(string message) { Print(message); } //+------------------------------------------------------------------+ //Примеры выходных данных: //{"result":null,"id":27175} //Frames Processed: 1 //--- //{"u":35893555769,"s":"BTCUSDT","b":"27812.78000000","B":"7.14299000","a":"27812.79000000","A":"0.81665000"} //{"u":35893555770,"s":"BTCUSDT","b":"27812.78000000","B":"7.14299000","a":"27812.79000000","A":"0.82309000"} //{"u":35893555771,"s":"BTCUSDT","b":"27812.78000000","B":"7.14964000","a":"27812.79000000","A":"0.82309000"} //Frames Processed: 3
Не стесняйтесь обращаться ко мне за поддержкой и вопросами до/после покупки.
https://www.mql5.com/en/users/nikkirachael
Needed some help to work out some kinks with the library and my code. Racheal was quick and attentive to support!