在MT5下利用python作策略统计分析-backtest复盘
这篇博文是 mt5+python 博文系列第五篇,也是最后一篇,探讨 mt5+python 最大的弱点,没有提供 mt5 backtest 策略复盘接口的问题。“backtest” 中文就是“复盘”或称“回测”。
解决的方式有三种,第一种是使用国外支持 python 策略开发复盘的网站。国外提供这类免费服务的有许多平台,不过大部分专注在美股和期权的环境,其中有一家 QuantConnect 对于衍生性商品甚至提供 FXCM 和 Oanda 平台报价数据对接接口,可以作为类比 mt5 商品策略的复盘。
第二种是利用 python 已有的策略复盘函数库,例如 Zipline 或 Backtrader,直接在 python 上作复盘。下面的复盘结果是在 mt5+python 环境下调用 mt5 EURUSD H1 过去一年 K 线转换 pandas dataframe 格式再馈入 Backtrader 为数据源,简单的用 50,100 两条均线向上和向下交叉作多单和空单信号(同时只允许一个方向单)复盘过去1年得到的复盘图。
这样简单的策略复盘 EURUSD H1 得到还是一个正值的结果,不过这也要感谢过去一年 EURUSD 是走了一个多方趋势年。所谓一年趋势两年震荡,趋势年才赚这么少是无法抵抗后续震荡年来回拉锯对于如此简单趋势信号策略的亏损。
第三种方式是在 python 调用 mt5 行情数据后,根据自己的 python 交易模型和策略生成一个历史多空信号 csv 档,再另外写一个 mt5 或 mt4 简单的 ea 来读取这个历史信号档在 mt4/mt5 复盘环境下作下单加仓或平仓判断。生成的历史多空信号格式可以如下面的方式,每个信号带有商品名,多空区别 b 或 s,和信号时间(unix time 格式)。
mt5 因为没有像 mt4 复盘 tester 文件夹下还有 Files 文件夹,最简单的解决方式是 python 把生成的历史信号档写入至 mt4/mt5 共用的 common 文件夹下的 Files 文件夹,在 mt4/mt5 ea 在复盘初始化时都用 FILE_COMMON 方式来读取。为何有如此饶舌的解法,原因是 mt4/mt5 复盘环境是不支持使用 dll,所以复盘时不能靠 系统文件 dll 读取电脑里的任何位置的档案,只能读取 mt4/mt5 视为 sandbox 环境下的文件夹的文件。
把上面的两条均线交叉的多空信号在 mt5 下复盘 EURUSD H1 过去一年的结果如下:
在 mt4 复盘如下,和 mt5 复盘相当接近,不过还是有些差异,差异在使用的交易商不同,持仓成本也有些不同。mt4 复盘图横轴是平仓的顺序号,mt5 复盘图横轴是时间轴,所以横轴的每个平仓单位置间距不同在这里,mt5 的复盘图显示方式自然是比较适合作为策略验证的方式。
会用 python 来作策略,多空信号的模型判断自然是复杂型的统计计算或机器学习的模型,要是简单的数学模型,直接使用 mt4/mt5 ea 来写即可,不需要搞得如此复杂。
个人提供 MT4/MT5 EA 或 指标定制编程代写服务,有兴趣可扫描下方晓辉编程二维码,添加为好友做进一步沟通。