Discussion de l'article "Communiquer avec MetaTrader 5 en utilisant Named Pipes sans utiliser de DLL" - page 3
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je pense que la question de la communication entre les terminaux n'a qu'un faible taux d'application.
En revanche, la communication avec les systèmes externes est plus importante et plus applicable. C'est pour cela que le canal sécurisé a été ouvert.
Personne ne conteste cela, je veux dire, la déclaration de l'objectif. Mais le problème réside dans la manière dont il a été mis en œuvre. Après tout, les systèmes externes ne sont pas nécessairement écrits en C, mais peuvent être créés dans différents langages de programmation. Et il est possible de se connecter au terminal par le biais d'un canal nommé dans de nombreux langages de programmation uniquement en tant que client par le biais d'opérations sur les fichiers. Mais la technologie choisie est celle du client-serveur, c'est-à-dire que deux clients ne se rencontreront pas s'il y a un fossé entre eux sans passerelle. En d'autres termes, il aurait fallu prévoir soit une technologie client-client, soit une passerelle. Et c'est ainsi que les choses se sont passées, comme dans la fable de grand-père Krylov "Le renard et les raisins" :
Même si l'œil voit,Mais l'œil ne peut pas voir.
I. Krylov
Il a été nécessaire d'examiner comment d'autres personnes ont réalisé une connexion similaire avec des systèmes externes. Par exemple : VMWare, MS SQL Server, MySQL, modems externes, etc. La partie serveur est mise en œuvre en interne. Et il est très pratique de s'y connecter sans aucune béquille, même par le biais d'un canal nommé, ou via TCP/IP et d'autres canaux de communication. Vous pouvez même choisir, par exemple, un canal nommé, mais à distance via TCP/IP à l'aide de l'utilitaire "Named Pipe TCP Proxy". En d'autres termes, les utilisateurs n'ont pas besoin de créer des béquilles supplémentaires, ils n'ont qu'à choisir l'application client la plus appropriée et à se connecter et travailler immédiatement.
Tenez compte du fait que MQL5 est un environnement d'application sécurisé, et clairement un environnement client, dans lequel il n'est pas raisonnable de créer des fonctions serveur.
Je ne suis pas sûr que la fonctionnalité serveur ait été déclarée. La fonctionnalité client a été planifiée et mise en œuvre.
Je crois que j'ai fait le code pour la passerelle. Je ne l'ai pas encore testé. Je vais télécharger et installer MinGW et voir ce qui ne va pas.
MinGW installé, configuré et boulonné à NetBeans.
L'idée de créer une passerelle full-duplex à partir de deux canaux de serveur et de rediriger les informations vers les clients d'un canal à l'autre n'a pas fonctionné. Si un sous-processus du serveur lit un canal et que le second lui envoie quelque chose, le duplex intégral ne fonctionne pas (du moins sous Windows XP), car il arrive que le sous-processus qui lit le canal intercepte les messages du sous-processus qui écrit sur le même canal et renvoie l'information.
Si vous supprimez l'un des sous-processus, la transmission se fait en simplex de client à client sans aucun problème.
Cependant, tout n'est pas perdu, car il existe également un mode superposé, c'est-à-dire lorsque non pas deux, mais un seul canal est créé, et que plusieurs clients s'y connectent simultanément. Dans ce cas, le serveur n'a pas besoin de lire les informations du canal en permanence, car tout est basé sur des événements. En d'autres termes, si un client envoie des informations au canal, le serveur lit son événement et en extrait le message transmis. Et pour rediriger les informations reçues vers le deuxième client, c'est déjà une question de technique. Je suis en train de créer une telle implémentation.
Voilà, c'est fait. J'ai abandonné. Je suis fatigué de jouer avec le code C++ et même avec Win API. Ce n'est pas tant du codage que de la recherche d'informations éparses sur MSDN pour essayer de comprendre comment tout devrait fonctionner. Comme je manque d'expérience, j'ai envoyé tout cela à Service Work. Voir Refaire le code C++ pour en faire une passerelle bidirectionnelle full duplex.
Peut-être que quelqu'un de plus expérimenté peut facilement s'occuper de cette tâche ? Je n'exclus pas que la raison des échecs soit que je n'ai pas pu comprendre les paramètres des canaux nommés. Il est possible qu'il faille écrire quelque chose de correct dans ces paramètres et que tout fonctionne. Jusqu'à présent, je n'ai pas réussi à faire autre chose qu'en mode simplex et à le faire fonctionner.
J'ai décidé d'essayer de faire l'amitié entre MQL et AutoIt à travers des pipelines.
En bref, un seul râteau, et partout :)
Bon, j'ai réussi à transférer vers AutoIt avec un peu de chance, seuls les 4 premiers octets ont dû être jetés, il y a des "déchets". Qu'est-ce que c'est que ces "déchets" ?
Ensuite, j'ai essayé de transférer vers MQL, c'est encore plus amusant ici - rien ne vient du tout. Ou peut-être que je n'organise pas correctement le transfert.... Peut-être que tout le problème réside dans ces 4 octets ?
Que pouvez-vous me dire ?
J'ai décidé d'essayer de faire l'amitié entre MQL et AutoIt à travers des pipelines.
En bref, un seul râteau, et partout :)
Bon, j'ai réussi à transférer vers AutoIt avec un peu de chance, seuls les 4 premiers octets ont dû être jetés, il y a des "déchets". Qu'est-ce que c'est que ces "déchets" ?
Ensuite, j'ai essayé de transférer vers MQL, c'est encore plus amusant ici - rien ne vient du tout. Ou peut-être que je n'organise pas correctement le transfert.... Peut-être que tout le problème réside dans ces 4 octets ?
Que pouvez-vous me dire ?
Alors, vous êtes là-dedans aussi ?
Non, je suis juste là.) Donc, c'était comme ça :
MQL5
AutoIt
Cette partie du transfert de MQL à AutoIt. Elle fonctionne de la manière suivante.
Avec une chaîne de Func ReadMsg($hPipe)
Je mange les 4 premiers octets et tout fonctionne.
Question : que contiennent ces 4 premiers octets ?
J'ai mangé les 4 premiers octets et tout fonctionne.
Question : que contiennent ces 4 premiers octets ?
Renat, quand est-il prévu de faire des pips dans MT4 ?