Diskussion zum Artikel "Integration von MetaTrader 5 und Python: Daten senden und empfangen" - Seite 11

 
Danke, Bruder. Dieser Artikel ist großartig. Sie helfen mir sehr :*
 

Vielen Dank für diesen Artikel.

Ich frage mich nur, warum wir in OnTick() ständig socket=SocketCreate() und SocketClose() aufrufen müssen?

Es scheint etwas ineffizient zu sein, dies wiederholt zu tun.
Hält es den Socket nicht offen/aktiv? Oder ist es vielmehr möglich, den Socket offen/aktiv zu halten?

 
Ernesto Che Daten, um Fibs und Channels zu zeichnen. In Ihrem Beispiel gibt Python zwei Werte zurück, aber ich muss Daten für bis zu 12 verschiedene Strukturen mit jeweils drei Koordinatenpunkten zurückgeben.
Zunächst blieb ich mit der Tatsache hängen, dass mt5 nicht einen langen String zurückgibt, der alle Strukturen auf einmal beschreibt. Ich habe den Austausch durch mehrere kürzere Abfragen vorgenommen. Alles scheint zu funktionieren, aber von Zeit zu Zeit.
Irgendetwas sagt mir, dass es an der Timeout-Einstellung liegt. Könnten Sie mir bitte eine Richtung vorschlagen, um eine Lösung zu finden?
Vielen Dank im Voraus

Hallo! Ich habe auch ein Socket angehoben. Ich habe ein Problem - ich schreibe einen Indikator in Python. Es nimmt Daten von mt5 eine Menge und so viel wie Sie wollen, aber um Daten zu mt5 zurückgeben ist nicht so einfach. Auf dem Socket ist es möglich, nur einen String bis zu 100 kleine Strings zu übertragen, aber ich brauche mehr. Welche Lösungen gibt es außer Socket? Und außer Web/Internet-Anfragen des Datenaustauschs zwischen Python->MT5? Ich möchte keine MySQL-DB dafür aufziehen. Wir sprechen über die Übertragung von Python zu MT5 etwa 40 Währungspaare mit einer Geschichte von 1000 neu berechnete Messwerte und weitere Konstruktion von Indikator-Linien in MT5... Ich möchte weg von Berechnungen in MT5 zu bekommen, wie Python tut es viel schneller. Ich möchte also alle Zeilen des Indikators sehen und nicht nur den letzten Balken, der durch einen String einmal pro Sekunde übertragen wird.
Kann mir jemand einen nützlichen Tipp geben?

TCP/IP Socket - MT5 erhält sowieso nur einen String und der passt nicht auf 30 000 Daten.... Die Begrenzung einer String-Variablen selbst im Jason-Format liegt bei bis zu 100 Strings. Was ist der Nutzen eines solchen Sockets?
Es stellt sich heraus, dass für große Daten ein Ausweg Python-->MySQL-->MT5

Ich hatte auch diese Idee:

Mit multiprocessing.shared_memory in Python und WinAPI in MQL5 kann man Daten direkt aus dem Speicher lesen.
 
Alex Renko #:
außer für Web-/Internet-Anforderer des Datenaustauschs zwischen Python->MT5? Ich möchte keine MySQL-DB einführen.

"SQLite heranziehen" - MT5 hat es eingebaut, Python hat es offensichtlich auch....

Sie können den Socket verwenden, um das, was Sie brauchen, sofort zu melden (Signale, Warnungen usw.), und große Daten in SQLite eingeben. Das heißt, in Python geben Sie alles, was Sie brauchen, in die Datenbank ein und pfeifen auf den Socket "Datenaktualisierung". Und in MQL kann man die Datenbank auf die Trillerpfeife hin wieder auslesen.

Die Datenbank selbst kann auf einer Frame-Disk gespeichert werden

 
Maxim Kuznetsov #:

"bring up SQLite" - MT5 hat es eingebaut, python hat es offensichtlich auch.

Sie verwenden den Socket, um das, was Sie brauchen, sofort zu melden (Signale, Warnungen usw.), und stellen große Daten in SQLite. Das heißt, in Python stellen Sie alles, was Sie brauchen, in die Datenbank und pfeifen auf den Socket "Datenaktualisierung". Und in MQL können Sie die Datenbank auf die Trillerpfeife hin wieder auslesen.

Die Datenbank selbst kann auf einer Frame-Disk gespeichert werden

Ich verstehe, was Sie meinen, danke für die Antwort... Ich dachte so
MetaTrader 5 verwendet seine eigene Programmiersprache MQL5, die in einem isolierten Prozess läuft. Dies erlaubt keine direkte Interaktion mit dem gemeinsamen Speicher des Betriebssystems, wie es andere Anwendungen, die Low-Level-APIs verwenden, tun können.

Shell innerhalb einer Shell.... Es ist schon 20 Jahre her, dass sie keine native Version für den Mac machen konnten...

 
Alex Renko #:

Ich verstehe Ihren Standpunkt, danke für die Antwort.... Das dachte ich mir auch
MetaTrader 5 verwendet seine eigene Programmiersprache MQL5, die in einem isolierten Prozess läuft. Dies erlaubt keine direkte Interaktion mit dem gemeinsamen Speicher des Betriebssystems, wie es andere Anwendungen mit Low-Level-APIs tun können.

Shell innerhalb einer Shell.... Es ist schon 20 Jahre her, dass sie keine native Version für den Mac machen konnten...

niemand verbietet die Verwendung von DLL - und dort kann man tun, was man will.

Man kann den Speicher direkt durchsuchen (wahrscheinlich nicht schneller :-) ).

Oder effiziente Zwischenlösungen, a la In-Memory Key-Value-DB.

Nur in den meisten Fällen sind die Bremsen und der Flaschenhals auf der Seite von Python

 
für mich nicht funktionieren Beispiel jemand wissen, warum? ich in Option 127.0.0.1:9090 ich Python socketserver.py e run EA socketclientEA.ex5 ( nach fix char zu uchar )run es, aber retrun mich dieser Fehler
2025.10.09 10:41:44.665 socketclientEA (#GDAXIm,H1) Verbindung localhost:9090 Fehler 4014