【量化小讲堂-Python&Pandas系列09】量化投资中关于复权的处理
来源:互联网 发布:求生之路2mac视角不动 编辑:程序博客网 时间:2024/05/17 06:00
引言:
本系列“量化小讲堂”,通过实际案例教初学者使用python、pandas进行金融数据处理,希望能对大家有帮助。
【必读文章】:《10年400倍策略分享-附视频逐行讲解代码》
【所有系列文章汇总】:【量化小讲堂 – Python、Pandas系列】目录汇总
量化投资中如何处理复权、除权问题
—策略介绍—
最近惊讶的发现很多同学对如何在量化投资的实战中如何处理复权、除权等问题,其实不是非常了解,耽误很多事情,所以本文专门来详细的讲一下这个问题。
【复权计算方法】
股票会时不时的发生现金分红、送股等一系列股本变动,这会造成股价的非正常变化,导致我们不能直接通过股价来计算股票的涨跌幅。例如一个股票是10元,当他10送10的时候,它的价格会变成5元,但是我们并不能认为这个股票下跌了5 / 10 – 1 = 50%。
下面举一个具体的例子来说明如何计算除权价格以及复权涨跌幅:
易事特(SZ300376)在2015年6月5日的收盘价是89.00元,当天晚上每股分红0.184元,并且每10股转增4股,那么这个股票除权之后的收盘价应该是(89.00 – 0.184) * 10 / (10 + 4) = 63.44元。下一个交易日6月8日的收盘价是57.10,真实涨跌幅应该是57.10 / 63.44 – 1 = -9.993695%,而不是57.10 / 89.00 – 1 = -35.842697%。
其中真实涨跌幅57.10 / 63.44 – 1 = -9.993695%也被称为是复权涨跌幅。
【复权涨跌幅最重要】
因为以上除权问题的存在,很多研究量化的同学在寻找股票数据的时候,很在意是否能得到复权之后的价格数据。我想说的是,股票的复权价格并不是最重要的,最重要的是要得到股票复权之后的涨跌幅。
若你有了股票每天的复权涨跌幅,那么知道了股票第一天的价格,通过简单的连乘计算,自然就可以计算出之后每一天的复权价,这个叫做后复权价。例如股票第一天的价格是10元,之后每天的复权涨跌幅是1%、-2%、3%…那么之后每天的复权价格分别是10(1+1%)、10 (1+1%) (1-2%)、10 (1+1%) (1-2%) (1+3%)…
同样的,知道了股票最后一天的价格,那么自然也就可以计算出之前每一天的价格,这个叫做前复权价。行情软件中的前后复权价格,其实也是这么算出来的。
若股票数据中只给出了复权价格,这对计算收益的准确性是有很大影响的。例如给出的是前复权价格,那么很久之前的股票价格往往很小的数字,一般又都是精确到两位小数,所以会变成0.45,0.47这样类似的数字。例如万科A(SZ000002)在2006年2月8日的前复权收盘价是0.56,2月9日的前复权收盘价是0.48,那么2月9日的收益是0.48/0.56 – 1 = -14.29%,但是实际上8号、9号的真实收盘价是5.26、5.06,真实的涨幅是-3.80%,与-14.29%相差巨大。
【同花顺、通达信等各家的复权方式不同】
查看来自不同数据源的数据的时候,会发现它们的复权价格或者复权涨跌幅会有微小的差异,这往往是由不同的复权方式导致的。
例如,复权时对于分红产生的个人所得税,各家的处理方式是不一样的。同花顺、通达信中的复权是不考虑所得税的。上文提到的易事特(SZ300376)每股分红0.184元10股转4股,不考虑所得税的除权公式是(89.00 – 0.184)10 / (10 + 4) 。
但是实际上,这0.184元不会全部到投资者的口袋里,而是会扣掉10%的所得税(不同投资者扣得税还不一样),所以投资者得到的分红只有0.184 (1 – 10%),那么更加准确的分红方式应该是:(89.00 – 0.184(1 – 10%)) 10 / (10 + 4) 。一些专业的数据库,例如wind、国泰安,就是这么复权的。
【其他】
- 对于分钟或者更小级别的数据,我个人认为是没有必要进行复权的,直接用原始数据就可以了。复权之后反而会对数据准确性造成非常大的影响。
- 不要过分追求准确性。复权其实挺复杂的,之前的例子只提到了分红、转增,其实还有增发、配股、可转债等非常复杂的情况。所以哪怕非常贵的、非常专业的数据库,我都曾发现过它们复权计算中的错误。一开始这让我挺头疼的,但后来也释然了,不再去追究这些细小的误差。
- 【量化小讲堂-Python&Pandas系列09】量化投资中关于复权的处理
- 【量化小讲堂-Python&Pandas系列21】「视频讲解」浅谈机器学习与量化投资
- 【量化小讲堂-Python&Pandas系列22】最优雅的Python编程方式:Jupyter Notebook视频教程
- 【量化小讲堂-Python&Pandas系列07】数据告诉你:惊人的海龟交易法则
- 【量化小讲堂-Python&Pandas系列10】如何判断一个策略的好坏?(附代码)
- 【量化小讲堂-Python&Pandas系列12】诺奖得主的仓位分配算法,有效吗?
- 【量化小讲堂-Python&Pandas系列13】数据告诉你:惊人的指数定投策略
- 【量化小讲堂-Python&Pandas系列14】逆天的反转策略在A 股实证
- 【量化小讲堂-Python&Pandas系列16】布林带策略在A股的实证
- 【量化小讲堂-Python&Pandas系列02】Windows下如何安装Python、Pandas
- 【量化小讲堂-Python&Pandas系列20】如何安装pandas、anaconda(最新教程、保证可用)
- 【量化小讲堂-Python&Pandas系列01】如何快速上手使用Python进行金融数据分析
- 【量化小讲堂-Python&Pandas系列03】使用python计算移动平均线
- 【量化小讲堂-Python&Pandas系列17】简易波动指标(EMV)策略在A股的实证
- 【量化小讲堂-Python&Pandas系列18】平均趋向指标(ADX)策略在A股的实证
- 【量化小讲堂-Python&Pandas系列04】计算创业板平均市盈率
- 【量化小讲堂-Python&Pandas系列06】历史数据告诉你:KDJ指标选股有效吗?
- 【量化小讲堂-Python&Pandas系列08】通过逐笔数据计算主力资金流数据
- 应用文:小李的信
- Construct2制作小游戏2
- AES加密算法之列混合变换
- 对数组名的理解
- Notes_Man2Programmer@Woman2Homemaker
- 【量化小讲堂-Python&Pandas系列09】量化投资中关于复权的处理
- Java笔记第十五课(TreeSet集合)
- 广义表的表头和表尾是什么?
- C/C++中的预编译指令各种用法
- JAVA基础知识总结
- Jmeter正则表达式
- Mybatis
- 2017.11.13工作日记
- python socket 小例子