在行情软件中常常会看到除权、复权选项,咱们选择不一样的选项,软件上股票的价格回相应地转换。spa
在量化交易中,咱们开发了一个交易策略,须要对策略在历史行情数据上进行回测,那么咱们该选择除权,仍是复权,哪种形式的行情数据呢?3d
除权一般是除权除息的简称,这两种状况会在走势图上出现不一样程度的下跌缺口,咱们称为除权缺口。code
除权除息会使投资者误认为是一个向下跳空缺口,以下所示:cdn
若是根据除权的股价去计算股票涨跌幅显然是不对的,同花顺软件里面显示的是-52.49%。一样计算获得的各种指标也是毫无参考价值的。blog
为了使得走势图能真实反映各股价趋势,除权除息后的价格是要通过复权处理后才有可比性。接口
拿刚才的例子来讲。2016年6月27日新但愿收盘价为17.64元,次日6月28日每十股转增10股,红利5.5元,那么股票除权以后的收盘价应该是(17.64 – 0.55) * 10 / (10 + 10) = 8.55元,6月28日的收盘价是8.38,真实涨跌幅应该是8.38 /8.55 - 1 = -1.99%,而不是软件上显示的-52.49%。图片
当咱们获得股票第一天的价格以后,经过真实涨跌幅的连乘计算,就能够计算出以后每一天的复权价,这个叫作后复权价。一样的,知道了股票最后一天的价格,那么反向处理也就能够计算出以前每一天的价格,这个叫作前复权价。开发
接下来咱们分别用接口获取“新但愿”除权、前复权、后复权的行情数据,以下所示:it
# "除权" """ High Low Open Close Volume Date 2010-01-04 14.38 13.94 13.94 14.17 216924.78 2010-01-05 14.28 13.85 14.22 14.18 107631.41 2010-01-06 14.31 13.87 14.15 13.88 89684.00 2010-01-07 13.97 13.38 13.80 13.48 85856.01 2010-01-08 13.64 13.35 13.43 13.62 58864.09 ... ... ... ... ... ... 2019-12-25 18.79 18.44 18.59 18.60 207776.34 2019-12-26 18.76 18.46 18.69 18.60 189935.42 2019-12-27 19.43 18.58 18.74 19.28 504214.70 2019-12-30 19.50 18.92 19.24 19.38 379296.95 2019-12-31 20.31 19.55 19.55 19.95 562873.40 [2244 rows x 5 columns] """ # "后复权" """ High Low Open Close Volume Date 2010-01-04 75.15 72.85 72.85 74.05 216924.78 2010-01-05 74.63 72.38 74.32 74.11 107631.41 2010-01-06 74.79 72.49 73.95 72.54 89684.00 2010-01-07 73.01 69.93 72.12 70.45 85856.01 2010-01-08 71.28 69.77 70.19 71.18 58864.09 ... ... ... ... ... ... 2019-12-25 261.18 256.31 258.40 258.54 207776.34 2019-12-26 260.76 256.59 259.79 258.54 189935.42 2019-12-27 270.07 258.26 260.48 267.99 504214.70 2019-12-30 271.05 262.99 267.43 269.38 379296.95 2019-12-31 282.31 271.74 271.74 277.30 562873.40 """ # "前复权" """ High Low Open Close Volume Date 2010-01-04 5.41 5.24 5.24 5.33 216924.78 2010-01-05 5.37 5.21 5.35 5.33 107631.41 2010-01-06 5.38 5.21 5.32 5.22 89684.00 2010-01-07 5.25 5.03 5.19 5.07 85856.01 2010-01-08 5.13 5.02 5.05 5.12 58864.09 ... ... ... ... ... ... 2019-12-25 18.79 18.44 18.59 18.60 207776.34 2019-12-26 18.76 18.46 18.69 18.60 189935.42 2019-12-27 19.43 18.58 18.74 19.28 504214.70 2019-12-30 19.50 18.92 19.24 19.38 379296.95 2019-12-31 20.31 19.55 19.55 19.95 562873.40 [2431 rows x 5 columns] """
初步看在2010年1月的股价,除权和前复权、后复权相差较大。接下来可视化收盘价进行对比:class
图中可知他们相差甚大,用除权数据执行策略回测效果会和真实状况相差不少。
因而,当咱们获取的数据为除权数据时,咱们须要转换为前复权/后复权数据。
这里的关键是获取到刚才提到的真实涨跌幅数据,这样咱们能够在该数据的基础上计算出前/后复权因子。咱们之前复权为例,以下所示:
""" trade_date 2019-12-31 0.97 2019-12-30 0.97 2019-12-27 0.93 2019-12-26 0.93 2019-12-25 0.93 ... 2010-01-08 0.25 2010-01-07 0.26 2010-01-06 0.27 2010-01-05 0.27 2010-01-04 0.26 Name: fd_factor, Length: 2244, dtype: float64 """
若是未包含涨跌幅数据时,根据除权股价所计算获得的涨跌幅是不正确的。如下pct_chg1为除权股价的涨跌幅,可见与原始的涨跌幅pct_chg差异很大,pct_chg2为差值。
""" pct_chg pct_chg1 pct_chg2 Date 2010-01-04 2.83 NaN NaN 2010-01-05 0.07 7.06e-04 0.07 2010-01-06 -2.12 -2.12e-02 2.10 2010-01-07 -2.88 -2.88e-02 2.85 2010-01-08 1.04 1.04e-02 1.03 ... ... ... ... 2019-12-25 0.38 3.78e-03 0.37 2019-12-26 0.00 0.00e+00 0.00 2019-12-27 3.66 3.66e-02 3.62 2019-12-30 0.52 5.19e-03 0.51 2019-12-31 2.94 2.94e-02 2.91 [2244 rows x 3 columns] """
处理完成后,咱们再次可视化“新但愿”的收盘价数据,以下所示。可见将除权股价复权后,与前复权曲线重合。
对于后复权来讲,选取初始价格不一样相应计算获得的复权价格也会不同。好比咱们从2010年1月1日那天开始后复权获得的行情数据和收盘价走势图以下所示:
# "后复权" """ High Low Open Close Volume Date 2010-01-04 14.38 13.94 13.94 14.17 216924.78 2010-01-05 14.28 13.85 14.22 14.18 107631.41 2010-01-06 14.31 13.87 14.15 13.88 89684.00 2010-01-07 13.97 13.38 13.80 13.48 85856.01 2010-01-08 13.64 13.35 13.43 13.62 58864.09 ... ... ... ... ... ... 2019-12-25 49.98 49.05 49.45 49.48 207776.34 2019-12-26 49.90 49.10 49.72 49.48 189935.42 2019-12-27 51.68 49.42 49.85 51.29 504214.70 2019-12-30 51.87 50.33 51.18 51.55 379296.95 2019-12-31 54.03 52.00 52.00 53.07 562873.40 [2244 rows x 5 columns] """
以上咱们介绍了除权和复权的定义,以及它们之间的区别,最重要的是在回测时须要考虑当股票发生拆分,合并或者分成时,股票价格由于除权而受到影响。后续咱们会继续推出回测中如何去处理除权的状况。
关于以上内容更多的探讨欢迎你们关注【元宵大师带你用Python量化交易】!!