参考ZuraKakushadze,JuanAndrésSerur. 151 Trading Strategies.
我只看跟股票相关的,期权、期货、债券等等的就跳过了。
价格动量策略(Price Momentum)
原理:价格的动量效应,未来的收益与过去的收益正相关。
先要解决backtrade回测股票池的问题:
https://www.backtrader.com/blog/posts/2017-04-09-multi-example/multi-example/
https://backtest-rookies.com/2017/08/22/backtrader-multiple-data-feeds-indicators/
修改了我的程序,现在回测需要传入股票列表,哪怕只有一只股票。
写策略也有一些变化,核心是用
1 | for i, d in enumerate(self.datas): |
来遍历股票池。
具体策略:选出表现(依据累积收益率、平均收益等)最佳的N只股票,定期淘汰最差的,选入最好的。每只股票的权重可以相同(如1/N)或不同。
这样策略分成两个阶段:首先选出股票池中表现最好的N只买入,然后定期(每月)轮换。
接下来开始干活,首先是形成股票池,然后计算回测期间每个交易日每只股票的累积收益率。这个就比较耗时了,计算了10年的数据,在服务器上跑了近两天。原因可能是我把每个交易日所有股票的累积收益率排序,再选出前10名来。应该有更好的方法:排序时间复杂度是O(nlogn),如果直接找出前10来,可能遍历一次就行了,复杂度是O(n)。但这个跑一次就行了,结果直接保存到文件,回测的时候直接调用。
1 | # 形成股票池 |
得到累积收益率数据后,就开始写回测策略了。基本上就是每个周期间隔剔除累积收益率最低的股票,买入当天股票池累积收益最高的股票。
1 | # 策略类 |
回测结果
年化3.2%,好像不咋样。可以进行参数调优的,但回测一次就要跑半个多小时,还是就算了。
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地