怎么计算历史某段区间的收益率,用前复权还是后复权还是都不对?

发布于: 修改于:雪球转发:65回复:78喜欢:332
最近做一些回测统计工作,遇到问题:怎么统计历史上某段区间的收益率,用前复权还是后复权曲线还是都不对?
(不想看这简单推导的话直接看最后结论就好了)

先看看后复权和前复权曲线是怎么画出来的:

最上方是原始的除权的曲线,中间经历了两次分红和两次十送十(1股变2股),后复权曲线和前复权曲线就是将除权曲线的各段(收盘价开盘价最高价最低价所有点)进行平移和比例放大或缩小。


后复权曲线(以T0为起点往后复权)
A1=95+5=100;
B1=120+5=125;(A1B1段向上平移5元)
C1=80*2+5=165;(B1C1段放大一倍再向上平移5元)
D1=(90+5)*2+5=195。(C1D1段向上平移5元,放大一倍,再向上平移5元)

前复权曲线(以T5为起点往前复权)
D2=90/2=45;
C2=75/2=37.5;(C2D2段缩小一倍)
B2=(60-5)/2=27.5;(B2C2段向下平移5元,再缩小一倍)
A2=(95/2-5)/2=21.25。(A2B2段缩小一倍,向下平移5元,再缩小一倍)

接下来看看区间收益率该如何正确地计算:
(1)假设T0买入1股,T5卖出,收益率怎么计算(分红不再买入)?
根据除权数据及历次分红送配,收益率为:
((45*4+5*2+5)-100)/100=95/100=0.95
(注:两次十送十所以最后有4股,第二次分红有两股所以要乘以2)

跟用后复权曲线计算出来的一致:
(195-100)/100=95/100=0.95

如果用前复权计算:
(45-21.25)/21.25=1.12
所以这种情况用后复权计算才是正确的。

为什么会产生这种差别呢?原因就是分红,如果没有分红,只有送配股,那曲线只是比例放大缩小,起点终点同比例放大缩小,收益率用前复权后复权计算都一样。由于出现了分红,分红使得分子分母出现了加减法,所以产生了偏差,对于后复权,分红相当于加在了分子上,所以计算出来的是分红不买入的收益,而前复权,把分红从分母里减去,这个就没有对应着实际意义了。对于像万科之类的分红较多的个股,前复权后复权差别是很大的。

(2)假设T1分红后买入1股(95元),T3分红前卖出(80元)这段区间的收益率呢?
正确方法当然就是:
(80*2-95)/95
这时候,用后复权(165-100)/100计算则是错误的,为什么这次后复权又是错误的呢?原因就在复权的起点,应该以95元那里开始向后复权才是正确的。

总之,看最近行情的话,用前复权就好了,比较直观;计算历史区间收益率的话,准确方法是以起点开始向后复权(通达信同花顺都可以的);对于分红较少股息率超低的很多股票,用默认的后复权(上市之日起向后复权)算算误差也不会太大。

另外,这里没有考虑分红再买入的情况,对于那些股息率高而且PB很低的个股(港股),分红再买入对收益的影响非常大,分红再买入的收益则只能按照除权数据具体计算了。

补充重要发现:
经与@爱熊者说_康福强 兄讨论发现,万科A在wind软件里前复权不会出现负数,而在同花顺通达信等软件里则会出现负数,这是为什么呢?

原来wind软件跟同花顺、东方财富、通达信等对复权的处理是不同的,同花顺等的处理如我文中所述,而对于wind,不同之处在于后复权的例子里B1=100*120/95,后面的C1、D1也相应变化,这样的意义实际就是相当于分红立刻以除权价买入了 ,所以这样的后复权曲线算出来的收益率可以看做分红再买入的收益@TheOneToBeStar。前复权的处理也类似,C2=45*75/90,B2=C2*60/80,由于没有了减法,所以自然不会有负数出现了。


wind这样的复权曲线处理有个好处,就是无论前复权曲线还是后复权曲线,任意一段区间的涨跌幅或收益是一样的,一点点的误差是由于四舍五入造成的。这样,单独看每一段曲线,除权、后复权、前复权的区间涨幅都是一样的,所以要计算历史某段区间的收益,直接看wind的后复权曲线或前复权曲线就行了,同花顺那些就要按我上文说的了。


其实wind这样的复权处理才是更好更直观的方法,不知道为啥同花顺、通达信、东方财富等都用我文中的那种方法,麻烦的要死又没什么卵用,只有wind这么明智,估计是算法实现上比较简单。

