我试过了,但自己想不出来。
我知道MT4提供管道和WebRequest(),作为一种通信手段,但是WebSocket并不是作为编程的一部分构建的。所以现在,管道是唯一可用的东西。但在某一时刻与管道中断的沟通。它在发送时会跳过一些信号。
伙计们,我怎样才能避开这一切呢?
发布于 2018-05-24 19:09:34
伙计们,我怎样才能避开这一切呢?
免费使用ZeroMQ或nanomsg信令/消息传递框架
多年前就有这样的需求,开始使用ZeroMQ /ML 4绑定,以便使MetaTrader终端在分布式计算 QuantFX分析和基于ML的增强交易系统中工作。
没有只有O/S本地主机的管道,没有基于文件的伪装,而是一个公平的、分布式的、低延迟的信令/消息传递,具有:
<< 80 [ms] RTT下具有延迟如果要将集成需求保持在您自己的设计控件之下,ZeroMQ是一种方法。在[ ZeroMQ层次结构在不到5秒内 ]节中给出了一个简短的草图。
请随意阅读更多的这里,在零q和其他相关的帖子。
发布于 2018-05-24 15:28:16
在MQL中的管道是通过文件实现的,因此您可以使用文件而不是管道-您将收到相同或更快的结果,并且不需要关心通信。
发布于 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
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);
});
});
https://stackoverflow.com/questions/50509495
复制相似问题