Diskussion zum Artikel "Integration von MetaTrader 5 und Python: Daten senden und empfangen" - Seite 11
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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?
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.
Mit multiprocessing.shared_memory in Python und WinAPI in MQL5 kann man Daten direkt aus dem Speicher lesen.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:
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
"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...
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