首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行非Python (MQL5)文件的Python命令?

执行非Python (MQL5)文件的Python命令?
EN

Stack Overflow用户
提问于 2021-04-06 12:01:08
回答 2查看 690关注 0票数 0

我有一组专家顾问(EA)脚本,它们是用MQL5编程语言为股票/外汇交易平台MetaTrader5编写的。这些文件的扩展名是mq5。我正在寻找一种定期从我的Python中以编程方式运行这些MQL5文件的方法。EAs进行了一些价格转换,最终保存了一组csv文件,这些文件稍后将被我的Python脚本读取,以便将机器学习模型应用到这些文件上。

我的第一个自然选择是用于MetaTrader5的Python。然而,根据它的文档,它“是为了方便和快速地通过处理器间通信直接从MetaTrader 5终端获取交换数据而设计的”,因此它没有提供我所需要的使用Python运行MQL脚本所需的功能。

我在这里找到了一些关于使用Python执行非Python文件的帖子(比如#1#2),但这些帖子似乎总是以它们已经编写了Python代码为前提,只有扩展不同--这与我的目标不同。

然后,我遇到了Python的subprocess模块,并开始对其进行实验。

代码语言:javascript
运行
复制
print(os.path.isfile(os.path.join("path/to/dir","RSIcalc.mq5")))
with open(os.path.join("path/to/dir","RSIcalc.mq5")) as f:
   subprocess.run([r"C:\Program Files\MetaTrader 5\terminal64.exe", f], capture_output=True)

print语句返回True,因此mq5文件存在于指定的位置。然后代码打开MetaTrader5终端,但是没有发生任何其他事情,EA没有被执行,进程在那之后立即完成。

我是否已经走上了正确的道路,实现了我在这里的目标?如果是,对我来说,从Python中以编程方式运行这些MQL5脚本的解决方案是什么?

编辑:我使用Windows 10 64位.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-06 12:30:40

subprocess确实是您想要实现的正确模块。但让我们看看你在这里做什么:

with open(os.path.join("path/to/dir","RSIcalc.mq5")) as f

您正在创建一个名为f的文件描述符句柄,它用于从文件中写入或读取内容。如果您执行print(f),您将看到它是一个python对象,转换为string看起来类似于<_io.TextIOWrapper name='RSIcalc.mq5' mode='r' encoding='UTF-8'>。这样的字符串不太可能是您希望作为命令行参数传递给您的终端可执行文件,而当您将它包含在对subprocess.run()的调用中时会发生这种情况。

你可能想做的是:

代码语言:javascript
运行
复制
full_path = os.path.abspath(os.path.join("path/to/dir","RSIcalc.mq5"))
result = subprocess.run([r"C:\Program Files\MetaTrader 5\terminal64.exe", full_path], capture_output=True)

现在,这假设您的terminal64可以执行作为参数传递的任意脚本。这可能是真的,也可能不是这样--在传递文件路径之前,您可能需要额外的参数,比如"-f“,或者您可能不得不通过stdin管道(在Windows上不太可能,但谁知道)输入脚本内容。这是您要搞清楚的,但我上面的代码可能应该是您的起点。

票数 2
EN

Stack Overflow用户

发布于 2021-04-06 12:24:34

我不认为您需要将文件对象传递给您的子进程语句。以我的经验。当文件的路径作为命令行参数提供时,程序将运行文件。试试这个:

代码语言:javascript
运行
复制
subprocess.run([r"C:\\Program Files\\MetaTrader 5\\terminal64.exe", os.path.join(“path/to/dir”, “RSIcalc.mq5”], capture_output=True)

这与在终端中键入C:\Program Files\MetaTrader 5\terminal64.exe path\to\dir\RSIcalc.mq5是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66968258

复制
相关文章

相似问题

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