English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Connexion de l'Expert Advisor avec ICQ en MQL5

Connexion de l'Expert Advisor avec ICQ en MQL5

MetaTrader 5Intégration | 16 novembre 2021, 15:43
99 0
Andriy Voitenko
Andriy Voitenko

Introduction

ICQ est un service centralisé d'échange instantané de messages texte, avec un mode hors ligne, qui utilise le protocole OSCAR. Pour un trader, ICQ peut servir de terminal, qui affiche des informations en temps opportun, ainsi qu'un panneau de commande. Cet article présentera un exemple d'implémentation d'un client ICQ, avec un minimum de fonctions, au sein d'un Expert Advisor.

Le brouillon du projet IcqMod, comportant un code original ouvert, a été utilisé et traité comme base de l'article. Le protocole d'échange avec le serveur ICQ est implémenté dans le module DLL icq_mql5.dll. Il est écrit en C++ et fait usage de la seule bibliothèque Windows winsock2. Un module compilé et un code source pour Visual Studio 2005 sont joints à cet article.

Caractéristiques distinctives et limites de la mise en œuvre de ce client :

  • le nombre maximum de clients travaillant simultanément est théoriquement illimité.
  • la taille maximale d'un message entrant - 150 caractères. La réception de messages plus longs n'est pas prise en charge.
  • Prise en charge d'Unicode.
  • ne prend en charge qu'une connexion directe. La connexion établie via un serveur proxy (HTTP / SOCK4 / SOCK5) n'est pas prise en charge.
  • les messages hors ligne ne sont pas traités.

Description des fonctions de la bibliothèque

Les descriptions des constantes et des fonctions du module dll se trouvent dans le fichier exécutable icq_mql5.mqh.

La fonction ICQConnect permet de se connecter au serveur :

