Senden von Aufträgen an MT4 aus Java über IP

 

Hallo,

Gibt es eine Möglichkeit, einfache Aufträge (nur BUY, SELL, CLOSE) an MT4 von einem anderen Computer (auf dem eine Java-App läuft) über IP zu senden?

Ich brauche keine bidirektionale Kommunikation, sondern nur eine unidirektionale.

Vielen Dank im Voraus.

 
Mariop: Gibt es eine Möglichkeit, einfache Aufträge (nur KAUFEN, VERKAUFEN, SCHLIESSEN) von einem anderen Computer (auf dem eine Java-App läuft) über IP an MT4 zu senden? Ich benötige keine bidirektionale Kommunikation, sondern nur eine unidirektionale.

Ja, aber eine Schnittstelle für die Kommunikation zwischen den Prozessen muss programmiert werden, weil sie nicht eingebaut ist. Diese Programmierung erfordert Wissen und Erfahrung und ist für einen Anfänger wie Sie nicht leicht zu bewältigen.

Gehen Sie also in den Bereich der Freiberufler und beauftragen Sie jemanden, der dafür qualifiziert ist, aber ich bezweifle, dass das billig sein wird.

 
:) Vielen Dank für Ihre Antwort.
Dennoch denke ich, ich bin nicht so ein Anfänger, in der Tat habe ich bereits vor Jahren kompliziertere Dinge mit C# über TradePlatform.NET getan, aber dieses Mal muss ich sie (die Aufträge) von einem Java-Programm zu senden. Also, wenn es irgendeine Möglichkeit, dass MT4 in der Lage sein, Aufträge in der Art und Weise, die ich gefragt habe, zu empfangen, ich warte immer noch für mehr interessante Antworten.
 

Ich habe Ihnen bereits die passende Antwort gegeben! Sie können immer Dateien in einem Netzwerk als Kommunikationsmethode verwenden, aber das wäre langsam und umständlich.

Die Tatsache, dass Sie diese Frage gestellt haben, sagt aus, dass Sie, was die MetaTrader/MQL-Programmierumgebung betrifft, relativ wenig Erfahrung mit MQL/MetaTrader haben. Ich sage dies, weil Sie, wenn Sie MQL und WinAPI sehr gut beherrschen würden, bereits die verschiedenen IPC-Lösungen über Kanäle, Named Pipes, TCP/IP usw. kennen würden. - von denen die meisten über DLL-Bibliotheken implementiert sind, was aber nicht unbedingt der Fall sein muss.

 
Der einfachste (wenn auch nicht einfache) Weg, MT4 von Java aus zu verbinden, wäre mit Sockets, gibt es Beispielcodes für MQL in der Codebasis und Artikel.
 
Ovo:
Der einfachste (wenn auch nicht einfache) Weg, MT4 von Java aus zu verbinden, wäre mit Sockets, es gibt Beispielcodes für MQL in der Code Base und in Artikeln.

Ich habe so gut wie keine Erfahrung mit Java, aber wenn sich die beiden Computer im selben lokalen Netzwerk befinden, dann könnten benannte Leitungen - die von MQL4 über FileOpen() unterstützt werden - möglich und einfacher sein.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

 
jjc:

Ich habe so gut wie keine Erfahrung mit Java, aber wenn sich die beiden Computer im selben lokalen Netzwerk befinden, dann könnten benannte Leitungen - die von MQL4 über FileOpen() unterstützt werden - möglich und einfacher sein.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

Eigentlich habe ich keine Erfahrung mit Named Pipes in Java, aber die Sockets sind in Java sehr verbreitet. Außerdem sieht es so aus, als ob man in Java keine Named Pipes erstellen kann, sondern nur eine Verbindung zu einer bestehenden herstellen kann, und es wurde nur eine Interprozess-Verbindung und keine Netzwerklösung in Betracht gezogen (kann kompatibel sein oder auch nicht, keine Ahnung).

 
jjc:

Ich habe so gut wie keine Erfahrung mit Java, aber wenn sich die beiden Computer im selben lokalen Netzwerk befinden, dann könnten benannte Leitungen - die von MQL4 über FileOpen() unterstützt werden - möglich und einfacher sein.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java


Ursprünglich werden sich beide Computer im selben LAN befinden, obwohl es interessant wäre, es auch über das Internet funktionieren zu lassen. Aber ja, im selben LAN wäre im Moment genug.


Ovo:
Der einfachste (wenn auch nicht einfache) Weg, MT4 von Java aus zu verbinden, wäre mit Sockets, es gibt Beispielcodes für MQL in der Codebasis und Artikeln.


Yep. Die beste Lösung, die ich dort gefunden habe, scheint die mit mt4-zeromq zu sein, aber ich habe noch kein Beispiel gefunden, das zeigt, wie man damit einen Handel ausführt. Ich denke, dass dies der beste Weg, um es zu tun, da (¿) es hätte keine Verzögerung(?) und es könnte unter einer Linux-Umgebung verwendet werden, so dass jede einfache Beispiel-Code über es wäre zu schätzen wissen.

