![](https://i-blog.csdnimg.cn/blog_migrate/4c6a6a05d45fcf9d673231323fa1c83a.jpeg)
提到复权,炒股的小伙伴一定很熟悉。由于股票经常发生派息、配股、分拆或合并等事件,使得股价出现缺口,复权就是用来填补缺口的,分为前复权和后复权两种方法。
前复权保持当前价格不变,对历史价格进行增减,使得股价连续。而后复权正好相反,保持历史价格不变,调整当前价格。
前复权是行情软件默认模式,因为它很适合用来看盘,也是被使用频率最高的复权方式。
复权的概念很好理解,如果还是有不懂的小伙伴,赶紧打开你的行情软件,两种模式切换比较一下。另外,两种复权的计算方法会在接下来以代码的形式介绍,这里就不提了。
1. 前复权与后复权的区别
像之前说的,对大部分股民来讲,前复权就够用了,但对量化的小伙伴来说搞清楚到底用哪个是非常重要的。
虽然这个问题很简单,但是对刚接触量化的小伙伴来说,仍然是个比较棘手的问题,而且网上很多关于复权的文章也没有讲清楚到底什么时候用哪种方法。
先说结论,前复权适合看盘和交易,后复权适合用来对历史回测和计算收益率。接下来说说原因。
前复权由于以下2个缺点,使得其不适合用来回测:
(1)历史数值是时变的:每次发生派息等除权事件时,历史数值都会根据当前的股价而调整。换句话说,每次发生除权事件后,历史数值都是不一样的;**
(2)股价可能为负:对于持续分红的公司,其前复权价格可能为负。
![](https://i-blog.csdnimg.cn/blog_migrate/a8d7cae8f8f182f3ee6899380088c016.png)
后复权的本质是描述某个资产净值的增长情况,反映了真实的收益率,更适合用来回测。但后复权与真实价格相差较大,不能用来实盘交易。
![](https://i-blog.csdnimg.cn/blog_migrate/2ad91e54465614048676a2eef9e76bb6.png)
2. 计算复权需要注意的问题
本节来说说计算复权时需要注意的问题。
我看到很多小伙伴都喜欢直接使用第三方提供的复权数据。这里我想强调一个我使用数据的理念(不单单是复权数据):
首先,我只使用第三方提供的像开高低收、成交量等一手数据
其次,对于需要二次加工的数据,如市盈率、ROE等指标,我会自己算一遍
因为回测对数据的要求是非常严格的,而第三方(即使是大机构)的数据质量参差不齐,可能会因为计算公式的细微差别造成较大的误差,可能引入未来函数,更可能产生某些问题直达实盘才会发现。
我强烈建议复权数据要自己算。自己计算各种指标的最大的一个好处就是将一切问题可控。因为我们能够掌握计算的细节,即使出现重大问题,也可将其控制在已知的范围内。
接下来说说计算复权价格需要的数据。
除了常规的开高低收数据外,我们还需要前收盘价这个数据。前收盘价是前一交易日的收盘价格,是交易所帮我们算好的除权后的价格,用当日收盘价除前收盘价就可以得到真实收益率。
关于前收盘价的算法,可以看下图美的集团的公告:
![](https://i-blog.csdnimg.cn/blog_migrate/a2aa6068f65fe1f6f5bacd1aacfc2af2.png)
3. 代码实现
最后,我们来看一下后复权的计算代码(前复权请各位小伙伴自行完成)。
# ====后复权
df['复权因子'] = (df['收盘价'] / df['前收盘价']).cumprod()
df['收盘价_复权'] = df['复权因子'] * (df.iloc[0]['收盘价'] / df.iloc[0]['复权因子'])
df['开盘价_复权'] = df['开盘价'] / df['收盘价'] * df['收盘价_复权']
df['最高价_复权'] = df['最高价'] / df['收盘价'] * df['收盘价_复权']
df['最低价_复权'] = df['最低价'] / df['收盘价'] * df['收盘价_复权']
本期内容就到这里啦。如有任何问题,欢迎私信,我们一起探讨。
END