uint  ICQConnect (ICQ_CLIENT & cl,  // Variable for storing data about the connection  
string  host,  // Server name, such as login.icq.com  
ushort  port,  // Server port, eg 5190  
string  login, // Account Number (UIN)  
string  pass   // Account password for)

Description de la valeur de retour via ICQConnect :

Nom de Constant
    Valeur
Description
 ICQ_CONNECT_STATUS_OK
0xFFFFFFFF  connexion établie
 ICQ_CONNECT_STATUS_RECV_ERROR
0xFFFFFFFE
 Erreur de lecture des données
 ICQ_CONNECT_STATUS_SEND_ERR
0xFFFFFFFD
 Erreur d'envoi de données
 ICQ_CONNECT_STATUS_CONNECT_ERROR
0xFFFFFFFC
 erreur de connexion au serveur
 ICQ_CONNECT_STATUS_AUTH_ERROR 0xFFFFFFFB  Erreur d'autorisation : mot de passe incorrect ou dépassement de la limite de connexions

 

Structure de stockage des données sur la connexion :

 struct  ICQ_CLIENT (
uchar  status;     // connection status code  
ushort  sequence;  // sequence meter  
uint  sock;        // socket number  )

 En pratique, pour effectuer une analyse de l'état de la connexion dans cette structure, on utilise la variable status, qui peut prendre les valeurs suivantes :

Nom de Constant
Valeur 
Description
 ICQ_CLIENT_STATUS_CONNECTED 0x01  Une connexion au serveur est établie
 ICQ_CLIENT_STATUS_DISCONNECTED
0x02  Échec de la connexion au serveur

 

Des tentatives fréquentes de connexion au serveur peuvent entraîner un blocage temporaire de l'accès à votre compte. Il est donc nécessaire d'attendre un intervalle de temps entre les tentatives de connexion au serveur.

Le délai d'attente recommandé est de 20 à 30 secondes.

La fonction ICQClose sert à terminer la connexion au serveur :

 void  ICQClose (
ICQ_CLIENT & cl  // Variable for storing connection data)

La fonction ICQSendMsg est utilisée pour envoyer des messages texte :

 uint  ICQSendMsg (
ICQ_CLIENT & cl,  // Variable to store data about the connection.  
string  uin,        // Account number of the recipient  
string  msg         // Message)

La valeur de retour est égale à 0x01, si le message est envoyé avec succès, et égale à 0x00 s'il y a eu une erreur d'envoi. 

La fonction ICQReadMsg vérifie les messages entrants :

 uint  ICQReadMsg (
ICQ_CLIENT & cl,  // Variable for storing connection data  
string  & Uin,     // Account number of the sender  
string  & Msg,     // Message  
uint  & Len        // Number of received symbols in the message

La valeur de retour est égale à 0x01 s'il y a un message entrant et égale à 0x00 s'il n'y a pas de message.

Classe COscarClient

Pour la commodité de travailler avec ICQ dans un environnement orienté -objet de MQL5, la classe COscarClient a été élaborée. Outre les fonctions de base décrites ci-dessus, il comporte un mécanisme qui, après un intervalle de temps spécifique, se reconnecte automatiquement au serveur (lorsque autocon = true). La description de la classe est incluse dans le fichier joint icq_mql5.mqh et est donnée ci-dessous : 

//+------------------------------------------------------------------+
class COscarClient
//+------------------------------------------------------------------+
{
private:
  ICQ_CLIENT client;        // storing connection data
          uint connect;     // flag of status connection
      datetime timesave;     // the time of last connection to the server
      datetime time_in;      // the time of last reading of messages

public:
      string uin;            // buffer for the storage of the uin of the sender for a received message
      string msg;            // buffer for the storage of text for a received message
        uint len;            // the number of symbols in the received message
     
      string login;          // number of the sender's account (UIN)
      string password;       // password for UIN 
      string server;         // name of the server
        uint port;           // network port  
        uint timeout;        // timeout tasks (in seconds) between attempts to reconnect to the server
        bool autocon;        // automatic connection resume
        
           COscarClient();   // constructor for initialization of variable classes
      bool Connect(void);     // establishment of a connection with a server
      void Disconnect(void);  // breaking a connection with a server
      bool SendMessage(string  UIN, string  msg); // sending a message 
      bool ReadMessage(string &UIN, string &msg, uint &len); // receiving a message
};

Expert Advisor sur les bases d’ COscarClient

Le code Expert Advisor minimum nécessaire pour travailler avec ICQ à l'aide de la classe COscarClient se trouve dans le fichier icq_demo.mq5 et ci-dessous :

#include <icq_mql5.mqh>

COscarClient client;

//+------------------------------------------------------------------+
int OnInit()
//+------------------------------------------------------------------+
  {
   printf("Start ICQ Client");
   
   client.login      = "641848065";     //<- login
   client.password   = "password";      //<- password
   client.server     = "login.icq.com";
   client.port       = 5190;
   client.Connect();
   
   return(0);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
//+------------------------------------------------------------------+
  {
   client.Disconnect();
   printf("Stop ICQ Client");
  }
//+------------------------------------------------------------------+
void OnTick()
//+------------------------------------------------------------------+
  {
   string text;
   static datetime time_out;
   MqlTick last_tick;

   // reading the messages
   while(client.ReadMessage(client.uin,client.msg,client.len))
     printf("Receive: %s, %s, %u", client.uin, client.msg, client.len);

   // transmission of quotes every 30 seconds
   if((TimeCurrent()-time_out)>=30)
     {
      time_out = TimeCurrent();
      SymbolInfoTick(Symbol(), last_tick);
      
      text = Symbol()+" BID:"+DoubleToString(last_tick.bid, Digits())+
                  " ASK:"+DoubleToString(last_tick.ask, Digits()); 
      
      if (client.SendMessage("266690424",        //<- number of the recipient 
                                        text)) //<- message text 
         printf("Send: " + text);
     }
  }
//+------------------------------------------------------------------+

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

Figure 1. Messagerie texte entre MetaTrader 5 et ICQ2Go

Renforcement des capacités

Compliquons la tâche en la rapprochant de l'application pratique. Par exemple, nous devons gérer le travail de notre Expert Advisor, et obtenir les informations nécessaires à distance, à l'aide d'un téléphone portable ou d'un autre PC connecté à Internet. Pour se faire, nous décrivons un ensemble de commandes permettant de piloter le futur Expert Advisor. Complétons également le conseiller avec une fonction d'analyse pour décoder les commandes entrantes.

Le format, commun à toutes les commandes, sera le suivant : 

[? |!] [commande] [paramètre] [valeur] ,

où? - Un symbole de lecture de commande ; ! - Un symbole d'écriture d'opération.

Une liste de commandes donnée dans le tableau ci-dessous :

     
 aide  lecture  Affichage de référence de la syntaxe et de la liste des commandes
 info  lecture  Affichage des données du récapitulatif du compte
 symbole  lecture  Prix du marché pour une paire de devises donnée
 commandes  lecture /écriture  Gestion des commandes ouvertes
 param  lecture /écriture  gestion des paramètres de l'Expert Advisor
 Clôturer  enregistrer  Fin des travaux de l'Expert Advisor et fermeture du terminal
 shdwn  enregistrer  Arrêt du PC


L'Expert Advisor, qui implémente le traitement de cet ensemble de commandes, se trouve dans le fichier icq_power.mq5 .

La figure 2 montre une démonstration claire du travail de l'Expert Advisor. Les commandes sont reçues depuis CCP avec un client ICQ installé (Figure 2a), ainsi que via le serveur WAP http://wap.ebuddy.com qui implémente le travail avec ICQ (Figure 2b). La deuxième option est préférable pour ceux qui ne souhaitent pas s’occuper de la recherche, l’installation et le configuration des logiciels pour ICQ sur leur téléphone mobile.

         

Figure 2. Travailler avec un conseiller via le client ICQ pour Pocket PC (Figure 2a), ainsi que via le site wap wap.ebuddy.com (Figure 2b).

Composant visuel ICQ

Cette section considère brièvement un exemple de script icq_visual.mq5 qui implémente un composant, dont l'apparence visuelle est illustrée en figure 3.

Figure 3. Composant Visual ICQ

Figure 3. Composant visuel ICQ

La forme du composant ressemble à une fenêtre Windows et est construite à partir de tableaux d'éléments de contrôle, tels que des boutons, des zones de texte et des étiquettes de texte.

Par souci de commodité, un élément de contrôle intégré pour stocker une liste de comptes et de contacts est implémenté dans le formulaire. Les valeurs sont sélectionnées dans la liste à l'aide des boutons de navigation appropriés.

Pour créer une fenêtre dans le style d' ICQ 6.5, nous pouvons remplacer les boutons par des balises d'image. La figure 4 montre l'apparence visuelle du composant, implémentée dans le script icq_visual_skin.mq5. Pour ceux qui souhaitent créer leur propre design de composant, il suffit d’élaborer et de remplacer le fichier skin.bmp, qui est responsable de l'apparence de la fenêtre.

Figure 4. Conception des couleurs de la composante visuelle d' ICQ

Figure 4. Couleur conception du composant visuel ICQ

Conclusion

Cet article montre l'un des moyens les plus simples d'implémenter un client ICQ pour MetaTrader 5 en utilisant les moyens d'un langage de programmation intégré.


Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/64

Fichiers joints |
icq_mql5_doc.zip (406.44 KB)
icq_mql5.zip (98.31 KB)
Créer un jeu "Serpent" en MQL5 Créer un jeu "Serpent" en MQL5
Cet article décrit un exemple de programmation de jeu "Snake". Dans MQL5, la programmation du jeu est devenue possible principalement grâce aux fonctionnalités de gestion des événements. La programmation orientée-objet simplifie considérablement ce processus. Dans cet article, vous allez apprendre les fonctionnalités de traitement des événements, les exemples d'utilisation des classes Standard MQL5 Library et les détails des appels de fonction périodiques.
Création de Panneaux de Contrôle Actifs dans MQL5 pour le Trading Création de Panneaux de Contrôle Actifs dans MQL5 pour le Trading
L'article traite du problème d’élaboration de panneaux de contrôle actifs en MQL5. Les éléments d'interface sont gérés par le mécanisme de gestion des événements. En outre, l'option d'une configuration flexible des propriétés des éléments de contrôle est disponible. Le panneau de contrôle actif permet de travailler avec des positions, ainsi que de définir, modifier et supprimer des commandes de marché et en cours.
Transfert d'indicateurs de MQL4 vers MQL5 Transfert d'indicateurs de MQL4 vers MQL5
Cet article est dédié aux spécificités du transfert des constructions de prix rédigées en MQL4 vers MQL5. Pour rendre le processus de transfert des calculs d'indicateurs de MQL4 à MQL5 plus facile, la bibliothèque de fonctions mql4_2_mql5.mqh est suggérée. Son usage est décrit sur la base du transfert des indicateurs MACD, Stochastique et RSI.
Création et publication des rapports de trade et de notifications par SMS Création et publication des rapports de trade et de notifications par SMS
Les traders ne sont toujours pas en mesure et n’ont pas envie de s'asseoir au terminal de trading pendant des heures. Surtout si le système trading est plus ou moins formalisé et peut identifier automatiquement certains états du marché. Cet article décrit comment générer un rapport des résultats du trade (à l'aide d'Expert Advisor, d'un indicateur ou d'un script) sous forme de fichier HTML et le télécharger via FTP sur le serveur WWW. Nous envisagerons également d'envoyer des notifications d'événements de trade sous forme de SMS sur un téléphone mobile.