Das Hauptproblem, das ich jedoch immer noch sehe, ist die Verzögerung: Als ich etwas Ähnliches entwickelt habe, aber in die entgegengesetzte Richtung (MT4 interagierte mit einem externen Server), gab es kein solches Problem, da es keine neuen Informationen zwischen den Ticks des MT4-Marktes gab, aber in diesem Fall kann ich nicht herausfinden, wie MT4 in der Lage sein wird, Aufträge zwischen den Ticks zu empfangen (und auszuführen). Wäre das nicht ein Problem? Oder übersehe ich vielleicht etwas und es ist kein Problem?

 
Ovo:

Eigentlich habe ich keine Erfahrung mit Named Pipes in Java, aber die Sockets sind in Java sehr verbreitet. Außerdem sieht der Link, den Sie zur Verfügung gestellt haben, so aus, als ob Sie die Named Pipe nicht von Java aus erstellen können, sondern nur eine Verbindung zu einer bestehenden herstellen können, und sie haben nur eine Interprozessverbindung und keine Netzwerklösung in Betracht gezogen (kann kompatibel sein oder nicht, keine Ahnung).

"Named Pipes" müssen zuerst von MT4 aus erstellt werden, indem die WinAPI-Funktionen aufgerufen werden. Erst dann kann sie von JAVA als Standarddatei verwendet werden. Das sollte kein Problem sein, denn das ist genau das, was der OP will, aber es ist nur ideal für eine LAN-Lösung.

Sockets hingegen ist sowohl für LAN- als auch für WAN-Lösungen ideal, erfordert aber einen DLL-Wrapper für die WinAPI mit zusätzlichen Unterstützungsfunktionen, um MT4 die Handhabung zu erleichtern.

Der Auftraggeber muss jedoch nur seine Finger im Spiel haben, denn es gibt eine Fülle von Informationen über mögliche Lösungen. Er muss nur wählen, welche Methode ihm am besten zusagt, seien es Named Pips, Mapped Files, Sockets oder was auch immer:
 
Mariop: Das Hauptproblem, das ich immer noch sehe, ist die Verzögerung: Als ich etwas Ähnliches entwickelt habe, allerdings in umgekehrter Richtung (MT4 interagierte mit einem externen Server), gab es kein solches Problem, da zwischen den Ticks des MT4-Marktes keine neuen Informationen ankamen, aber in diesem Fall kann ich mir nicht vorstellen, wie MT4 in der Lage sein soll, Aufträge zwischen den Ticks zu empfangen (und auszuführen). Wäre das nicht ein Problem? Oder übersehe ich vielleicht etwas und es ist kein Problem?

Durch Verwendung des OnTimer()-Ereignishandlers, der nicht von eingehenden Ticks abhängig ist!

Mariop: Die beste Lösung, die ich gefunden habe, scheint die mit mt4-zeromq zu sein, aber ich habe noch kein Beispiel gefunden, das zeigt, wie man damit einen Handel ausführt.

Versuchen Sie, nicht auf 3rd-Party-Bibliotheken abhängen. Programmieren Sie einfach Ihre eigene DLL mit zusätzlichen Support-Funktionen, um die Handhabung von MT4 zu erleichtern. Programmieren Sie die DLL in C und nicht in C#, da dies Abhängigkeiten mit sich bringt und nicht so effizient ist wie C.

Entwickeln Sie auch Ihr eigenes Nachrichtenformat/Protokoll, das den Anforderungen entspricht. Machen Sie es kompakt und effizient und verschlüsseln Sie es später zur Sicherheit, falls erforderlich.

 
FMIC:

Versuchen Sie, sich nicht auf Bibliotheken von Drittanbietern zu verlassen. Programmieren Sie einfach Ihre eigene DLL mit zusätzlichen Support-Funktionen, um die Handhabung von MT4 zu erleichtern. Programmieren Sie die DLL in C und nicht in C#, denn das hat Abhängigkeiten und ist nicht so effizient wie C.

Entwickeln Sie auch Ihr eigenes Nachrichtenformat/Protokoll, das den Anforderungen entspricht. Gestalten Sie es kompakt und effizient und verschlüsseln Sie es später zur Sicherheit, falls erforderlich.

Jetzt haben wir eine viel interessantere Antwort als Ihre erste. Ich stimme Ihnen absolut zu und das sind wirklich GUTE RATSCHLÄGE. Ich habe vor Jahren mit MQL aufgehört, da ich meine eigene Plattform entwickelt habe (ich brauchte WIRKLICH einige spezielle Funktionen, die ich auf keiner anderen Plattform gefunden habe, es lag nicht daran, dass ich in der Stimmung war, diese riesige Menge an Stunden damit zu verbringen). Jetzt werde ich anfangen, mit einem Broker zusammenzuarbeiten, der ausschließlich mit MT4 arbeitet, also muss ich eine Brücke bauen, um eine Verbindung zu ihm herzustellen. Deshalb habe ich es eilig, es so schnell wie möglich zum Laufen zu bringen.


FMIC:

Durch die Verwendung des OnTimer()-Ereignishandlers, der nicht von eingehenden Ticks abhängig ist!


Richtig. Danke! Daran hatte ich nicht gedacht. Eigentlich löst es das Problem nicht vollständig, da ich Aufträge fast sofort ausgeführt werden müssen (und ich denke, mit dieser Methode kann ich es nur jede Sekunde überprüfen, aber zumindest nicht jeden Tick), aber in der Tat kann ich leicht eine vorübergehende Lösung mit ihm bauen.

Wiederum gute Ratschläge ;)