Discussion de l'article "Connexion de l'Expert Advisor avec ICQ en MQL5"

 

Un nouvel article Connexion de l'Expert Advisor avec ICQ en MQL5 a été publié :

Cet article décrit la méthode d'échange d'informations entre l'Expert Advisor et les utilisateurs d' ICQ, plusieurs exemples sont présentés. La documentation fournie sera intéressante pour ceux qui souhaitent recevoir des informations de trading à distance depuis un terminal client, via un client ICQ dans leur téléphone mobile ou PDA.

La figure 1. sert de démonstration du travail de l'Expert Advisor, qui permet l'échange de messages texte avec le client ICQ.

Figure 1. Messagerie texte entre MetaTrader5 et ICQ2Go

Auteur : Andrey Voytenko

 

Merci pour cet article. C'était intéressant.

Bien que ModIcq soit parfaitement utilisable sans modification, il est plus facile de travailler avec la version modifiée :)

 
GarF1eld писал(а) :

ModIcq est parfaitement utilisable sans modification

IcqMod.dll ne peut pas être utilisé directement dans MT5, car il fonctionne avec des chaînes Ansi, et dans MT5 les chaînes sont au format Unicode. Le projet a donc dû être remanié pour fonctionner avec des messages en Unicode (à cette fin, le protocole n'utilise pas le format binaire mais le format HTML). Maintenant, envoyez et recevez des messages dans toutes les langues du monde ! J'espère que le projet sera demandé, ce qui permettra de l'améliorer selon vos souhaits.

 
avoitenko:

IcqMod.dll ne peut pas être utilisé directement dans MT5, car il fonctionne avec des chaînes Ansi, et dans MT5 les chaînes sont au format Unicode.

Ce n'est pas tout à fait le cas. Il est possible de les convertir en utilisant StringToCharArray. Par exemple, ce code fonctionne pour moi

struct ICQ_CLIENT
{
        uchar status;
        ushort sequence;
        ulong sock;
};

#import "IcqMod.dll"
   ulong ICQConnect(ICQ_CLIENT& client, uchar& host[], ushort port, uchar& login[], uchar& pass[], int proxy);
   void  ICQClose(ICQ_CLIENT& client);
   ulong ICQSendMsg(ICQ_CLIENT& client, uchar& uin[], uchar& message[]);
   ulong ICQReadMsg(ICQ_CLIENT& client, uchar& uin[], uchar& msg[], int& msglen);
#import

void OnStart()
{
   // convertir les chaînes de caractères en un tableau de caractères à transmettre à la dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // connecter
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // vérification des messages entrants
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN de l'expéditeur
            msgStr = CharArrayToString(msgR);     // message
            
         uchar msgS[];
         // ajouter avant le message Received : et renvoyer le message
         StringToCharArray("Reçu :" + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Mais il n'est pas pratique de convertir tout le temps, donc votre bibliothèque est beaucoup plus utilisable dans ce sens.

J'ai également pensé aux proxies. Peut-être qu'il y a des paramètres qui fonctionnent correctement pour une machine locale ? En d'autres termes, si nous n'utilisons pas de proxy, certains paramètres par défaut sont définis dans le proxy et tout fonctionne. En option, créer 2 fonctions Connect dans la bibliothèque - pour la variante avec et sans proxy

 
GarF1eld писал(а) :

Il est possible de convertir en utilisant StringToCharArray.

Les modifications apportées à la bibliothèque n'ont pas seulement affecté le type de la valeur passée pour les chaînes de caractères (char* est devenu wchar_t*). Ce serait trop simple. Le format du message transmis a changé (voir la fonction BuildQuery_SendMsg_Unicode dans le code source de la dll), qui est devenu universel (HTML) par opposition au format natif (binaire). Le fait que les caractères russes transmis par IcqMod soient reçus correctement est le mérite du programme ICQ natif sur lequel vous le testez. Essayez de tester la réception de messages russes sur http://wap.ebuddy.com/ ou un autre gestionnaire ICQ, et vous verrez des gribouillis au lieu du cyrillique. J'ai essayé une douzaine de gestionnaires ICQ sur lesquels mon projet fonctionne correctement, non seulement avec le cyrillique, mais aussi avec toutes les autres langues du monde. Désolé, bien sûr, pour la publicité.

GarF1eld a écrit(a) :

Je pense aussi aux proxys...

A propos des proxys. J'ai testé, non pas en local, mais à distance, SOCK4/SOCK5. Je n'ai pas réussi à les faire fonctionner. C'est pourquoi j'ai décidé de ne pas les utiliser du tout dans le projet. Si nécessaire, j'essaierai de le faire.

 

Je vous remercie ! C'était très clair.

 

Cela fait longtemps que je n'ai pas consulté ce fil de discussion. Mon icq_power.mqh ne compile pas, il dit *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

Qu'est-ce que cela signifie ?

 
sv_design:

Cela fait longtemps que je n'ai pas consulté ce fil de discussion. Mon icq_power.mqh ne compile pas, il dit *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

Qu'est-ce que cela signifie ?

Cela signifie que

le compilateur MS Visual Studio n'est pas installé dans le système

ou

n'a pas réussi à initialiser le compilateur

 
sv_design:

Qu'est-ce que cela signifie ?

Soit vous mettez à jour, soit vous exécutez ME sous admin, ou servicedesk.
 
avoitenko:

Essayez de tester la réception de messages russes sur http://wap.ebuddy.com/ ou un autre gestionnaire ICQ, et vous verrez des gribouillis à la place du cyrillique. J'ai essayé une douzaine de gestionnaires ICQ, sur lesquels mon projet fonctionne correctement non seulement avec le cyrillique, mais aussi avec n'importe quelle autre langue du monde. Désolé, bien sûr, pour la publicité.

Le cyrillique n'est pas tellement nécessaire, mais les balises html dans les messages sont stressantes (à la fois dans Quip et dans ICQ natif de la dernière version). Il serait préférable qu'il soit strictement en anglais, mais sans balises....
 

2 questions :

1) Est-ce qu'il fonctionne toujours sur les systèmes x32 (je n'ai pas eu l'occasion de le vérifier).

2) Personne n'a refait le design pour x64 ? (sous x64 ça ne marche pas).

Je vous serai très reconnaissant pour la réponse. J'ai essayé de le refaire - ça n'a pas marché - quand je travaille, ça plante.

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS : J'ai besoin d'ICQ exactement...