Discussione sull’articolo "Collegamento di Expert Advisor con ICQ in MQL5"

 

Il nuovo articolo Collegamento di Expert Advisor con ICQ in MQL5 è stato pubblicato:

Questo articolo descrive il metodo di scambio di informazioni tra l'Expert Advisor e gli utenti ICQ, vengono presentati diversi esempi. Il materiale fornito sarà interessante per coloro che desiderano ricevere informazioni di trading in remoto da un terminale del cliente, tramite un client ICQ nel proprio telefono cellulare o PDA.

La Figura 1. serve come dimostrazione del lavoro dell'Expert Advisor, che consente lo scambio di messaggi di testo con il client ICQ.

Figura 1. Messaggi di testo tra MetaTrader5 e ICQ2Go

Figura 1. Messaggi di testo tra MetaTrader 5 e ICQ2Go

Autore: Andrey Voytenko

 

Grazie per l'articolo. È stato interessante.

Anche se ModIcq è perfettamente utilizzabile senza modifiche, è più facile lavorare con la versione modificata :)

 
GarF1eld писал(а) :

ModIcq è perfettamente utilizzabile senza modifiche.

IcqMod.dll non può essere utilizzato direttamente in MT5, perché lavora con stringhe Ansi, mentre in MT5 le stringhe sono in formato Unicode. Pertanto, è stato necessario ridisegnare il progetto per lavorare con i messaggi in Unicode (a questo scopo, il protocollo non utilizza il formato binario ma quello HTML). Ora è possibile inviare e ricevere messaggi in qualsiasi lingua del mondo! Spero che il progetto sia richiesto, il che permetterà di migliorarlo secondo i vostri desideri.

 
avoitenko:

IcqMod.dll non può essere utilizzato direttamente in MT5, perché funziona con stringhe Ansi e in MT5 le stringhe sono in formato Unicode.

Non esattamente. È possibile convertire utilizzando StringToCharArray. Ad esempio, questo codice funziona per me

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()
{
   // convertire le stringhe in un array di caratteri da passare alla dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // connettersi
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // controlla i messaggi in arrivo
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN del mittente
            msgStr = CharArrayToString(msgR);     // messaggio
            
         uchar msgS[];
         // aggiungere prima del messaggio Received: e inviarlo di nuovo
         StringToCharArray("Ricevuto:" + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Ma è scomodo convertire sempre, quindi la vostra libreria è molto più utilizzabile in questo senso.

Ho pensato anche ai proxy. Forse ci sono alcune impostazioni che funzionano adeguatamente per una macchina locale? Cioè, se non si usa un proxy, si impostano alcune impostazioni predefinite nel proxy e tutto funziona. Come opzione si potrebbero creare 2 funzioni Connect nella libreria - per la variante con e senza proxy

 
GarF1eld писал(а) :

È possibile convertire utilizzando StringToCharArray.

Le modifiche apportate alla libreria non riguardano solo il tipo di valore passato per le stringhe (era char* ed è diventato wchar_t*). Sarebbe troppo semplice. È cambiato anche il formato del messaggio trasmesso (si veda la funzione BuildQuery_SendMsg_Unicode nel codice sorgente della dll), che è diventato universale (HTML) anziché nativo (binario). Il fatto che i messaggi letterali russi trasmessi tramite IcqMod vengano ricevuti correttamente è merito del programma ICQ nativo su cui si sta effettuando il test. Provate a testare la ricezione dei messaggi russi su http://wap.ebuddy.com/ o su un gestore ICQ alternativo, e vedrete degli scarabocchi al posto del cirillico. Ho provato una dozzina di gestori ICQ sui quali il mio progetto funziona correttamente non solo con il cirillico, ma anche con qualsiasi altra lingua del mondo. Mi dispiace, ovviamente, per la pubblicità.

GarF1eld ha scritto(a) :

Sto pensando anche ai proxy...

A proposito di proxy. Ho provato, ma non in locale, bensì in remoto, SOCK4/SOCK5. Non sono riuscito a lavorare con loro. Per questo ho deciso di non usarli affatto nel progetto. Se necessario, proverò a farlo.

 

Grazie! Era molto chiaro.

 

Non ho visitato questo thread per molto tempo. Il mio icq_power.mqh non si compila, dice *2 Il compilatore Cpp 02:50:00 Il compilatore MS Visual Studio non è installato nel sistema o non è riuscita l'inizializzazione del compilatore*.

Cosa può significare?

 
sv_design:

Non ho visitato questo thread per molto tempo. Il mio icq_power.mqh non si compila, dice *2 Il compilatore Cpp 02:50:00 Il compilatore MS Visual Studio non è installato nel sistema o non è riuscita l'inizializzazione del compilatore*.

Cosa può significare?

significa che

il compilatore MS Visual Studio non è installato nel sistema

oppure

l'inizializzazione del compilatore non è riuscita

 
sv_design:

Cosa significa?

O aggiornare, o eseguire ME sotto amministrazione, o servicedesk.
 
avoitenko:

Provate a testare la ricezione di messaggi in russo su http://wap.ebuddy.com/ o su un gestore ICQ alternativo, e vedrete degli scarabocchi al posto del cirillico. Ho provato una dozzina di gestori ICQ, sui quali il mio progetto funziona correttamente non solo con il cirillico, ma anche con qualsiasi altra lingua del mondo. Mi dispiace, ovviamente, per la pubblicità.

Il cirillico non è così necessario, ma i tag html nei messaggi sono stressanti (sia in Quip che in ICQ nativo dell'ultima versione). Sarebbe meglio se fosse rigorosamente in inglese, ma senza tag....
 

2 domande:

1) Funziona ancora su sistemi x32? (Non ho la possibilità di verificarlo).

2) Nessuno ha riprogettato per x64? (sotto x64 non funziona).

Vi sarò molto grato per la risposta. Ho provato a rifarlo - non ha funzionato - quando lavoro, si blocca.

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: Ho bisogno esattamente di ICQ...