支持中心 帮助文档 联系我们
📱 微信: 18391752892 | 💬 QQ: 3313198376 | ✈️ Telegram | 📧 fishfx123@gmail.com
EURUSD 1.0856 +0.12% GBPUSD 1.2678 +0.08% USDJPY 149.23 -0.15% XAUUSD 2034.56 +0.34% EURUSD 1.0856 +0.12% GBPUSD 1.2678 +0.08% USDJPY 149.23 -0.15% XAUUSD 2034.56 +0.34%

Native Websocket

👤 作者: Racheal Samson

5.0 分

¥245.00

📌 版本: v1.418
📥 下载: 0
⭐ 评分: 5.0

📝 产品详情

Native Websocket

作者Racheal Samson
版本v1.418
更新2023-06-27T11:26:34
激活数15
原价$35 USD

An easy to use, fast, asynchronous WebSocket library for MQL5.

It supports:

  • ws:// and wss:// (Secure "TLS" WebSocket)
  • text and binary data

It handles:

  • fragmented message automatically (large data transfer)
  • ping-pong frames automatically (keep-alive handshake)

Benefits:

  • No DLL required.
  • No OpenSSL installation required.
  • Up to 128 Web Socket Connections from a single program.
  • Various Log Levels for error tracing
  • Can be synchronized to MQL5 Virtual Hosting.
  • Completely native to MQL5.

Click here to Download the latest WSMQL.mqh
Please ensure the MetaTrader downloaded library is downloaded/named as Native Websocket.ex5 as required by WSMQL.mqh

Sample code below:

//include WSMQL.mqh - a file that has all the declarations required to interact with the library
#include <WSMQL.mqh>
// Methods below
// class CWebSocketClient {
// public:
//    bool Initialized(void); // Checks if the WebSocket client is initialized.
//    ENUM_WEBSOCKET_STATE State(void); // Returns the current state of the WebSocket connection.
//    void SetMaxSendSize(int max_send_size); // Sets the maximum send size for WebSocket messages.

//    bool SetOnMessageHandler(OnWebsocketMessage callback); // Sets the callback function for handling incoming text messages.
//    bool SetOnPingHandler(OnWebsocketMessage callback); // Sets the callback function for handling incoming ping messages.
//    bool SetOnPongHandler(OnWebsocketMessage callback); // Sets the callback function for handling incoming pong messages.
//    bool SetOnCloseHandler(OnWebsocketMessage callback); // Sets the callback function for handling WebSocket connection closures.
//    bool SetOnBinaryMessageHandler(OnWebsocketBinaryMessage callback); // Sets the callback function for handling incoming binary messages.

//    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); // Connects to a WebSocket server.
//    bool ConnectUnsecured(const string url, const uint port = 80, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Connects to a WebSocket server using an unsecured connection.
//    bool ConnectSecured(const string url, const uint port = 443, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Connects to a WebSocket server using a secured connection.

//    bool Disconnect(ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); // Disconnects from the WebSocket server.
//    int  SendString(const string message); // Sends a string message to the WebSocket server.
//    int  SendData(uchar& message_buffer[]); // Sends binary data to the WebSocket server.
//    int  SendPong(const string msg = ""); // Sends a pong message to the WebSocket server.
//    int  SendPing(const string msg); // Sends a ping message to the WebSocket server.
//    uint ReadString(string& out); // Reads a string message from the WebSocket server.
//    uint ReadStrings(string& out[]); // Reads multiple string messages from the WebSocket server.
//    uint OnReceiveString(); // Receives and processes incoming string messages.
//    uint OnReceiveBinary(); // Receives and processes incoming binary messages.
//    uint OnMessage(); // Receives and processes incoming WebSocket messages.
// };
// Create an instance of the Client
CWebSocketClient client;//I declared this globally because of OnPingMessage requiring it
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
   // Check if the client is initialized
   if (!client.Initialized()) {
      ZeroHandle();//Cleanup all clients
      return;
   }

   // Set OnMessage handler to receive text messages
   client.SetOnMessageHandler(OnMessage);// use SetOnBinaryMessageHandler for binary messages

   // Set OnPing handler to receive ping messages, 
   // Pong will be automatically sent if this handler is not set
   client.SetOnPingHandler(OnPingMessage);// use SetOnPongHandler for pong messages

   // URL and msg declaration
   string url = "stream.binance.com/ws";//Or wss://stream.binance.com/ws
   string msg = "{\"params\":[\"btcusdt@bookTicker\"],\"method\":\"SUBSCRIBE\",\"id\":27175}";
   //ALERT: Make sure stream.binance.com has been added to WebRequest list in Options -> Expert Advisors tab

   /*

    Connect to the WebSocket server through either of the below-listed functions as required

   */

   // Fully Configurable
   // if (!client.Connect(url/* , 80 || 443, 5000, false || true, LOG_LEVEL_INFO */)) { 

   // For Non-TLS(unsecured) connection - without SSL required
   // if (!client.ConnectUnsecured(url/* , 80, 5000, LOG_LEVEL_INFO */)) {

   // For TLS(secured) connection - with SSL required
   if (!client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */)) {
      ZeroHandle();//Cleanup all clients
      return;
   }

   // Send a string message
   client.SendString(msg);

   // Process messages until the script is stopped
   while (true) {
      if (IsStopped())
         break;

      if (client.State() == CLOSED) {
         Print("Socket connection closed");
         //Reconnect?
         //client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */)
         //Or break the loop?
         break;
      }

      /*
         NB: You only need one of these functions
      */

      // Receive all messages and process them using their respective On{Message | BinaryMessage | Ping | Pong | Close} callback(handler)
      uint frames = client.OnMessages();

      // Receive messages and process only TEXT frames using the OnMessage callback
      // uint frames = client.OnStringMessages();

      // Receive messages and process only BINARY frames using the OnBinaryMessage callback
      // uint frames = client.OnBinaryMessages();

      if (frames > 0)
         Print("Frames Processed : ", frames);
   }

   // Disconnect from the WebSocket server
   Print("Disconnecting...");

   if (client.Disconnect()) {
      Print("Disconnected!");
   }
   else {
      Print("Failed to disconnect!");
   }

   //Cleanup all clients
   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.");
   }
}
//Sample Outputs:
//{"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
//---
//Frames Processed : 1
//ping received: ping
//Pong sent successfully.

Feel free to contact me for support and questions before/after purchase.

https://www.mql5.com/en/users/nikkirachael

安全须知

本产品仅通过 MQL5.com 官方渠道获取。其他渠道版本可能缺少完整功能和技术支持。

EA 配置

交易品种XAUUSD
时间框架H1 (推荐)
推荐经纪商IC Markets, IC Trading
最低存款$300 / 0.01手

📸 截图预览