首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ZeroMQ从Python到Metatrader 4连接

如何使用ZeroMQ从Python到Metatrader 4连接
EN

Stack Overflow用户
提问于 2019-08-30 19:58:22
回答 2查看 9.3K关注 0票数 1

我要一位专家顾问通过电报信息打开一个交易扳机。

我成功地建立了一个Hello应用程序,使用MQ4作为服务器,Python/Telegram-bot作为客户端。当电报机收到一条消息时,他会向MQ4发送一个请求,并在不执行交易的情况下得到一个简单的响应。

在下面运行代码。

代码语言:javascript
运行
复制
#   Hello World client in Python
#   Connects REQ socket to tcp://localhost:5555

import zmq
context = zmq.Context()

#  Socket to talk to server
print("Connecting to trading server…")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
print("Connecting to trading server succeed")


#################################################################################
# Use your own values from my.telegram.org
api_id = ######
api_hash = '#####'
bot_token = '#####'
#################################################################################

from telethon import TelegramClient, events

client = TelegramClient('anon', api_id, api_hash)

@client.on(events.NewMessage)
async def my_event_handler(event):


    if "Ascending" in event.raw_text:

        if "AUDUSD" in event.raw_text:
            await event.reply("AUDUSD sell")

            #  Do 1 request, waiting for a response
            for request in range(1):
                print("Telegram: AUDUSD sell execution requested %s …" % request)
                socket.send(b"AUDUSD Sell execute")
                #Send 2 variables (Ordertype // Symbol)

                #  Get the reply. -> Not neccesary for final application
                #  Apülication just needs to send 2 Varianles to MQ4 and trigger the open_order()
                message = socket.recv()
                print("Received reply %s [ %s ]" % (request, message))



client.start()
client.run_until_disconnected()
代码语言:javascript
运行
复制
// Hello World server in MQ4

#include <Zmq/Zmq.mqh>

//+------------------------------------------------------------------+
 void OnTick()
  {
   Context context("helloworld");
   Socket socket(context,ZMQ_REP);

   socket.bind("tcp://*:5555");

   while(!IsStopped())
     {
      ZmqMsg request;

      // Wait for next request from client

      // MetaTrader note: this will block the script thread
      // and if you try to terminate this script, MetaTrader
      // will hang (and crash if you force closing it)

      socket.recv(request);
      Print("Receive: AUDUSD Sell execute");

      Sleep(1000);

      ZmqMsg reply("Trade was executed");
      // Send reply back to client
      socket.send(reply);
      Print("Feedback: Trade was executed");
     }
  }
//+------------------------------------------------------------------+

现在,我想将两个变量从Python发送到MQ4。1.订单类型:买卖2.符号:欧元美元、澳元美元、.

如果消息包含“上升”-如果消息包含“降序”,则发送"Buy“

发送"AUDUSD“如果消息包含"AUDUSD",.

为此,我从Darwinex找到了一个库,并希望将它(消息的解释,以数组的形式发送值)与我已经在运行的电报-bot结合起来。

为了进行测试,我想自己尝试一下Darwinex的示例代码。

我找到了代码v2.0.1:

Python:RC8.py

MQ4:(注意:这个库代码可能在最终的应用程序中取代上面的全部MQ4代码。) RC8.mq4

当我在不改变的情况下复制代码时,在Python中会出现一个错误:

NameError:未定义名称“_zmq”

运行后:_zmq._DWX_ZeroMQ_Connector() -在Spyder的内核中。

我能做些什么来纠正这个错误?

在最后一个状态下,我希望在同一个Windows 2012 R2上运行Python和。

如果我从服务器运行powershell中的.py文件,还是应该在run端托管该文件,这就足够了吗?

我希望在我的VPS或Webside主机服务器上运行整个系统/examplecode,并为进一步的编码操作提供一个测试环境,但目前我无法使Python中的库代码正常运行。

此外,MT4也避免了当前代码的崩溃,但是如果我将我的应用程序与库代码示例结合起来,则应该进行修复。

(用WIN 10在本地PC上运行一切)。

EN

Stack Overflow用户

发布于 2019-11-21 20:04:16

要解决这个问题,您需要这样做:

代码语言:javascript
运行
复制
from DWX_ZeroMQ_Connector_v2_0_1_RC8 import DWX_ZeroMQ_Connector
_zmq = DWX_ZeroMQ_Connector()

(酌情调整连接器的版本)。应该能解决这个问题。

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

https://stackoverflow.com/questions/57732595

复制
相关文章

相似问题

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