在MT5下利用python编写自动交易程序EA
mt5 提供的官方 python 库,该具备的交易功能函数都提供了,如要仿制 mql5 的 OnTick OnTimer 这类事件触发机制的函数,也可以变相用一些处理方式来达成,所以在 python 上开发出与 mt5 ea 相近程度的 ea 是没有问题的。
实际运行用 python 写的 ea 跑了一两天,执行压力下单和平仓测试,整体还是稳定的。
对于想要在 mt5+python 发展 ea 的交易者,最大会立即遇到的困难是,mt5 现在还没有提供 python 可以调用 mt5 backtest 的接口,也就是在 python 上开发 ea 是无法在 mt5 上作复盘测试的,只能另外再找 python 的第三方 backtest 库再多写接口来达成。
复盘不是只有验证策略的有效性,也扮演调试策略参数的重要工作,所以复盘对于开发 ea 是相当重要的环节。
另外在执行速度上,mt5+python ea 的速度自然是无法和纯在 mt5 开发的 ea 相比,这个是实际执行压力测试后得到的结论。因为 mt5+python ea 在调用当前价格和 K 线数据作为信号计算,和调用交易记录,需要透过 mt5 python 官方库与 mt5 建立在本地的一个加密的 socket 连接来作,读写速度自然是比不过 mt5 ea 直接从 mt5 内存读取行情数据和订单信息。虽然 python 是脚本编程语言,与其他编译型的编程语言程序比自然是不快,但是对于 ea 的应用,这样的慢是不太感受的到,可以直接感受到与相同 mt5 ea 的慢,主要是慢在与 mt5 间的大量数据传送和 io 读写差异上,尤其是连续调用行情数据比较多时,这样的速度差异就相当明显了。这还是有优化方式的,可以仿 mql5 指标对于初始和后续的行情读取,采取精简量的读取方式。
既然有这些缺点,在 mt5 开发 python ea 还是在有些领域有不可替代的优点,所以 metaquotes 才会在 2020 年最终还是把 python 接口和函数库提供出来。因为现在许多衍生性交易平台都已经具备了 python api,而经过这些年,python 已经成为量化交易程序最有人气的编程语言,这也让许多交易团队在建构量化交易的环境,会优先考虑 python。
另外在人工智能的量化交易,python 的机器学习和统计数组处理的第三方库大概是最丰富的编程语言。对于交易策略里有用到 tensorflow 这类机器学习库,使用 python 来开发自动交易程序是最佳的选择。
mt5 或是 mt4 ea 受限于当时 metaquotes 自定的限制,只能作单线程运行,当同时触发事件函数如 OnTimer OnTick OnChartEvent,mt5 底层会作互斥锁限制一个线程运行。和大部分编程语言一样,python 是支持多线程编程的,异步调用网络数据或平行跑 OpenCl 库,使用多线程架构会更合适。
不过对于一般型的交易策略,mt5/mt4 ea 已经相当强大了,毕竟比起其他的交易平台 例如 multicharts 或是本地文华财经的交易语言,mql5/mql4 是类 c 的编程语言,编程的弹性已经非常足够了。
个人提供 MT4/MT5 EA 或 指标定制编程代写服务,有兴趣可以通过扫描下方晓辉编程二维码添加好友,然后进一步沟通。