距离上次文章已经过去几个月了,我一直在与模拟交易挣扎。代码已经能运行了,但是想添加止盈止损的策略,总是调不对。具体可以看项目github库(https://github.com/zwdnet/etfdata)里的simulate分支里的simulater2.py。
后来,我想不能再这么挣扎下去了。于是就在网上找量化投资的python库。几番尝试找到一个叫bt的库,是建立在ffn基础上的。试了一下,pydroid3里能装的,就用它吧。
官方文档地址: http://pmorissette.github.io/bt/index.html
以下翻译自官方文档:
bt是一个灵活的用于测试量化投资策略的Python回测框架。回测(Backtesting)是用给定的数据集测试量化投资策略的过程。本框架能使您容易的建立混合和匹配不同算法的策略。
目标是节省量化投资者重新造轮子的时间,使他们专注于工作的重要部分——策略开发。
一个例子
1 | import bt |
以上是文档里的例子,还有其它例子,我照着敲了一遍,详见btExample.py。
总结一下,使用bt框架的主要步骤是:获取数据->建立策略->建立回测->运行回测->获得结果。关键是建立策略。
下面开始用bt跑我自己的数据跟策略吧。首先先获得数据,就用我之前下载到csv文件的数据吧。
1 | #获取数据 |
bt框架对数据的要求是以”Date”为index,所以进行了相应的转换,最后把数据合并。
接着开始建立策略,先用没有止盈止损的策略。
1 | # 建立策略 |
主要参数就是策略名称,还有一个列表,包含的内容主要为执行策略的间隔,选股策略,权重,以及是否再平衡。一些常用的选项都在bt.algos模块里定义了,如果不满足需要,可以自行定义。
策略建立好以后就建立回测,所谓回测就是把策略和数据结合在一起的结构。在其中也可以指定投入初始资金等。注意策略会进行深度复制,即在回测中原始数据不会被改变,可以用在其它回测中。
1 | test = bt.Backtest(strategy, data) |
最后运行回测
1 | res = bt.run(test) |
以不同的方式输出回测结果
1 | # 输出回测结果 |
搞定!总收益率110%,最大回撤26.5%。还不错。但是还有个问题,怎么设定添加交易手续费?
方法是定义一个计算手续费的函数,
1 | # 计算交易手续费 |
然后用strategy.set_commissions(getFee)将该函数传递给策略。测试了一下(把佣金费率改大,到3%。再大,比如到30%,运行会报错。),总收益率是下降的。说明是对的。
接下来就是怎么把止盈止损策略加到策略里的问题了。下次吧。
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“好看”。
我的个人博客地址:https://zwdnet.github.io
我的个人博客地址:https://zwdnet.github.io
我的CSDN博客地址:https://blog.csdn.net/zwdnet
我的微信个人订阅号:赵瑜敏的口腔医学学习园地