Envoyer des ordres à MT4 depuis Java via IP

 

Bonjour,

Existe-t-il un moyen d'envoyer des ordres simples (juste BUY, SELL, CLOSE) à MT4 depuis un autre ordinateur (qui exécute une application Java) via IP ?

Je n'ai pas besoin d'une communication bidirectionnelle, juste unidirectionnelle.

Merci d'avance.

 
Mariop: Existe-t-il un moyen d'envoyer des ordres simples (juste BUY, SELL, CLOSE) à MT4 depuis un autre ordinateur (qui exécute une application Java) via IP ? Je n'ai pas besoin d'une communication bidirectionnelle, juste unidirectionnelle.

Oui, mais une interface pour les communications inter-processus doit être codée, car elle n'est pas disponible de manière intégrée. Ce codage nécessite des connaissances et de l'expérience et ce n'est pas quelque chose qu'un débutant comme vous pourra aborder très facilement.

Rendez-vous donc dans la section Freelance et engagez quelqu'un de qualifié pour le faire à votre place, mais je doute que cela soit bon marché.

 
:) Merci pour votre réponse.
Néanmoins, je pense que je ne suis pas un débutant, en fait j'ai déjà fait des choses plus compliquées avec C# il y a des années via TradePlatform.NET, mais cette fois j'ai besoin de les envoyer (les ordres) à partir d'un programme Java. Donc s'il y a un moyen pour que MT4 soit capable de recevoir des ordres de la manière dont je l'ai demandé, j'attends toujours des réponses plus intéressantes.
 

Je vous ai déjà donné la réponse la plus appropriée ! Vous pouvez toujours utiliser des fichiers sur un réseau pour servir de méthode de communication, mais cela serait lent et encombrant.

Le fait que vous ayez posé cette question indique qu'en ce qui concerne l'environnement de programmation MetaTrader/MQL, vous êtes relativement peu compétent en matière de MQL/MetaTrader. Je dis cela parce que si vous étiez très compétent en MQL et WinAPI, vous auriez déjà connu les diverses solutions IPC via des canaux, des tuyaux nommés, TCP/IP, etc. - dont la plupart sont implémentées via des bibliothèques DLL, mais pas nécessairement.

 
La façon la plus simple (mais pas facile) de connecter MT4 à partir de Java serait avec des sockets, il y a des exemples de codes pour MQL dans la base de code et les articles.
 
Ovo:
La façon la plus simple (mais pas facile) de connecter MT4 à partir de Java serait avec des sockets, il y a des exemples de codes pour MQL dans la base de code et les articles.

Je n'ai pratiquement aucune expérience de Java, mais si les deux ordinateurs se trouvent sur le même réseau local, les tuyaux nommés - pris en charge par MQL4 via FileOpen() - pourraient être possibles et plus simples.

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

 
jjc:

Je n'ai pratiquement aucune expérience de Java, mais si les deux ordinateurs se trouvent sur le même réseau local, les tuyaux nommés - pris en charge par MQL4 via FileOpen() - pourraient être possibles et plus simples.

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

En fait, je n'ai aucune expérience des named pipes en Java, mais les sockets sont très courants en Java. De plus, le lien que vous avez fourni semble indiquer qu'il n'est pas possible de créer un named pipe à partir de Java, mais seulement de se connecter à un pipe existant, et ils n'ont considéré que la connexion interprocessus plutôt que la solution de réseau (compatible ou non, aucune idée).

 
jjc:

Je n'ai pratiquement aucune expérience de Java, mais si les deux ordinateurs se trouvent sur le même réseau local, les tuyaux nommés - pris en charge par MQL4 via FileOpen() - pourraient être possibles et plus simples.

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


Initialement, les deux ordinateurs seront sur le même réseau local, mais il serait intéressant de faire en sorte que cela fonctionne également via Internet. Mais oui, sur le même réseau local serait suffisant pour le moment.


Ovo:
La manière la plus simple (mais pas facile) de connecter MT4 depuis Java serait avec des sockets, il y a des exemples de codes pour MQL dans la base de code et les articles.


Yep. La meilleure solution que j'ai trouvée semble être celle qui utilise mt4-zeromq, mais je n'ai toujours pas trouvé d'exemple montrant comment l'utiliser pour exécuter une transaction. Je pense que c'est peut-être la meilleure façon de le faire puisque (¿)il n'y aurait pas de délai( ?) et qu'il pourrait être utilisé sous un environnement Linux, donc tout code d'exemple simple à ce sujet serait apprécié.

