Native Websocket
- Bibliotheken
- Racheal Samson
- Version: 1.418
- Aktualisiert: 10 Januar 2025
- Aktivierungen: 15
Eineeinfach zu verwendende, schnelle, asynchrone WebSocket-Bibliothek für MQL5.
Sie unterstützt:
- ws:// und wss:// (sicherer "TLS" WebSocket)
- Text- und Binärdaten
Sie behandelt:
- fragmentierte Nachrichten automatisch (Übertragung großer Datenmengen)
- Ping-Pong-Frames automatisch (keep-alive handshake)
Vorteile:
- Keine DLL erforderlich.
- Keine OpenSSL-Installation erforderlich.
- Bis zu 128 Web-Socket-Verbindungen von einem einzigen Programm aus.
- Verschiedene Log Levels zur Fehlerverfolgung
- Kann mit MQL5 Virtual Hosting synchronisiert werden.
- Vollständig nativ für MQL5.
Klicken Sie hier, um die neueste WSMQL.mqh herunterzuladen.
Bitte stellen Sie sicher, dass die heruntergeladene MetaTrader-Bibliothek als Native Websocket.ex5 heruntergeladen/benannt wird, wie von WSMQL.mqh gefordert.
You can always contact me for custom pricing/requests/support/questions
Beispielcode unten:
//include WSMQL.mqh - eine Datei, die alle für die Interaktion mit der Bibliothek erforderlichen Deklarationen enthält #include <WSMQL.mqh> // Methoden unten // Klasse CWebSocketClient { // öffentlich: // bool Initialized(void); // Prüft, ob der WebSocket-Client initialisiert ist. // ENUM_WEBSOCKET_STATE State(void); // Gibt den aktuellen Status der WebSocket-Verbindung zurück. // void SetMaxSendSize(int max_send_size); // Legt die maximale Sendegröße für WebSocket-Nachrichten fest. // bool SetOnMessageHandler(OnWebsocketMessage callback); // Setzt die Callback-Funktion für die Behandlung eingehender Textnachrichten. // bool SetOnPingHandler(OnWebsocketMessage callback); // Setzt die Callback-Funktion für die Behandlung eingehender Ping-Nachrichten. // bool SetOnPongHandler(OnWebsocketMessage callback); // Setzt die Callback-Funktion für die Behandlung eingehender Pong-Nachrichten. // bool SetOnCloseHandler(OnWebsocketMessage callback); // Setzt die Callback-Funktion für die Behandlung von WebSocket-Verbindungsabbrüchen. // bool SetOnBinaryMessageHandler(OnWebsocketBinaryMessage callback); // Setzt die Callback-Funktion für die Behandlung eingehender binärer Nachrichten. // 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); // Verbindet mit einem WebSocket-Server. // bool ConnectUnsecured(const string url, const uint port = 80, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Verbindet mit einem WebSocket-Server über eine ungesicherte Verbindung. // bool ConnectSecured(const string url, const uint port = 443, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); // Verbindet mit einem WebSocket-Server über eine gesicherte Verbindung. // bool Disconnect(ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); // Trennt die Verbindung mit dem WebSocket-Server. // int SendString(const string message); // Sendet eine String-Nachricht an den WebSocket-Server. // int SendData(uchar& message_buffer[]); // Sendet binäre Daten an den WebSocket-Server. // int SendPong(const string msg = ""); // Sendet eine Pong-Nachricht an den WebSocket-Server. // int SendPing(const string msg); // Sendet eine Ping-Nachricht an den WebSocket-Server. // uint ReadString(string& out); // Liest eine String-Nachricht vom WebSocket-Server. // uint ReadStrings(string& out[]); // Liest mehrere String-Nachrichten vom WebSocket-Server. // uint OnReceiveString(); // Empfängt und verarbeitet eingehende String-Nachrichten. // uint OnReceiveBinary(); // Empfängt und verarbeitet eingehende binäre Nachrichten. // uint OnMessage(); // Empfängt und verarbeitet eingehende WebSocket-Nachrichten. // }; // Erstellen einer Instanz des Clients CWebSocketClient client;//Ich habe dies global deklariert, weil OnPingMessage es erfordert //+------------------------------------------------------------------+ //| Skript-Programmstartfunktion| //+------------------------------------------------------------------+ void OnStart() { // Prüfen, ob der Client initialisiert ist if (!client.Initialized()) { ZeroHandle();//Aufräumen aller Clients return; } // OnMessage-Handler für den Empfang von Textnachrichten einstellen client.SetOnMessageHandler(OnMessage);// SetOnBinaryMessageHandler für binäre Nachrichten verwenden // OnPing-Handler einstellen, um Ping-Nachrichten zu empfangen, // Pong wird automatisch gesendet, wenn dieser Handler nicht gesetzt ist client.SetOnPingHandler(OnPingMessage);// SetOnPongHandler für Pong-Meldungen verwenden // URL und msg-Deklaration string url = "stream.binance.com/ws";//Oder wss://stream.binance.com/ws string msg = "{\"params\":[\"btcusdt@bookTicker\"],\"method\":\"SUBSCRIBE\",\"id\":27175}"; //ALERT: Stellen Sie sicher, dass stream.binance.com zur WebRequest-Liste im Reiter Optionen -> Expert Advisors hinzugefügt wurde /* Verbinden Sie sich je nach Bedarf mit dem WebSocket-Server über eine der unten aufgeführten Funktionen */ // Vollständig konfigurierbar // if (!client.Connect(url/* , 80 || 443, 5000, false || true, LOG_LEVEL_INFO */)) { // Für Nicht-TLS(ungesicherte) Verbindung - ohne SSL erforderlich // if (!client.ConnectUnsecured(url/* , 80, 5000, LOG_LEVEL_INFO */)) { // Für TLS(gesicherte) Verbindung - mit SSL erforderlich if (!client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */)) { ZeroHandle();//Aufräumen aller Clients return; } // Senden einer String-Nachricht client.SendString(msg); // Nachrichten verarbeiten, bis das Skript gestoppt wird while (true) { if (IsStopped()) break; if (client.State() == CLOSED) { Print("Socket connection closed"); //Wiederverbinden? //client.ConnectSecured(url/* , 443, 5000, LOG_LEVEL_INFO */) /Oder die Schleife unterbrechen? break; } /* NB: Sie brauchen nur eine dieser Funktionen */ // Empfangen Sie alle Nachrichten und verarbeiten Sie sie mit ihrem jeweiligen On{Message | BinaryMessage | Ping | Pong | Close} callback(handler) uint frames = client.OnMessages(); // Nachrichten empfangen und nur TEXT-Frames mit dem OnMessage-Callback verarbeiten // uint frames = client.OnStringMessages(); // Nachrichten empfangen und nur BINÄR-Frames mit dem OnBinaryMessage-Callback verarbeiten // uint frames = client.OnBinaryMessages(); if (frames > 0) Print("Frames Processed : ", frames); } // Trennen Sie die Verbindung mit dem WebSocket-Server Print("Disconnecting..."); if (client.Disconnect()) { Print("Disconnected!"); } else { Print("Failed to disconnect!"); } //Aufräumen aller 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 Verarbeitet : 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 Verarbeitet : 3 //--- //Frames Verarbeitet : 1 //ping empfangen: ping //Pong erfolgreich gesendet.
Für Support und Fragen vor/nach dem Kauf können Sie mich gerne kontaktieren.

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