本系列帖子“量化小講堂”,通過實(shí)際案例教初學(xué)者使用python、pandas進(jìn)行金融數(shù)據(jù)處理,希望能對大家有幫助。
【必讀文章】:《10年400倍策略分享-附視頻逐行講解代碼》
【所有系列文章匯總】:http://xalimeijing.com/thread-3950124-1-1.html
【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識,可以參與我與論壇合作開設(shè)的課程:《python量化投資入門》,我會親自授課,隨問隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會在圈中分享量化的所見所思,圈子介紹點(diǎn)擊此處。
微信:xbx_laoshi,量化交流Q群(快滿):438143420,有問題歡迎交流。
文中用到的A股數(shù)據(jù)可在www.yucezhe.com下載,這里可以下載到所有股票、從上市日起的交易數(shù)據(jù)、財(cái)務(wù)數(shù)據(jù)、分鐘數(shù)據(jù)、分筆數(shù)據(jù)、逐筆數(shù)據(jù)等。
【量化小講堂 - Python、Pandas系列】量化投資中如何處理復(fù)權(quán)、除權(quán)問題
最近驚訝的發(fā)現(xiàn)很多同學(xué)對如何在量化投資的實(shí)戰(zhàn)中如何處理復(fù)權(quán)、除權(quán)等問題,其實(shí)不是非常了解,耽誤很多事情,所以本文專門來詳細(xì)的講一下這個問題。
【復(fù)權(quán)計(jì)算方法】
股票會時不時的發(fā)生現(xiàn)金分紅、送股等一系列股本變動,這會造成股價(jià)的非正常變化,導(dǎo)致我們不能直接通過股價(jià)來計(jì)算股票的漲跌幅。例如一個股票是10元,當(dāng)他10送10的時候,它的價(jià)格會變成5元,但是我們并不能認(rèn)為這個股票下跌了5 / 10 - 1 = 50%。
下面舉一個具體的例子來說明如何計(jì)算除權(quán)價(jià)格以及復(fù)權(quán)漲跌幅:
易事特(SZ300376)在2015年6月5日的收盤價(jià)是89.00元,當(dāng)天晚上每股分紅0.184元,并且每10股轉(zhuǎn)增4股,那么這個股票除權(quán)之后的收盤價(jià)應(yīng)該是(89.00 - 0.184) * 10 / (10 + 4) = 63.44元。下一個交易日6月8日的收盤價(jià)是57.10,真實(shí)漲跌幅應(yīng)該是57.10 / 63.44 - 1 = -9.993695%,而不是57.10 / 89.00 - 1 = -35.842697%。
其中真實(shí)漲跌幅57.10 / 63.44 - 1 = -9.993695%也被稱為是復(fù)權(quán)漲跌幅。
【復(fù)權(quán)漲跌幅最重要】
因?yàn)橐陨铣龣?quán)問題的存在,很多研究量化的同學(xué)在尋找股票數(shù)據(jù)的時候,很在意是否能得到復(fù)權(quán)之后的價(jià)格數(shù)據(jù)。我想說的是,股票的復(fù)權(quán)價(jià)格并不是最重要的,最重要的是要得到股票復(fù)權(quán)之后的漲跌幅。
若你有了股票每天的復(fù)權(quán)漲跌幅,那么知道了股票第一天的價(jià)格,通過簡單的連乘計(jì)算,自然就可以計(jì)算出之后每一天的復(fù)權(quán)價(jià),這個叫做后復(fù)權(quán)價(jià)。例如股票第一天的價(jià)格是10元,之后每天的復(fù)權(quán)漲跌幅是1%、-2%、3%...那么之后每天的復(fù)權(quán)價(jià)格分別是10 * (1+1%)、10 * (1+1%) * (1-2%)、10 * (1+1%) * (1-2%) * (1+3%)...
同樣的,知道了股票最后一天的價(jià)格,那么自然也就可以計(jì)算出之前每一天的價(jià)格,這個叫做前復(fù)權(quán)價(jià)。行情軟件中的前后復(fù)權(quán)價(jià)格,其實(shí)也是這么算出來的。
(【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識,可以參與我與論壇合作開設(shè)的課程:《python量化投資入門》,我會親自授課,隨問隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會在圈中分享量化的所見所思,圈子介紹點(diǎn)擊此處。)
若股票數(shù)據(jù)中只給出了復(fù)權(quán)價(jià)格,這對計(jì)算收益的準(zhǔn)確性是有很大影響的。例如給出的是前復(fù)權(quán)價(jià)格,那么很久之前的股票價(jià)格往往很小的數(shù)字,一般又都是精確到兩位小數(shù),所以會變成0.45,0.47這樣類似的數(shù)字。例如萬科A(SZ000002)在2006年2月8日的前復(fù)權(quán)收盤價(jià)是0.56,2月9日的前復(fù)權(quán)收盤價(jià)是0.48,那么2月9日的收益是0.48/0.56 - 1 = -14.29%,但是實(shí)際上8號、9號的真實(shí)收盤價(jià)是5.26、5.06,真實(shí)的漲幅是-3.80%,與-14.29%相差巨大。
【同花順、通達(dá)信等各家的復(fù)權(quán)方式不同】
查看來自不同數(shù)據(jù)源的數(shù)據(jù)的時候,會發(fā)現(xiàn)它們的復(fù)權(quán)價(jià)格或者復(fù)權(quán)漲跌幅會有微小的差異,這往往是由不同的復(fù)權(quán)方式導(dǎo)致的。
例如,復(fù)權(quán)時對于分紅產(chǎn)生的個人所得稅,各家的處理方式是不一樣的。同花順、通達(dá)信中的復(fù)權(quán)是不考慮所得稅的。上文提到的易事特(SZ300376)每股分紅0.184元10股轉(zhuǎn)4股,不考慮所得稅的除權(quán)公式是(89.00 - 0.184) * 10 / (10 + 4) 。
但是實(shí)際上,這0.184元不會全部到投資者的口袋里,而是會扣掉10%的所得稅(不同投資者扣得稅還不一樣),所以投資者得到的分紅只有0.184 * (1 - 10%),那么更加準(zhǔn)確的分紅方式應(yīng)該是:(89.00 - 0.184 * (1 - 10%)) * 10 / (10 + 4) 。一些專業(yè)的數(shù)據(jù)庫,例如wind、國泰安,就是這么復(fù)權(quán)的。
【其他】
- 對于分鐘或者更小級別的數(shù)據(jù),我個人認(rèn)為是沒有必要進(jìn)行復(fù)權(quán)的,直接用原始數(shù)據(jù)就可以了。復(fù)權(quán)之后反而會對數(shù)據(jù)準(zhǔn)確性造成非常大的影響。
- 不要過分追求準(zhǔn)確性。復(fù)權(quán)其實(shí)挺復(fù)雜的,之前的例子只提到了分紅、轉(zhuǎn)增,其實(shí)還有增發(fā)、配股、可轉(zhuǎn)債等非常復(fù)雜的情況。所以哪怕非常貴的、非常專業(yè)的數(shù)據(jù)庫,我都曾發(fā)現(xiàn)過它們復(fù)權(quán)計(jì)算中的錯誤。一開始這讓我挺頭疼的,但后來也釋然了,不再去追究這些細(xì)小的誤差。
之后會講的內(nèi)容
有一段時間沒有撰寫《量化小講堂》的系列文章了,接下來還是會抽時間繼續(xù)寫下去。現(xiàn)在想到的之后幾期會講的內(nèi)容:
因?yàn)橛X得很多人關(guān)于Pandas的基礎(chǔ)知識還不是很牢固,會先講一期“【量化小講堂 - Python、Pandas系列】Pandas常用函數(shù)、方法詳解”。
然后就會開始比較實(shí)戰(zhàn)性的東西,會以實(shí)際在中國市場有效的策略為案例。
關(guān)于《量化小講堂》之后想看的內(nèi)容,或者相關(guān)問題,可以加我微信xbx_laoshi、Q群(快滿):438143420溝通。