Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ZeroMQ获得从Python到Metatrader 4的连接_Python_Zeromq_Telegram_Mql4 - Fatal编程技术网

如何使用ZeroMQ获得从Python到Metatrader 4的连接

如何使用ZeroMQ获得从Python到Metatrader 4的连接,python,zeromq,telegram,mql4,Python,Zeromq,Telegram,Mql4,我想请一位专家顾问通过电报信息开启一项交易 我成功地使用MQ4作为服务器,使用Python/Telegrame bot作为客户端设置了一个Hello World应用程序。 当电报机器人接收到消息时,他将向MQ4发送一个请求,并在不执行交易的情况下获得一个简单的响应 运行下面的代码 #Python中的Hello World客户端 #将REQ套接字连接到tcp://localhost:5555 导入zmq context=zmq.context() #与服务器对话的套接字 打印(“连接到交易服务器…

我想请一位专家顾问通过电报信息开启一项交易

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

运行下面的代码

#Python中的Hello World客户端
#将REQ套接字连接到tcp://localhost:5555
导入zmq
context=zmq.context()
#与服务器对话的套接字
打印(“连接到交易服务器…”)
socket=context.socket(zmq.REQ)
插座。连接(“tcp://localhost:5555")
打印(“连接到交易服务器成功”)
#################################################################################
#使用my.Telegrame.org中您自己的值
api_id=######
api#u散列='
bot#u token='#####'
#################################################################################
从telethon导入电报客户端,事件
client=TelegramClient('anon',api\u id,api\u hash)
@client.on(events.NewMessage)
异步定义我的事件处理程序(事件):
如果event.raw_文本中为“升序”:
如果event.raw_文本中的“AUDUSD”:
等待事件。回复(“澳元/美元卖出”)
#执行一个请求,等待响应
对于范围(1)中的请求:
打印(“电报:已请求%s…”%s请求)
socket.send(b“澳元/美元卖出执行”)
#发送2个变量(订单类型//符号)
#得到答复。->最终应用不需要
#应用程序只需向MQ4发送2个变量并触发open_order()
message=socket.recv()
打印(“收到的答复%s[%s]”%(请求、消息))
client.start()
client.run_直到_断开()
//MQ4中的Hello World服务器
#包括
//+------------------------------------------------------------------+
void OnTick()
{
语境(“helloworld”);
套接字(上下文,ZMQ_代表);
socket.bind(“tcp://*:5555”);
而(!IsStopped())
{
ZmqMsg请求;
//等待客户端的下一个请求
//MetaTrader注意:这将阻止脚本线程
//如果您试图终止此脚本,MetaTrader
//将挂起(如果强行关闭,则会崩溃)
socket.recv(请求);
打印(“接收:澳元/美元卖出执行”);
睡眠(1000);
ZmqMsg回复(“交易已执行”);
//将回复发送回客户端
socket.send(回复);
打印(“反馈:交易已执行”);
}
}
//+------------------------------------------------------------------+

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

如果消息包含“升序”,则发送“卖出”- 如果消息包含“降序”,则发送“购买”

如果消息包含“AUDUSD”,则发送“AUDUSD”

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


为了进行测试,我想单独尝试Darwinex中的示例代码

我找到了代码v2.0.1:

Python:

MQ4:(注意:在最终应用程序中,此库代码可能会替换上面的整个MQ4代码。)

当我复制代码而不进行更改时,Python中会出现一个错误:

NameError:未定义名称“\u zmq”

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

我可以做些什么来修复该错误


在最后一种状态下,我希望在同一台Windows Server 2012 R2上运行Python代码和专家顾问

如果我从服务器运行powershell中的.py文件,或者我应该将该文件与Web端一起托管,这就足够了吗

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

此外,MT4 CEEP与当前代码崩溃-但如果我将我的应用程序与库代码示例相结合,则应予以修复

(使用WIN 10在本地PC上运行所有内容)

Q:我认为这是MT4和Python之间的连接问题

如果没有完全可复制的MCVE代码,这是无法确定的

在python中的QuantFX和在MQL4中实现的交易生态系统MetaTrader 4终端之间使用了基于ZeroMQ的双向信令/消息传递后,使用此体系结构有着积极的经验

细节决定一切


最好的下一步: 从一个简单的python原型开始,最好使用
tcp://
传输类(win平台不需要准备使用更简单的、无协议的,
ipc://
传输类)

一旦你完成了这一琐碎的步骤,继续前进

Q:我需要如何设置服务器才能在这两者之间建立连接?因为它应该与本地PC上的连接相同

在原型设计过程中,在同一
localhost
上使用ZeroMQ是正常的,因此您可以测试和调试集成。有关ZeroMQ的详细信息,请访问

Q:如果我从服务器上运行powershell中的.py文件就足够了,还是应该使用我已有的Web端托管该文件并将其用作“Python服务器”

是的,如果.py文件是这样设计的。没有代码,没有建议。就这么简单


可能的问题: 从2.11.x到最近的4.3.+版本,ZeroMQ已经做了很多更改 安装DLL的细节很重要

MQL4同样经历了许多变化(
string
不再是字符串,而变成了
struct
// 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");
     }
  }
//+------------------------------------------------------------------+
from DWX_ZeroMQ_Connector_v2_0_1_RC8 import DWX_ZeroMQ_Connector
_zmq = DWX_ZeroMQ_Connector()