【问题标题】:How to transfer live data between Python and MQL4?如何在 Python 和 MQL4 之间传输实时数据?
【发布时间】:2020-10-19 14:53:35
【问题描述】:

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 无法通过端口接收消息数据

【问题讨论】:

    标签: python zeromq mql4 algorithmic-trading metatrader4


    【解决方案1】:

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

    开始使用 REQ/REP 可扩展的正式沟通原型是相当苛刻的。您的模型代码忽略了这个原型的机制,没有收到 REQ-side 消息(您的代码没有执行),REP- side 永远不会进入一个状态(REQ/REP 是一个 dFSA - 一个分布式有限状态自动机),其中一个 .send()-method 可以执行(本机 API 会报告一个错误状态,这显示了一些情况,其中一个 dFSA 状态-违反了规则)。

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

    MQL4 端将PUSH,python 端将PULL

    我之所以使用它,是因为 ZeroMQ v2.11 被移植为一个 DLL 以与 MQL4 一起使用,并且我所有的 交易项目都可以正常工作。

    【讨论】:

    • 在socket类中找不到Push功能 有机会分享一下你用代码示例说的解决方案吗?
    • 您确定在您使用的 MQL4/5 的 ZeroMQ 绑定中没有实现 ZMQ_PUSH 套接字原型吗?我怀疑它被排除在外了......但是......无论如何,我使用来自 Austen Conrad 的 ZeroMQ 绑定(源 + 可从github.com/AustenConrad/mql4zmq 获得的预编译二进制文件),它支持原生 API v2 中存在的所有 ZeroMQ 原型。 11 和作为魅力。也可以随意使用它并享受 distributed-computing 的 ZeroMQ 信令/消息传递 mezzosystem 的清晰度
    • M1:绑定扬声器出错!我遇到了他的错误
    • 什么?那是可重现的吗?记录可重现的 MCVE,使用其他端口号或在每次完成崩溃测试时重新启动,因为您的代码具有零优雅资源的释放和终止关怀(并且 .bind()-s 经常停留在端口上......而不是他们免费直到重新启动)
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多