Diskussion zum Artikel "Websockets für MetaTrader 5"

 

Neuer Artikel Websockets für MetaTrader 5 :

Vor der Einführung der Netzwerkfunktionen, die mit der aktualisierten MQL5-API zur Verfügung gestellt wurde, waren MetaTrader-Programme in ihrer Fähigkeit beschränkt, sich mit Websocket-basierten Diensten zu verbinden und eine Schnittstelle zu bilden. Aber natürlich hat sich das alles geändert. In diesem Artikel werden wir die Implementierung einer Websocket-Bibliothek in reinem MQL5 untersuchen. Eine kurze Beschreibung des Websocket-Protokolls wird zusammen mit einer Schritt-für-Schritt-Anleitung für die Verwendung der resultierenden Bibliothek gegeben.

Hier sehen Sie ein Video, in dem das Programm läuft, während es mit dem Server verbunden ist.


Schlussfolgerung

Autor: Francis Dube

 
Ausgezeichneter Artikel. Es ist an der Zeit, dass MT5 hat native Websocket-Unterstützung.
Hoffentlich wird dieser Code als MT5-Standard-Include-Dateien enthalten sein.
Oder noch besser, MT5 sollte aus Performancegründen eine native Websocket-API anbieten.

Ich danke Ihnen für Ihre Bemühungen.
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

Hast du den erwähnten Release-Ordner auf deiner Github-Seite vergessen? ;)

 
MetaQuotes:

Der Artikel WebSocket für MetaTrader 5 wurde veröffentlicht:

Autor: Francis Dube

WebSocket ist selbst in normalen, schnellen und korrekten Implementierungen eine ziemlich launische Sache. Es ist kontraindiziert, es in MQL zu machen

imho: entweder sollte es von Terminalentwicklern kommen oder von externen DLLs bereitgestellt werden

 
Warum wird es benötigt? Warum brauchen Sie Websocket und welche Funktionalitäten bietet es im Vergleich zu herkömmlichem mt. Können Sie ein Beispiel für eine quantitative oder qualitative Verbesserung nennen? Es war so, mit Websocket ist es so. So viel schneller. Danke!
 

Haben Sie es auf externen öffentlichen Servern getestet, insbesondere mit TLS? Es wäre toll, ein oder mehrere Beispiele zu sehen.

PS. Ich frage deshalb, weil dein Test mit wss://echo.websocket.org nicht funktioniert (ich hänge das Log an, BTW - warum schreibst du so viel unnütze Infos?). Reines ws (Port 80) funktioniert gut. In der Vergangenheit habe ich auch versucht, meine Implementierung von WebSockets in MQL5 laufen zu lassen, scheiterte aber daran, dass die MQL-Sockets einige Schwierigkeiten mit der TLS-Schicht haben. Sie scheinen immer noch nicht gelöst zu sein. Und wss ist heutzutage ein Muss, da alle Produktionsserver TLS verwenden und ungesicherte Verbindungen ablehnen.

Dateien:
log.txt  1113 kb
 
Maxim Kuznetsov:

WebSocket ist selbst in normalen, schnellen und korrekten Implementierungen eine ziemlich launische Sache. Es sollte nicht in MQL gemacht werden

imho: entweder sollte es von den Terminalentwicklern kommen oder von externen DLLs bereitgestellt werden.

Was für ein Blödsinn.

Alles funktioniert perfekt in MQL5.
 
Renat Fatkhullin:
Das ist Blödsinn.

In MQL5 funktioniert alles perfekt.

Es ist überhaupt kein Unsinn über MQL. Es gab und gibt Probleme mit TLS (ich habe im Forum darüber geschrieben, aber ich habe nicht auf eine Lösung gewartet). Das Beispiel aus dem Artikel funktioniert nicht. Ich habe das Protokoll an den englischen Originalartikel angehängt.

Discussion of article "Websockets for MetaTrader 5"
Discussion of article "Websockets for MetaTrader 5"
  • 2020.11.25
  • www.mql5.com
New article Websockets for MetaTrader 5 has been published: Author: Francis Dube...
 
Renat Fatkhullin:
Das ist Blödsinn.

In MQL5 funktioniert alles perfekt.

Es gibt ein altes wss Problem dort: in der Standardfunktion SocketIsReadable ()
Es ist elementar zu umgehen, aber ohne diese Funktion.

uint len = 1024; //SocketIsReadable(socket);


 
Roman:

Da gibt es ein altes wss-Problem: in der Standardfunktion SocketIsReadable ()
ist Workaround elementar, aber schon ohne diese Funktion.

Gibt es eine Begründung dafür? Was ist die magische Zahl und warum sollte sie für eine Nachricht mit einer Länge von z.B. 256 oder 1500 in Ordnung sein?

 
Roman:

Dort gibt es ein altes wss-Problem: in der Standardfunktion SocketIsReadable ()
ist der Workaround elementar, aber schon ohne diese Funktion

Sie verstehen einfach nicht und wissen nicht, wie man diese Funktion benutzt.

Diese Funktion gibt sofort die verfügbare Anzahl von Bytes im Eingabepuffer an und sagt Ihnen nicht, ob der Socket aktiv ist. Die Funktion ist sehr wichtig und ermöglicht es Ihnen, nicht in eine synchrone Warteschleife zu gehen, sondern die Daten portionsweise auszulesen, ohne die Kontrolle über das Programm zu verlieren.

Und auch die TLS-Funktionen sind richtig - sie sind für geschulte Benutzer gedacht, die wissen, wie und in welcher Reihenfolge sie zu verwenden sind. Sie sind nicht für diejenigen gedacht, die "angerufen haben und das war's".


Nicht nur das, die Socket- und TLS-Funktionen sind in Reinform die gleichen, die das Terminal für raw/tls/https-Verbindungen verwendet. Das heißt, alles funktioniert einwandfrei. Die gleichen Implementierungen funktionieren auch in unseren Hochlastlösungen.

Rohe Netzwerkfunktionen sind nichts für Anfänger und nicht für naiven Gebrauch. Man sollte die Prinzipien und Eigenheiten der Netzwerkinteraktion gut genug verstehen. Und wenn wir über TLS sprechen, dann über die Methoden und die Reihenfolge der Verarbeitung des Handshake-Prozesses.