Cependant, le problème principal que je vois toujours est le délai : Lorsque j'ai développé quelque chose de similaire mais dans le sens inverse (MT4 interagissait avec un serveur externe), il n'y avait pas de problème puisqu'il n'y avait pas de nouvelles informations entre les ticks du marché MT4, mais dans ce cas, je n'arrive pas à comprendre comment MT4 pourra recevoir des ordres (et les exécuter) entre les ticks. Cela ne poserait-il pas un problème ? Ou peut-être que je rate quelque chose et que ce ne sera pas un problème ?

 
Ovo:

En fait, je n'ai aucune expérience des named pipes en Java, mais les sockets sont très courants en Java. De plus, d'après le lien que vous avez fourni, il semble que vous ne puissiez pas créer de named pipe à partir de Java, mais seulement vous connecter à un pipe existant, et ils n'ont envisagé qu'une connexion interprocessus plutôt qu'une solution de réseau (compatible ou non, aucune idée).

Les "Named Pipes" doivent d'abord être créés par l'extrémité MT4, en appelant les fonctions WinAPI. Ce n'est qu'ensuite qu'il peut être utilisé par JAVA comme un fichier standard. Cela ne devrait pas poser de problème, car c'est exactement ce que veut le PO, mais ce n'est idéal que pour une solution LAN.

Les sockets, quant à elles, sont idéales pour les solutions LAN et WAN, mais elles nécessitent un wrapper DLL pour la WinAPI avec des fonctions de support supplémentaires pour faciliter la gestion de MT4.

Cependant, l'OP n'a qu'à "laisser ses doigts faire le chemin" car il existe de nombreuses informations sur les solutions possibles. Il lui suffit de choisir la méthode qui lui convient le mieux, qu'il s'agisse de Named Pips, de fichiers mappés, de sockets, etc :
 
Mariop: Cependant, le principal problème que je vois encore est le délai : Lorsque j'ai développé quelque chose de similaire mais dans le sens inverse (MT4 interagissait avec un serveur externe), il n'y avait pas de problème de ce type puisqu'il n'y avait pas de nouvelles informations entre les ticks du marché MT4, mais dans ce cas, je n'arrive pas à comprendre comment MT4 pourra recevoir des ordres (et les exécuter) entre les ticks. Cela ne poserait-il pas un problème ? Ou peut-être que je rate quelque chose et que ce ne sera pas un problème ?

En utilisant le gestionnaire d'événement OnTimer() qui ne dépend pas des ticks entrants !

Mariop: La meilleure solution que j'ai trouvée semble être celle qui utilise mt4-zeromq, mais je n'ai toujours pas trouvé d'exemple montrant comment l'utiliser pour exécuter une transaction.

Essayez de ne pas dépendre de bibliothèques tierces. Codez simplement votre propre DLL avec des fonctions de support supplémentaires afin de faciliter la manipulation des choses pour MT4. Codez la DLL en C et non en C#, car elle comporte des dépendances et n'est pas aussi efficace que le C.

Concevez également votre propre format/protocole de message en fonction des besoins. Faites en sorte qu'il soit compact et efficace et, plus tard, cryptez-le par sécurité si nécessaire.

 
FMIC:

Essayez de ne pas dépendre de bibliothèques tierces. Codez simplement votre propre DLL avec des fonctions de support supplémentaires afin de faciliter la manipulation des choses pour MT4. Codez la DLL en C et non en C#, car elle comporte des dépendances et n'est pas aussi efficace que le C.

Concevez également votre propre format/protocole de message en fonction des besoins. Faites en sorte qu'il soit compact et efficace et, plus tard, cryptez-le par sécurité si nécessaire.

Nous avons maintenant une réponse beaucoup plus intéressante que votre première réponse. Je suis absolument d'accord avec vous et ce sont vraiment de BONS CONSEILS. J'ai quitté MQL il y a des années car j'ai développé ma propre plateforme (j'avais VRAIMENT besoin de certaines fonctionnalités spécifiques que je ne trouvais sur aucune autre plateforme, ce n'était pas parce que j'étais d'humeur à y passer un nombre d'heures énorme). Maintenant, je vais commencer à collaborer avec un courtier qui travaille exclusivement avec MT4, j'ai donc besoin de construire un pont pour m'y connecter. C'est pourquoi je suis pressé de le faire fonctionner le plus rapidement possible.


FMIC:

En utilisant le gestionnaire d'événement OnTimer() qui ne dépend pas des ticks entrants !


C'est vrai. Merci. Je ne m'en souvenais pas. En fait, cela ne résout pas complètement le problème puisque j'ai besoin que les ordres soient exécutés presque immédiatement (et je pense qu'avec cette méthode je ne peux le vérifier que toutes les secondes, mais au moins pas tous les ticks), mais en effet je peux facilement construire une solution temporaire en l'utilisant.

Encore une fois, de bons conseils ;)