6

在行情软件中经常会看到除权、复权选项,我们选择不同的选项,软件上股票的价格回相应地转换。

在量化交易中,我们开发了一个交易策略,需要对策略在历史行情数据上进行回测,那么我们该选择除权,还是复权,哪一种形式的行情数据呢?

除权通常是除权除息的简称,这两种情况会在走势图上出现不同程度的下跌缺口,我们称为除权缺口。

除权除息会使投资者误认为是一个向下跳空缺口,如下所示:

图片描述

如果根据除权的股价去计算股票涨跌幅显然是不对的,同花顺软件里面显示的是-52.49%。同样计算得到的各类指标也是毫无参考价值的。

为了使得走势图能真实反映各股价趋势,除权除息后的价格是要经过复权处理后才有可比性。

拿刚才的例子来说。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%。

当我们得到股票第一天的价格之后,通过真实涨跌幅的连乘计算,就可以计算出之后每一天的复权价,这个叫做后复权价。同样的,知道了股票最后一天的价格,那么反向处理也就可以计算出之前每一天的价格,这个叫做前复权价。

接下来我们分别用接口获取“新希望”除权、前复权、后复权的行情数据,如下所示:

# "除权"
"""
             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月的股价,除权和前复权、后复权相差较大。接下来可视化收盘价进行对比:

图片描述

图片描述

图中可知他们相差甚大,用除权数据执行策略回测效果会和真实情况相差很多。
于是,当我们获取的数据为除权数据时,我们需要转换为前复权/后复权数据。

这里的关键是获取到刚才提到的真实涨跌幅数据,这样我们可以在该数据的基础上计算出前/后复权因子。我们以前复权为例,如下所示:

"""
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量化交易】!!


元宵大师
140 声望130 粉丝

Python资深数据分析师、高级项目管理师,致力于推动人工智能、大数据分析在金融量化交易领域中的应用。