在行情軟件中常常會看到除權、復權選項,咱們選擇不一樣的選項,軟件上股票的價格回相應地轉換。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量化交易】!!