当前位置: 首页 > 后端技术 > Python

构建量化系统-股票数据的除权和再权

时间:2023-03-25 20:16:14 Python

在行情软件中,我们经常看到除权和再权的选项。我们选择不同的选项,软件上的股票价格就会相应地进行转换。在量化交易中,我们制定了一个交易策略,需要在历史行情数据上对策略进行回测,那么我们应该选择除权还是复权,哪种形式的行情数据呢?除权通常是除权、除息的简称。这两种情况在走势图上都会出现不同程度的下跌缺口,我们称之为右缺口。除权除息会让投资者误以为是向下跳空,如下图:以除权股价计算股价涨跌幅显然是错误的,同花顺软件显示——52.49%。同样方法计算出来的各项指标也没有参考价值。为了使走势图真实反映各股票价格的走势,除权除息后的价格在重新加权后不具有可比性。举刚才的例子。2016年6月27日,新希望收盘价为17.64元。次日,即6月28日,每10股转增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%。我们得到股票第一天的价格后,通过实际涨跌幅的乘法计算,可以计算出其后每一天的复盘价,称为复盘后价格。同样,如果知道最后一天股票的价格,那么逆向处理也可以算出前一天的价格,称为前恢复价。接下来我们通过接口获取“新希望”除权、复权前、复权后的行情数据,如下:#“除权”"""HighLowOpenCloseVolumeDate2010-01-0414.3813.9413.9414.17216924.782010-01-0514.2813.8514.2214.18107631.412010-01-0614.3113.8714.1513.8889684.002010-01-0713.9713.3813.8013.4885856.0-01-0813.6413.43588643586435886435886435886435886435886435886435886435886435886435886435886435886435886435864358864358643588643586435886435886435864358864358864358864358643588643586358625835..2019-12-2518.7918.4418.5918.60207776.342019-12-2618.7618.4618.6918.60189935.422019-12-2719.4318.5818.7419.28504214.702019-12-3019.5018.9219.2419.38379296.952019-12-3120.3120.3119.5519.5519.5519.95562873.40[2244行X5列x5列]74.3874.11107631-01-01-0674.74.74.74.74.74.74.74.74.74.73.9572.5489684.002010-01-0773.0169.9372.1270.4585856.012010-01-01-0871.2869.7770.1971.1971.1971.1858864.09...12-26260.76256.59259.79258.54189935.422019-12-27270.07258.26260.48267.99504214.7024219.702019-12-30-12-30271.05VolumeDate2010-01-045.415.245.245.33216924.782010-01-055.375.215.355.33107631.412010-01-065.385.215.325.2289684.002010-01-075.255.035.195.0785856.012010-01-085.135.025.055.1258864.09..................2019-12-2518.7918.4418.5918.60207776.342019-12-2618.7618.4618.6918.60189935.422019-12-2719.4318.5818.7419.28504214.702019-12-12-3019.5019.5018.09219.2419.38379296.952019-12-12-3120.5519.5519.5519.9519.9519.95562873.40[2431ROWSx5ComporthandRemovalandPrudandpruldandprudandprudandpruldandpruldandprudandprudandprudandprestry''重新加权有很大的不同。接下来,我们可以将收盘价进行可视化对比:从图中可以看出两者相差很大,使用除权数据回测策略的效果会与真实情况相差很多。因此,当我们获取的数据是除权数据时,我们需要将其转换为恢复前/恢复后的数据。这里的关键是获取刚刚提到的真实的涨跌幅数据,这样我们就可以在这个数据的基础上计算出恢复前/恢复后的因子。我们以之前的恢复为例,如下:"""trade_date2019-12-310.972019-12-300.972019-12-270.932019-12-260.932019-12-250.93...2010-01-080.252010-01-070.262010-02-72010.050.272010-01-040.26Name:fd_factor,Length:2244,dtype:float64"""如果不包含增减数据,增减按照除权股价不正确。下面的pct_chg1是除权后的股价,可以看出pct_chg和原来的涨跌有很大的区别,pct_chg2就是差值。"""pct_chgpct_chg1pct_chg2Date2010-01-042.83NaNNaN2010-01-050.077.06e-040.072010-01-06-2.12-2.12e-022.102010-01-07-2.88-2.80.0218e-02-081.041.04e-021.03.........2019-12-250.383.78e-030.372019-12-260.000.00e+000.002019-12-273.663.66e-023.622019-12-300.525.19e-030.512019-12-312.942.94e-022.91[2244rowsx3columns]"""处理完成后,我们再次可视化“新希望”的收盘价数据,如下图。可以看出,除权股价恢复后,与之前的恢复曲线重合。对于后期恢复,选择的初始价格不同,对应计算出的恢复价格也会不同。例如,我们从2010年1月1日恢复后得到的行情数据和收盘价走势图如下:#"post-recovery""""HighLowOpenCloseVolumeDate2010-01-0414.3813.9413.9414.17216924.782010-01-0514.2813.8514.2214.18107631.412010-01-01-0614.3113.8713.8714.1513.8889684.00201010-01-01-01-07.....2019-12-2549.9849.0549.4549.48207776.342019-12-2649.9049.1049.7249.48189935.422019-12-2751.6849.4249.8551.29504214.702019-12-3051.8750.3351.1851.55379296.952019-12-3154.0352.0052.0053.07562873.40[2244行x5列]"""上面我们介绍了除权和再权的定义,以及它们之间的区别。最重要的是,当股票分拆、合并或派息时,股价会受到影响。后续我们会继续介绍回测中出现除权情况如何处理。关于以上内容的更多讨论,欢迎大家关注【元宵大师带你用Python量化交易】!!