原生 Python 支持

自动化交易的成功很大程度上取决于实现这一想法的技术广度。正如我们在前面几节中已经看到的,MQL5 能让你超越交易任务的范围,能够与外部服务集成(例如,基于网络功能和自定义交易品种),使用关系数据库处理和存储数据,以及连接任意库。

最后一点允许你与任何以 DLL 格式提供 API 的软件进行交互。一些开发人员使用这种方法来连接工业分布式 DBMS(而非内置的 SQLite)、数学软件包(如 R 或 MATLAB)和其他编程语言。

Python 已经成为最流行的编程语言之一。其特点是:核心紧凑,功能由软件包补充,这些软件包是用于构建应用程序解决方案的现成脚本的集合。交易员受益于基本面市场分析(统计计算、数据可视化对象)和交易假设测试(包括机器学习)软件包的广泛选择和功能。

顺应这一趋势,MQ 于 2019 年在 MQL5 中引入了 Python 支持。这种更紧密的“开箱即用”集成允许将技术分析和交易算法完全转移到 Python 环境中。

从技术角度来看,集成是通过在 Python 中安装 "MetaTrader5" 包来实现的,该包组织了与终端的进程间交互(在撰写本文时,通过 ipykernel/RPC 机制组织交互)。

在该软件包的函数中,包含了内置 MQL5 函数的所有等效函数,可用于获取有关终端、交易帐户、Market Watch 中的交易品种、报价、分时报价、市场深度、订单、仓位和交易的信息。此外,该软件包允许你切换交易账户,发送交易订单,检查保证金要求,并实时评估潜在的利润/损失。

然而,与 Python 的集成则有一些限制。特别要注意的是,在 Python 中不可能实现诸如 OnTickOnBookEvent 等事件处理。因此,有必要使用无限循环来检查新价格,就像我们在 MQL5 脚本中必须做的那样。对交易订单执行的分析也同样困难:在没有OnTradeTransaction的情况下,需要更多的代码来了解仓位是完全平仓还是部分平仓。为了绕过这些限制,你可以组织 Python 脚本和 MQL5 的交互,例如,通过套接字组织交互。mql5.com 网站上的文章提供了实现这类桥接的例子。

因此,对于处理报价、分时报价或交易账户历史的机器学习任务,将 Python 与 MetaTrader 5 结合使用似乎是再自然不过的事情了。遗憾的是,在 Python 中你无法获取指标读数。