首先要说明的是,折价基金这个思路来源于股票群的黎大佬,我在这个基础上对规则进行了一些修改,然后参照邢大的选股方式和框架把折价基金的思路用程序化的方式进行了复现。
1、什么是折价基金
基金的折价率是特指封闭式基金市价低于净资产价值(Net Assets Value;NAV)的幅度。例如某封闭式基金市价17元,净值NAV是20元,我们就说它的折价率是(17-20)/20=-15%。
其实折价并不仅存在于封闭式基金中,场内基金(包括ETF)都会存在折价,只不过非封闭基金很难出现较大幅度的折价罢了。
2、基本思路
这个策略的理论基础就是存在明显折价的基金,其价格会向净值回归。
和选股策略一样,每周选出折价最严重的基金(不同网站对折价率的正负号定义有出入,大家理解意思就好),下周一开盘买入选中的基金,周五收盘前卖出。
这里所涉及的基金买卖只进行场内交易,不考虑转场和场外申购赎回。所以像那种买入折价基金然后持有到封闭期结束的做法这里是回测不到的。
3、数据展示
使用的场内基金数据来源于tushare,分别获取场内基金的净值数据和行情数据,如下图所示:
有了这些数据就可以计算基金的折价率了。
4、程序框架
选基程序基本可以复用邢大的选股程序,当然由于数据字段有变动,所以程序对应的部分也要修改。至于其他部分,印象中没有需要大改的地方。
因子计算部分代码如下:
# == 折价策略数据def process_discount(df, index_data):
period_col_dict = {}
# 计算折价率
df['discount'] = (df['收盘价'] - df['单位净值']) / df['单位净值']
period_col_dict['discount'] = 'last'
return df, period_col_dict
5、回测结果
以每周选3只基金为例,回测周期是2010年底至2020年6越25日。
选折价率排名前3的基金:
10年3倍多一点,这个收益率其实很一般,所以我就想如果某些时期不存在高折价率的基金,那么把这个周期过滤掉效果会怎样呢,所以就有了下面的尝试。
过滤掉折价率不足10%的基金,选折价率排名前3的基金:
结果好像有那么一丁点提升,但是不明显,继续过滤。
过滤掉折价率不足20%的基金,选折价率排名前3的基金:
效果反而大幅下降了,说明对折价率进行过滤这个思路效果不是很明显。
后来我有尝试了改变选基数量,结果发现每周期选10只基金效果要好于3只,那么有没有可能折价率排名靠前的3只基金存在什么问题,导致价格回归速度比较慢呢。基于这个想法我调整了选基名次,即每周期选排名8-10的3只基金。回测结果如下:
选折价率排名前8-10的基金:
从资金曲线来看,收益效果有了大幅提升,年化和回撤都在20%左右,算是一个不错的策略。唯一不明白的是,2015年大牛市的时候这个策略反而是赔钱的。
6、小结
恩。。。。。选基金的资金曲线和记录我就放附件里了。