如何在Python和MQL4之间传输实时数据?

问题描述

Python代码

import zmq
import sys
   
port ="5555"
print("Connecting to hello world server…")

context = zmq.Context()
socket = context.socket(zmq.REQ)          #  Socket to talk to server
socket.connect("tcp://localhost:%s"%port)

while(1):                                 #  Do requests,try:                                  #     waiting each time for a response
        message = socket.recv()

        print(message)
    except:
        pass

MQL4代码

#include <Zmq/Zmq.mqh>
Context context("helloworld");
Socket socket(context,ZMQ_REP);
socket.bind("tcp://*:5555");
ZmqMsg request;
ZmqMsg reply("Trade was executed");
socket.send(reply);
Print("Feedback: Trade was executed");

当我想将数据从MQL4发送到Python编程语言时,发生无限循环,如上所述,Python无法通过端口接收消息数据

解决方法

Q “如何在python和mql4之间传输实时数据?”

开始使用 REQ/REP 相当可伸缩的正式沟通原型。您的模型代码忽略了此原型的机制,没有收到 REQ 侧消息(您的代码未执行),即 REP 端永远不会进入REQ/REP方法可以执行的状态(.send()是dFSA-分布式有限状态自动机)(本机API将报告错误状态,即显示违反dFSA状态规则的情况。

改为使用PUSH/PULL,您的演示代码将不会出现问题。

MQL4端将PUSH,python端将PULL

我使用它是因为ZeroMQ v2.11被移植为与MQL4一起使用的DLL,并且我所有的交易项目都具有吸引力。