我们有一个“交易复制”软件,顾名思义,它用于将交易从一个交易者(发送者)映射到多个其他交易者(接收者)。它有三个主要组成部分:
1.发件人客户端.
2.服务器.
3.接收客户端.
发件人->服务器->接收器
发送方是使用MQL脚本构建的。MQL是为使用C++构建的交易商编写的一种编程语言。由于有一个发件人,发送方代码将交易信息(或信号)推送到服务器。服务器基于PHP,有一个简单的MySQL数据库,管理员可以在该数据库中维护将该信号转发给的用户。接收机也是用MQL构建的。但是目前它是使用一种独特的技术构建的,为了表明我们对它不太确定,因为我们第一次接触到了代码,而原来的程序员并不像预期的那样出现在哪里。因此,回到问题,接收客户端有一段代码,似乎“轮询”服务器的任何更新。MQL使用C++库调用使用InternetOpenUrlA的InternetReadFile函数。现在,MQL每隔X毫秒向服务器发送一个请求,以查看是否有新的信号,并在找到它时提取它。如果提供MQL代码可以帮助我做到这一点。
现在来回答我的问题。
乐意提供代码,进一步澄清。
发布于 2012-11-27 17:41:25
任何投票将导致延迟和产生额外的流量,你无法逃脱。理想情况下,您可能希望使用以太直接解决方案:“套接字到套接字”或异步推送,类似于zeromq(也在socket上,刚刚抽象)。
问题是:当你在交易终端运行时,你的努力值得吗?由于您从一个终端到另一个服务器,延迟已经是固有的。另外,由于接收方的执行以及代理的执行速度,您将被延迟。因此,最终,当市场移动,你会看到一个巨大的差异,原来和副本,这违背了解决方案的目的。这个功能实际上应该由代理提供,并在服务器api插件或管理器api中实现(至少)。除此之外,大多数经纪商的设置:延迟+价差+标记,如果希望通过复制“好的”交易获利,那么客户的任何优势都会被吞噬。
为了解决网络问题,由于您知道您的客户端正在运行mt4,所以您也知道应该在客户端机器上打开443个出站,因为这是mt4使用的。您还可以相当确信http(80)也是开放的,特别是因为当前的解决方案使用http进行通信。因此,如果您将服务器主机设置为443或80,并且您的发送方和接收方都作为客户端连接到您的服务器,那么客户机ip和防火墙设置就不重要了。除此之外,您始终可以实现某种基于文件的配置,以便在安装/故障排除过程中调整客户端的端口。最后,无论您的轮询还是异步您的网络问题都是一样的,这都归结为套接字上的tcp。
https://stackoverflow.com/questions/13574182
复制相似问题