Native Websocket
- Bibliotecas
- Racheal Samson
- Versión: 1.418
- Actualizado: 10 enero 2025
- Activaciones: 15
Una librería WebSocket asíncrona, rápida y fácil de usar para MQL5.
Soporta:
- ws:// y wss:// (WebSocket seguro "TLS")
- datos de texto y binarios
Maneja:
- mensajes fragmentados automáticamente (transferencia de datos grandes)
- ping-pong frames automáticamente (keep-alive handshake)
Ventajas:
- No requiere DLL.
- No requiere instalación de OpenSSL.
- Hasta 128 conexiones Web Socket desde un solo programa.
- Varios niveles de registro para rastreo de errores
- Puede sincronizarse con el Hosting Virtual MQL5.
- Completamente nativo de MQL5.
Pulse aquí para descargar la última versión de WSMQL. mqh.
Por favor, asegúrese de que la librería MetaTrader descargada se descarga/nombra como Native Websocket.ex5 tal y como requiere WSMQL.mqh
You can always contact me for custom pricing/requests/support/questions
Código de ejemplo a continuación:
//include WSMQL.mqh - un archivo que contiene todas las declaraciones necesarias para interactuar con la biblioteca #include <WSMQL.mqh> // Métodos siguientes // clase CWebSocketClient { // público: // bool Initialized(void); // Comprueba si el cliente WebSocket está inicializado. // ENUM_WEBSOCKET_STATE State(void); // Devuelve el estado actual de la conexión WebSocket. // void SetMaxSendSize(int max_send_size); // Establece el tamaño máximo de envío para los mensajes WebSocket. // bool SetOnMessageHandler(OnWebsocketMessage callback); // Establece la función callback para manejar los mensajes de texto entrantes. // bool SetOnPingHandler(OnWebsocketMessage callback); // Establece la función callback para manejar los mensajes ping entrantes. // bool SetOnPongHandler(OnWebsocketMessage callback); // Establece la función callback para manejar los mensajes pong entrantes. // bool SetOnCloseHandler(OnWebsocketMessage callback); // Establece la función callback para manejar los cierres de conexión WebSocket. // bool SetOnBinaryMessageHandler(OnWebsocketBinaryMessage callback); // Establece la función callback para manejar los mensajes binarios entrantes. // bool Connect(const string url, const uint port = 443, const uint timeout = 5000, bool use_tls = true, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Se conecta a un servidor WebSocket. // bool ConnectUnsecured(const string url, const uint port = 80, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Se conecta a un servidor WebSocket utilizando una conexión no segura. // bool ConnectSecured(const string url, const uint port = 443, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Se conecta a un servidor WebSocket utilizando una conexión segura. // bool Disconnect(ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); // Desconecta del servidor WebSocket. // int SendString(const string message); // Envía un mensaje de cadena al servidor WebSocket. // int SendData(uchar& message_buffer[]); // Envía datos binarios al servidor WebSocket. // int SendPong(const string msg = ""); // Envía un mensaje pong al servidor WebSocket. // int SendPing(const string msg); // Envía un mensaje ping al servidor WebSocket. // uint ReadString(string& out); // Lee un mensaje de cadena del servidor WebSocket. // uint ReadStrings(string& out[]); // Lee múltiples mensajes de cadena del servidor WebSocket. // uint OnReceiveString(); // Recibe y procesa los mensajes de cadena entrantes. // uint OnReceiveBinary(); // Recibe y procesa los mensajes binarios entrantes. // uint OnMessage(); // Recibe y procesa los mensajes WebSocket entrantes. // }; // Crear una instancia del Cliente CWebSocketClient client;//Declaré esto globalmente porque OnPingMessage lo requiere //+------------------------------------------------------------------+ //| Función de inicio del programa de script| //+------------------------------------------------------------------+ void OnStart() { // Comprobar si el cliente está inicializado if (!client.Initialized()) { ZeroHandle();//Limpiar todos los clientes return; } // Establecer el manejador OnMessage para recibir mensajes de texto client.SetOnMessageHandler(OnMessage);// utilizar SetOnBinaryMessageHandler para mensajes binarios // Establece el manejador OnPing para recibir mensajes ping, // Pong se enviará automáticamente si no se establece este controlador client.SetOnPingHandler(OnPingMessage);// usa SetOnPongHandler para los mensajes pong // Declaración de URL y msg string url = "stream.binance.com/ws";//O wss://stream.binance.com/ws string msg = "{\"params\":[\"btcusdt@bookTicker\"],\"method\":\"SUBSCRIBE\",\"id\":27175}"; //ALERTA: Asegúrese de que stream.binance.com ha sido añadido a la lista WebRequest en Opciones -> pestaña Asesores Expertos /* Conéctese al servidor WebSocket a través de cualquiera de las funciones enumeradas a continuación según sea necesario */ // Totalmente configurable // if (!client.Connect(url/* , 80 || 443, 5000, false || true, LOG_LEVEL_INFO */)) { // Para conexión No-TLS(no segura) - sin SSL requerido // if (!client.ConnectUnsecured(url/* , 80, 5000, LOG_LEVEL_INFO */)) { // Para conexión TLS(segura) - con SSL requerido if (!client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */)) { ZeroHandle();//Limpiar todos los clientes return; } // Enviar un mensaje de cadena client.SendString(msg); // Procesar mensajes hasta que el script se detenga while (true) { if (IsStopped()) break; if (client.State() == CLOSED) { Print("Socket connection closed"); //¿Reconectar? //client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */) //¿O romper el bucle? break; } /* NB: Sólo necesitas una de estas funciones */ // Recibe todos los mensajes y los procesa usando sus respectivos On{Message | BinaryMessage | Ping | Pong | Close} callback(handler) uint frames = client.OnMessages(); // Recibir mensajes y procesar sólo marcos TEXT usando la llamada de retorno OnMessage // uint frames = client.OnStringMessages(); // Recibir mensajes y procesar sólo tramas BINARIAS utilizando la llamada de retorno OnBinaryMessage // uint frames = client.OnBinaryMessages(); if (frames > 0) Print("Frames Processed : ", frames); } // Desconectar del servidor WebSocket Print("Disconnecting..."); if (client.Disconnect()) { Print("Disconnected!"); } else { Print("Failed to disconnect!"); } //Limpiar todos los clientes ZeroHandle(); } //+------------------------------------------------------------------+ void OnMessage(string message) { Print(message); } //+------------------------------------------------------------------+ void OnPingMessage(string message) { Print("ping received:", message); if (client.SendPong() > 0) { Print("Pong sent successfully."); } else { Print("Failed to send pong."); } } //Salidas de muestra: //{"result":null,"id":27175} //Cuadros procesados : 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"} //Cuadros procesados : 3 //--- //Cuadros procesados : 1 //ping recibido: ping //Pong enviado con éxito.
No dude en ponerse en contacto conmigo para soporte y preguntas antes / después de la compra.

This library is amazing. I had some issues because the library was not in the right folder but after fixing that, everything worked. Good job. PS: It seems that LOG_LEVEL_NONE is not working, I get debug level with that or maybe I'm not using it right, anyway, I put LOG_LEVEL_ERROR to not be spammed by logs