【发布时间】:2019-08-30 19:58:22
【问题描述】:
我希望 EA 交易打开由 Telegram-Message 触发的交易。
我成功地设置了一个使用 MQ4 作为服务器和 Python/Telegram-bot 作为客户端的 Hello-World 应用程序。 当 Telegram-Bot 收到消息时,他会向 MQ4 发送一个请求,并得到一个简单的响应,而无需执行交易。
下面的运行代码。
# 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()
// 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");
}
}
//+------------------------------------------------------------------+
现在我想将 2 个变量从 Python 发送到 MQ4。 1. 订单类型:买/卖 2. 交易品种:EURUSD, AUDUSD,...
如果消息包含“升序”,则发送“卖出”- 如果消息包含“降序”,则发送“购买”
如果消息包含“AUDUSD”,则发送“AUDUSD”,...
为此,我从 Darwinex 找到了一个库,并希望将它(解释消息,作为数组发送值)与我已经运行的电报机器人结合起来。
为了测试,我想自己尝试来自 Darwinex 的示例代码。
我找到了代码 v2.0.1:
MQ4:(注意:此库代码可能会在最终应用程序中替换上面的整个 MQ4 代码。) https://github.com/darwinex/DarwinexLabs/blob/master/tools/dwx_zeromq_connector/v2.0.1/MQL4/DWX_ZeroMQ_Server_v2.0.1_RC8.mq4
当我在不更改的情况下复制代码时,Python 中出现错误:
NameError:名称“_zmq”未定义
运行后:_zmq._DWX_ZeroMQ_Connector() - 在 Spyder 的内核中。
我能做些什么来修复这个错误?
在最终状态下,我想在同一个 Windows Server 2012 R2 上运行 Python 代码和智能交易系统。
如果我从服务器在 powershell 中运行 .py 文件就足够了,还是应该使用 Webside 托管文件?
我希望在我的 VPS 或 Webside-Host-Server 上运行整个系统/示例代码,并获得一个测试环境以进行进一步的编码操作,但目前我无法让 Python 中的库代码正常运行。
MT4 也会因当前代码而崩溃 - 但如果我将我的应用程序与 Library-Codeexample 结合使用,应该可以修复。
(使用 WIN 10 在我的本地 PC 上运行所有内容)。
【问题讨论】:
-
也许您可以分辨出您使用了哪些文件,以及使用了哪些设置。也许您在启动要连接到 ZMQ 的机器人时在 MT4 中收到一些错误,您可以分享这些错误或日志?
-
我再次检查了正确的版本,发现他使用的是较新的版本。编辑我帖子中的链接 - 现在我在 Spyder 中收到一条错误消息。
标签: python zeromq telegram mql4