首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MT4通信方法

MT4通信方法
EN

Stack Overflow用户
提问于 2018-05-24 12:30:17
回答 3查看 2.5K关注 0票数 0

我试过了,但自己想不出来。

我知道MT4提供管道和WebRequest(),作为一种通信手段,但是WebSocket并不是作为编程的一部分构建的。所以现在,管道是唯一可用的东西。但在某一时刻与管道中断的沟通。它在发送时会跳过一些信号。

伙计们,我怎样才能避开这一切呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-24 19:09:34

伙计们,我怎样才能避开这一切呢?

免费使用ZeroMQ或nanomsg信令/消息传递框架

多年前就有这样的需求,开始使用ZeroMQ /ML 4绑定,以便使MetaTrader终端在分布式计算 QuantFX分析和基于ML的增强交易系统中工作。

没有只有O/S本地主机的管道,没有基于文件的伪装,而是一个公平的、分布式的、低延迟的信令/消息传递,具有:

  • 远程键盘/终端系统-控制台(是的,增加了DSL命令语言)
  • 远程集中日志(避免MQL4执行从资源争用中被阻止)
  • 分布式远程AI/ML-预测引擎,在<< 80 [ms] RTT下具有延迟
  • 分布式远程自动化贸易管理处理

如果要将集成需求保持在您自己的设计控件之下,ZeroMQ是一种方法。在[ ZeroMQ层次结构在不到5秒内 ]节中给出了一个简短的草图。

请随意阅读更多的这里,在零q和其他相关的帖子。

票数 1
EN

Stack Overflow用户

发布于 2018-05-24 15:28:16

在MQL中的管道是通过文件实现的,因此您可以使用文件而不是管道-您将收到相同或更快的结果,并且不需要关心通信。

票数 0
EN

Stack Overflow用户

发布于 2019-11-06 05:21:10

我试过ZeroMQ,但没能正常工作。我现在正在使用WinSockets,到目前为止它没有问题。

请参阅:在这里,您将找到一种在MQL中使用https://www.mql5.com/en/blogs/post/706665作为服务器或客户端或两者都使用WinSockets的方法。我知道链接可能会变得死气沉沉,但是没有办法将文件附加到这个答案,而且代码没有正确的格式,所以我不能包括它。

然后,您可以使用任何也支持套接字的编程语言与MQL进行通信。我正在使用内建节点实现。请参阅:https://www.digitalocean.com/community/tutorials/how-to-develop-a-node-js-tcp-server-application-using-pm2-and-nginx-on-ubuntu-16-04

代码语言:javascript
复制
const net = require('net');
const port = 7070;
const host = '127.0.0.1';

const server = net.createServer();
server.listen(port, host, () => {
    console.log('TCP Server is running on port ' + port + '.');
});

let sockets = [];

server.on('connection', function(sock) {
    console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
    sockets.push(sock);

    sock.on('data', function(data) {
        console.log('DATA ' + sock.remoteAddress + ': ' + data);
        // Write the data back to all the connected, the client will receive it as data from the server
        sockets.forEach(function(sock, index, array) {
            sock.write(sock.remoteAddress + ':' + sock.remotePort + " said " + data + '\n');
        });
    });

    // Add a 'close' event handler to this instance of socket
    sock.on('close', function(data) {
        let index = sockets.findIndex(function(o) {
            return o.remoteAddress === sock.remoteAddress && o.remotePort === sock.remotePort;
        })
        if (index !== -1) sockets.splice(index, 1);
        console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort);
    });
});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50509495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档