复权的精确计算——持有封基说股市之四十一
大家知道复权是因为股票分红或者转股送股的原因,转股和送股的区别主要是前者是用的资本公积金,后者用的是未分配利润。对复权计算是一样的,另外送股和分红是要交税的,根据你持有的时间交税还不一样,这里我们假定都不交税了。在复权中大家知道有前复权和后复权,前复权就是保持最新的价格不变,往前推算复权价格;后复权就是保持最前面的一个日期对应的价格不变,往后推算复权价格。复权有个原则,就是不管怎么复权,应该是K线形状保持不变,或者说每天的涨幅保持不变,但实际上很多系统由于种种原因,不管前复权还是后复权,价格计算都是错的,几乎很少能见到复权真正正确的系统。因为复权的价格影响很多计算特别是量化策略的回算,所以这里详细来讨论一下。
我们举沪市代码第一股浦发银行为例子,从现有的数据来看,浦发在99年11月10日的收盘价是27.75元,16年7月8日收盘价是15.45元。其中一共有17次分红转送股,每10股合计分红44.42元,转送股22股。除息除权日当天复权后的涨幅=(当天不复权收盘价*(1+每股送股数量)+每股分红金额)/上一个交易日的不复权收盘价,计算出每天的涨幅后再按照当天的复权收盘价=上一个交易日的复权收盘价*(1+复权涨幅)计算出每天的复权收盘价。
先对比一下我们精确复权和系统后复权的差异,都是从99年11月10日的27.75开始往后复权,我们的精确复权结果后,最新的16年7月8日的后复权价格是143.01元,系统后复权价格是122.18,差异在哪里呢?经过仔细查找,发现了问题。比如说15年8月26日到27日,不复权价格分别是13.02,13.98,涨幅是7.37%,但通达信后复权则变成95.25、101.00元,涨幅变成6.04%,少了1.33%。类型的情况还非常多,这里不一一列举了。
我们再来看前复权,经过我们精确复权,从99年11月10日 到16年7月8日实际涨幅是415.34%,最新价是15.45元,那么前复权后99年11月10日的前复权价格=15.45/(1+415.34%)=3元,这才是真正的前复权价格,保持每天的增幅不变,到16年7月8日前复权后变成15.45元,每天每年的收益率完全和精确复权一样,但很多系统竟然前复权成负数了,比如通达信的前复权价格,在01年到06年竟然前复权成负数甚至变成0了,这显然是错误的。
我们再来用现金流量法核对一下,我们上面用的精确复权方法,其实和净值法是类似的,17年浦发总涨幅是415.34%,那么年化收益率=(1+415.34%)^(1/((date(2016,7,8)-date(1999-11,10)/365.25))-1=10.34%,而按照通达信提供的前复权、后复权数据计算出来的年化收益率分别是16.94%和9.31%。网上有人说前复权好,因为不影响当今的价格;有人说后复权好,因为前复权用了未来函数。在我看来其实前复权后复权本质都是一样的,只要确保每天的涨幅不变,计算准确,都是可以的,可惜目前我看到的系统几乎没有一个复权准确的。包括基金的复权也是类似,半年的时候我去网上查了一下半年排名,结果排名在前面很多网站都是错误的,主要还是因为复权计算的问题。
因为复权不准会影响非常多,所以在此做一个详细的讨论,抛砖引玉,希望得到大家的重视。
备注:详细的计算模板在下面,大家可以按照自己的需求下载后改成其他股票或者基金来精确计算复权和对应的收益率,其中有类似净值法和现金流量法的Xirr公式。
本文发表后雪球上@晨小哥 指出其实在通达信里面有精确复权选项,在设置-系统设置-设置1-“各类复权均使用等比方式” 上打钩就可以精确复权了,复权的结果和我计算的结果非常接近了,感谢@晨小哥 !