Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай последние события MQL5.community!
MetaQuotes Software Corp.
Модератор
180322
MetaQuotes Software Corp. 2010.04.26 09:16 

Опубликована статья Связь ICQ и эксперта в MQL5:

В статье рассматривается способ двустороннего обмена текстовыми сообщениями между клиентами ICQ, используя средства программирования языка MQL5. Материал заинтересует тех, кто хочет получать торговую информацию из работающего торгового терминала удаленно, например, через ICQ клиента в своем мобильном телефоне или КПК.

Автор: Андрей

Alexander
1510
Alexander 2010.04.26 17:08  

Спасибо за статью. Интересно получилось.

Хотя ModIcq прекрасно используется и без доработки, с доработанным вариантом работать проще :)

Andrey Voytenko
22951
Andrey Voytenko 2010.04.26 17:41  
GarF1eld писал(а)  :

 ModIcq прекрасно используется и без доработки

IcqMod.dll использовать напрямую в MT5 не получится, т.к. она работает с Ansi строками, а в MT5 строки в Unicode формате. Поэтому, проект пришлось переделать под работу с сообщениями в Unicode(для этого в протоколе используется не бинарный а HTML формат). Теперь, отправляйте и получайте сообщения на любом языке мира! Надеюсь, проект будет востребованным, что позволит его улучшать согласно Вашим пожеланиям.

Alexander
1510
Alexander 2010.04.26 18:45  
avoitenko:

IcqMod.dll использовать напрямую в MT5 не получится, т.к. она работает с Ansi строками, а в MT5 строки в Unicode формате.

Не совсем так. Есть возможность конвертнуть с помощью StringToCharArray. Например, у меня такой код работает

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()
{
   // переводим строки в массив символов для передачи в dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // подключаемся
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // проверяем на входящие сообщения
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN отправителя
            msgStr = CharArrayToString(msgR);     // сообщение
            
         uchar msgS[];
         // добавляем перед сообщением Получено: и отсылаем обратно
         StringToCharArray("Получено: " + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Но конвертировать постоянно неудобно, поэтому Ваша библиотека намного юзабельней в этом смысле. 

Еще думал по поводу прокси. Возможно есть какие-то настройки, которые будут адекватно работать для локальной машины? То есть если мы не используем прокси, то в прокси выставляются какие-то настройки по умолчанию и все работает. Как вариант сделать в библиотеке 2 функции Connect - для варианта с прокси и без

Andrey Voytenko
22951
Andrey Voytenko 2010.04.26 23:46  
GarF1eld писал(а)  :

Есть возможность конвертнуть с помощью StringToCharArray.

  Изменения, внесенные в библиотеку коснулись не только типа передаваемого значения для строк (был char* а стал wchar_t*). Это было бы слишком просто. Изменился формат передаваемого сообщения (смотри функцию BuildQuery_SendMsg_Unicode в исходном коде dll) который стал универсальным (HTML) в отличие от родного (бинарного). То, что передаваемые русские литеры через IcqMod принимаются правильно, это заслуга родной программы ICQ на которой вы это тестируете. Попробуйте протестировать на приём русских сообщений на сайте http://wap.ebuddy.com/ или альтернативном ICQ менеджере, и вместо кириллицы вы увидите каракули. Мной было перепробовано с десяток ICQ менеджеров, на которых мой проект корректно работает не только с кириллицей, но и с любым другим языком мира. Извините, конечно, за рекламу.

GarF1eld писал(а)  :

Еще думал по поводу прокси...

На счёт прокси. Тестировал, но не локальные а удаленные SOCK4/SOCK5. Что-то у меня не получалось с ними работать. Поэтому, в проекте решил вообще отказаться от них. Если нужно, попробую сделать.

Alexander
1510
Alexander 2010.04.27 00:21  

Спасибо! Доходчиво объяснили.

sv_design
14
sv_design 2013.01.23 00:02  

Так, ветка давно не посещалась. У меня icq_power.mqh не компилируется, ругается *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initializing the compiler*.

Что бы это могло значить? 

o_O
Модератор
23615
o_O 2013.01.23 06:55  
sv_design:

Так, ветка давно не посещалась. У меня icq_power.mqh не компилируется, ругается *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initializing the compiler*.

Что бы это могло значить? 

это значит, что

MS Visual Studio compiler is not installed in the system

или

failed initializing the compiler


Комбинатор
15775
Комбинатор 2013.01.23 10:57  
sv_design:

Что бы это могло значить? 

Или обновиться, или запустить МЕ под админом, или в сервисдеск.
Serhii Shevchuk
7088
Serhii Shevchuk 2013.03.17 19:35  
avoitenko:

Попробуйте протестировать на приём русских сообщений на сайте http://wap.ebuddy.com/ или альтернативном ICQ менеджере, и вместо кириллицы вы увидите каракули. Мной было перепробовано с десяток ICQ менеджеров, на которых мой проект корректно работает не только с кириллицей, но и с любым другим языком мира. Извините, конечно, за рекламу.

Да кириллица не так и нужна, а вот теги html в сообщениях напрягают (и в квипе, и в родном ICQ последней версии). Уж лучше бы было сугубо на английском, но без тегов...
Andrey Miguzov
2067
Andrey Miguzov 2013.11.06 23:37  

2 вопроса:

1) Ещё работает на x32 системах?  (возможности проверить у меня нет). 

2) Никто не переделывал под x64?  (под x64 не работает) .

Буду очень благодарен за ответ. Переделывать пробовал - не получилось - при работе ругается

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: Нужно именно ICQ...
/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий