本文以某在线论坛上比较流行的ETF轮动策略为例,将该策略本地化:利用本地实时获取的行情数据,来生成每日所需持有标的,并在本地利用Backtrader框架对策略进行回测。所有步骤均在本地进行,无需依托第三方平台。
策略内容:
某论坛上比较流行的一个策略是ETF核心资产轮动策略,来自wywy1995大神,原策略链接为:【回顾3】ETF策略之核心资产轮动(https://www.joinquant.com/view/community/detail/1b1aea4e33780bb81e2883e1ca0e0e69)。
该策略为动量策略,秉承着“东窗不亮西窗亮”的思想,在四大核心资产ETF之间进行轮动。四大ETF为黄金ETF、纳指ETF、创业板ETF、上证180ETF,分别代表大宗商品、海外资产、国内成长股、国内价值股。
代码主要内容:
1. 采用Tushare数据源获取行情
因为本策略只涉及4个标的的行情获取和更新,数据量较小,所以普通Tushare账号就可以用来更新数据。
2. 计算每个ETF的动量得分
该策略为日频策略,每天计算四个ETF的动量得分,取得分最高的ETF更新持仓。计算动量得分的方式也很简单,直接取ETF过去一段时间(比如过去25天)的收盘价序列进行线性拟合,最终得分为线性拟合的坡度(s)和决定性系数(R2)的乘积。当然,这里也有一些变体,比如股价的对数(对数收益率)更接近正态分布,回归时采用对数收盘价。也有人采用其他变量(如最高价、最低价)和其他指标(如RSRS)来计算动量得分。但万变不离其宗,核心还是瞄准动量。
3. Backtrader回测
在本地计算完某一段时间每天需要持仓的ETF之后,我们就可以将该持仓序列和相关行情数据喂给Backtrader,用Backtrader来在本地进行回测。Backtrader里核心需要修改的是next()或next_open()等函数的内容,即策略每次需要在下一个交易日做什么。
该策略比较简单,我们只需要每天检查持仓的ETF与需要持仓的ETF是否一致即可。如果不一致,那就卖掉所持ETF,买入需要持仓的ETF;如果一致,就不需要做什么。
4. 回测结果分析
回测完之后,就可以得到策略的收益率序列。基于该收益率序列,可以计算常用的统计指标如年化收益率、最大回撤、夏普比率、波动率等,分析策略表现。也可以与特定指数(如沪深300)进行对比,看看策略相对大盘的表现。
与聚宽回测结果对比:
同样的策略,我们将Backtrader回测的结果与聚宽回测的结果进行对比,两个回测结果存在些许差异,但大致比较接近,至少在我能接受的范围内。
总结:
本文主要提供一个实际的案例:如何在本地实时获取行情数据、如何在本地编写策略、如何在本地对策略进行回测、如何在本地对回测结果进行分析。所有过程不需要依托第三方平台,自由度更高。当然,本地开发也会存在错误可能更多的风险,这就对个人能力的要求更高了。
主要参考内容:
[1] 【回顾3】ETF策略之核心资产轮动:https://www.joinquant.com/view/community/detail/1b1aea4e33780bb81e2883e1ca0e0e69
[2] Backtrader教程:Backtrader来啦:交易篇(上)
没有评论:
发表评论