涨点粉呗,以后有问题大家好交流啊哈哈


@renjunjie  @黄抒扬 @云蒙 @梁宏 @阿狸 @骑行夜幕的统计客 @东博老股民 @东边的小石头  @今日话题
$上证指数(SH000001)$          $创业板指(SZ399006)$          $中信证券(SH600030)$          $招商银行(SH600036)$

精彩讨论

全部讨论

2018-01-28 17:52

假设某股配股前最高价15元,最低价5元,在5元时配股,10配10,配股价3元,则除权价:(5+3)/2=4。复权因子=5/4=1.25。
对之前最高15元对应的股价,复权因子算法:15/1.25=12元
按复权因子算法,除权前(15-5)/15=66.67%

除权后:(12-4)/12=66.67%,两者涨跌幅度相等。
以上涨跌幅相同,就是万得所谓完整保存了涨跌幅信息。
但是,假设你就是在最高点买入的人,你的实际亏损情况是:
除权前:(15-5)/15=66.67%。
实际亏损金额:15-5=10。
除权后:投入总金额:15+3=18元
除权时市值:2X4=8
亏损额绝对值:18-8=10
亏损幅度:10/18=55.56%。而你作为最高买入者,你此时的成本是(3+15)/2=9。

因此可以看到大智慧等软件计算的最高复权价是9,二万得是12,显然万得是错的。中间相差达到30%以上!高低点是错的,那么万得所谓涨跌幅保持正确是不可能的

虽然看得不仔细,但感觉事实确实如此,当时间较长时,前复权会给出很离谱的回报数据。由于我最少是5年一个统计(大多是8-10年),因此我从来不用前复权。

2018-01-28 18:01

造成这个错误的原因,是配股计算时,因为有绝对数量的资金投入(此例是3元,这不是一个比例),造成复权不是一个简单比例。其数学原理,是有加减时,绝对不能简单变乘除,这应该是初中数学里面就讲到的基本原理吧?加减是对应的绝对的数,而乘除就是一个比例,当被加减数变化时,加减和单个系数乘除是绝对不可能等价的。
我发帖不熟练,如有看到的,请从下往上看,一共连续三贴。

2015-12-20 03:43

经与@爱熊者说_康福强 兄讨论发现,万科A在wind软件里前复权不会出现负数,而在同花顺通达信等软件里则会出现负数,这是为什么呢?
原来wind软件跟同花顺、东方财富、通达信等对复权的处理是不同的,同花顺等的处理如我文中所述,而对于wind,不同之处在于后复权的例子里B1=100*120/95,后面的C1、D1也相应变化,这样的意义实际就是相当于分红立刻以除权价买入了 ,所以这样的后复权曲线算出来的收益率可以看做分红再买入的收益@TheOneToBeStar。前复权的处理也类似,C2=45*75/90,B2=C2*60/80,由于没有了减法,所以自然不会有负数出现了。
wind这样的复权曲线处理有个好处,单独看每一段曲线,除权、后复权、前复权的区间涨幅都是一样的,连起来的涨幅自然也一样,一点点的误差是由于四舍五入造成的。所以,要计算历史某段区间的收益,直接看wind的后复权曲线或前复权曲线就行了,同花顺那些就要按我上文说的了。
其实wind这样的复权处理才是更好更直观的方法,不知道为啥同花顺、通达信、东方财富等都用我文中的那种方法,麻烦的要死又没什么卵用,只有wind这么明智。

你的复权计算方式错误了。
(1)后复权中B1的值应该是100*120/95=126.32 ,而不是简单的125,不是简单平移!后面的C1的值应该是126.32*80/60=168.43 ,而不是简单的放大倍数与平移。
(2)前复权中C2的值应该是45*75/90=37.5 ,虽然你的值是正确的,但是计算方式错误了,不是简单缩倍;同理,B2的值应该是37.5*60/80=28.125 ,而不是27.5 ,不是简单的平移。

2015-12-19 22:26

前后复权的算法相当于红利全部立即再买成股票。如果考虑扣税就更复杂了。

2023-11-16 13:56

软件里怎么设置后复权从某一点开始,默认只有从上市首日就开始

2023-06-26 20:50

牛 多年未明白

2020-12-12 10:40

复权的计算公式:
  前复权:复权后价格=[(复权前价格-现金红利)+配(新)股价格×流通股份变动比例]÷(1+流通股份变动比例)
  后复权:复权后价格=复权前价格×(1+流通股份变动比例)-配(新)股价格×流通股份变动比例+现金红利