Discusión sobre el artículo "Conexión del Expert Advisor con ICQ en MQL5"

 

Artículo publicado Conexión del Expert Advisor con ICQ en MQL5:

Este artículo describe el método de intercambio de información entre el Expert Advisor y usuarios de ICQ, y presenta varios ejemplos. El material facilitado resultará interesante para aquellos que deseen recibir información de trading remotamente de un terminal de cliente, a través de un ICQ client en su teléfono móvil o PDA.

Figura 4. Diseño de colores del componente visual del ICQ

Autor: Andrey Voytenko

 

Gracias por el artículo. Ha sido interesante.

Aunque ModIcq es perfectamente utilizable sin modificación, es más fácil trabajar con la versión modificada :)

 
GarF1eld писал(а) :

ModIcq es perfectamente utilizable sin modificaciones

IcqMod.dll no se puede utilizar directamente en MT5, porque trabaja con cadenas Ansi, y en MT5 las cadenas están en formato Unicode. Por lo tanto, el proyecto tuvo que ser rediseñado para trabajar con mensajes en Unicode (para ello, el protocolo no utiliza formato binario sino HTML). Ahora, ¡envía y recibe mensajes en cualquier idioma del mundo! Espero que el proyecto tenga demanda, lo que permitirá mejorarlo según sus deseos.

 
avoitenko:

IcqMod.dll no se puede usar directamente en MT5, porque trabaja con cadenas Ansi, y en MT5 las cadenas están en formato Unicode.

No exactamente. Es posible convertir usando StringToCharArray. Por ejemplo, este código funciona para mí

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 cadenas en un array de caracteres para pasar a la dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // conectar
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // comprobar si hay mensajes entrantes
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN del remitente
            msgStr = CharArrayToString(msgR);     // mensaje
            
         uchar msgS[];
         // añadir antes del mensaje Received: y devolverlo
         StringToCharArray("Recibido:" + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Pero es inconveniente convertir todo el tiempo, por lo que su biblioteca es mucho más utilizable en este sentido.

También pensé en los proxies. ¿Quizás haya alguna configuración que funcione adecuadamente para una máquina local? Es decir, si no utilizamos un proxy, a continuación, algunos ajustes por defecto se establecen en el proxy y todo funciona. Como una opción para hacer 2 Conectar funciones en la biblioteca - para la variante con y sin proxy

 
GarF1eld писал(а) :

Es posible convertir utilizando StringToCharArray.

Los cambios realizados en la librería no sólo afectaron al tipo de valor pasado para cadenas (era char* y pasó a ser wchar_t*). Sería demasiado sencillo. También ha cambiado el formato del mensaje transmitido (véase la función BuildQuery_SendMsg_Unicode en el código fuente de la dll), que ha pasado a ser universal (HTML) en lugar de nativo (binario). El hecho de que los literales rusos transmitidos a través de IcqMod se reciban correctamente es mérito del programa ICQ nativo en el que lo estás probando. Intenta probar la recepción de mensajes rusos en http://wap.ebuddy.com/ o en un gestor de ICQ alternativo, y verás garabatos en lugar de cirílico. He probado una docena de gestores ICQ en los que mi proyecto funciona correctamente no sólo con cirílico, sino también con cualquier otro idioma del mundo. Perdón, por supuesto, por la publicidad.

GarF1eld escribió(a) :

También pensando en proxies...

Sobre los proxies. Hice pruebas, pero no locales sino remotas SOCK4/SOCK5. No logré trabajar con ellos. Por eso decidí no usarlos en absoluto en el proyecto. Si es necesario, voy a tratar de hacerlo.

 

Gracias. Ha quedado muy claro.

 

Hacía tiempo que no visitaba este hilo. Mi icq_power.mqh no compila, dice *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

¿Qué puede significar?

 
sv_design:

Hacía tiempo que no visitaba este hilo. Mi icq_power.mqh no compila, dice *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

¿Qué puede significar?

Significa que

el compilador MS Visual Studio no está instalado en el sistema

o

ha fallado la inicialización del compilador

 
sv_design:

¿Qué significa eso?

O actualizar, o ejecutar ME bajo admin, o servicedesk.
 
avoitenko:

Intente probar la recepción de mensajes rusos en http://wap.ebuddy.com/ o en un gestor ICQ alternativo, y verá garabatos en lugar de cirílico. He probado una docena de gestores ICQ, en los que mi proyecto funciona correctamente no sólo con cirílico, sino también con cualquier otro idioma del mundo. Lo siento, por supuesto, para la publicidad.

El cirílico no es tan necesario, pero las etiquetas html en los mensajes son estresantes (tanto en Quip como en el ICQ nativo de la última versión). Sería mejor si fuera estrictamente en inglés, pero sin tags....
 

2 preguntas:

1) ¿Sigue funcionando en sistemas x32? (no tengo oportunidad de comprobarlo).

2) ¿No se ha rediseñado para x64? (bajo x64 no funciona) .

Estaré muy agradecido por la respuesta. Traté de rehacerlo - no funcionó - cuando trabajo, se bloquea

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: Necesito exactamente ICQ...