文章 "用 MQL5 连接 EA 交易程序和 ICQ"

 

新文章 用 MQL5 连接 EA 交易程序和 ICQ已发布:

本文描述 EA 交易程序和 ICQ 用户之间的信息交换方法,并提供了几个例子。通过他们的手机或 PDA 中的 ICQ 客户端,从一个客户端远程接收交易信息的人会对提供的材料感兴趣。

图 1. MetaTrader5 和 ICQ2Go 之间的文本消息交换

作者:Andrey Voytenko

 

感谢您的文章。这很有趣。

虽然 ModIcq 在不修改的情况下也完全可以使用,但使用修改后的版本会更方便:)

 
GarF1eld писал(а) :

ModIcq 无需修改即可使用

IcqMod.dll 无法在 MT5 中直接使用,因为它使用的是 Ansi 字符串,而 MT5 中的字符串是 Unicode 格式。因此,必须重新设计该项目,以便使用 Unicode 格式的报文(为此,协议使用的不是二进制格式,而是 HTML 格式)。现在,可以用世界上任何一种语言发送和接收信息!我希望该项目会受到欢迎,这样我们就可以根据您的愿望对其进行改进。

 
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 个连接函数,分别用于有代理和无代理的变体

 
GarF1eld писал(а) :

可以使用 StringToCharArray 进行转换。

库中所做的更改不仅影响了字符串的传递值类型(从 char* 变为 wchar_t*),而且还影响了字符串的转换。这就太简单了。传输的信息格式也发生了变化(参见 dll 源代码中的 BuildQuery_SendMsg_Unicode 函数),从本地格式(二进制)变成了通用格式(HTML)。通过 IcqMod 发送的俄语文字信息能被正确接收,这是您正在测试的本地 ICQ 程序的功劳。试着在http://wap.ebuddy.com/ 或其他 ICQ 管理器上测试俄语信息的接收,你会看到潦草的字迹而不是西里尔字母。我已经试过十几种 ICQ 管理器,在这些管理器上,我的项目不仅能正确使用西里尔文,而且能正确使用世界上任何其他语言。当然,对不起,我是在做广告。

GarF1eld 写道(a) :

还在考虑代理...

关于代理。我测试过,但不是本地的,而是远程的 SOCK4/SOCK5。我无法使用它们。所以我决定在项目中完全不使用它们。如果有必要,我会尝试使用。

 

谢谢!说得很清楚。

 

我很久没有访问这个主题了。我的 icq_power.mqh 无法编译,提示 *2 Cpp 编译器 02:50:00 MSVisual Studio 编译器未安装在系统中或初始化编译器失败*。

这是什么意思?

 
sv_design:

我很久没有访问这个主题了。我的 icq_power.mqh 无法编译,提示 *2 Cpp 编译器 02:50:00 MS Visual Studio 编译器未安装在系统中或初始化编译器失败*。

这意味着什么?

这意味着

系统中未安装 MSVisual Studio 编译器

编译器初始化失败

 
sv_design:

这意味着什么?

要么更新,要么在管理员下运行 ME,要么 servicedesk。
 
avoitenko:

如果您尝试在http://wap.ebuddy.com/ 或其他 ICQ 管理器上测试俄语信息的接收效果,您将看到潦草的字迹而不是西里尔字母。我已经尝试了十几种 ICQ 管理器,在这些管理器上,我的项目不仅能正确使用西里尔文,还能正确使用世界上任何其他语言。当然,很抱歉,这是在做广告。

西里尔文并不是那么必要,但信息中的 html 标记却很重要(在 Quip 和最新版本的本地 ICQ 中都是如此)。如果能严格使用英语,但不使用标签....,效果会更好。
 

有两个问题:

1)它还能在 x32 系统上运行吗? 我没有机会检查)。

2)没有人重新设计过 x64 系统吗?

如蒙回答,我将不胜感激。我试着重新制作它 - 但没有成功 - 当我工作时,它崩溃了

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS:需要准确的 ICQ...