引言:
本系列帖子“量化小講堂”,通過(guò)實(shí)際案例教初學(xué)者使用python、pandas進(jìn)行金融數(shù)據(jù)處理,希望能對(duì)大家有幫助。
【必讀文章】:《10年400倍策略分享-附視頻逐行講解代碼》
【所有系列文章匯總】:http://xalimeijing.com/thread-3950124-1-1.html
【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識(shí),可以參與我與論壇合作開(kāi)設(shè)的課程:《python量化投資入門(mén)》,我會(huì)親自授課,隨問(wèn)隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會(huì)在圈中分享量化的所見(jiàn)所思,圈子介紹點(diǎn)擊此處。
微信:xbx_laoshi,量化交流Q群(快滿):438143420,有問(wèn)題歡迎交流。
文中用到的A股數(shù)據(jù)可在www.yucezhe.com下載,這里可以下載到所有股票、從上市日起的交易數(shù)據(jù)、財(cái)務(wù)數(shù)據(jù)、分鐘數(shù)據(jù)、分筆數(shù)據(jù)、逐筆數(shù)據(jù)等。
【量化小講堂-Python、Pandas系列】逆天的反轉(zhuǎn)策略在A股實(shí)證
---策略簡(jiǎn)介---
動(dòng)量策略和反轉(zhuǎn)策略的原理主要是基于股票市場(chǎng)中可能存在的動(dòng)量效應(yīng)或反轉(zhuǎn)效應(yīng)。
所謂動(dòng)量效應(yīng),是指在一段時(shí)間內(nèi),股票會(huì)延續(xù)它過(guò)去的趨勢(shì)。過(guò)去漲,接下來(lái)繼續(xù)漲的概率比較大,也就是我們常說(shuō)的強(qiáng)者恒強(qiáng);過(guò)去跌,接下來(lái)就更可能繼續(xù)跌。基于股票動(dòng)量效應(yīng),我們可以通過(guò)買(mǎi)入過(guò)去收益率高的股票、賣(mài)出過(guò)去收益率低的股票來(lái)構(gòu)建投資組合,這種構(gòu)建投資組合的方法叫做動(dòng)量策略。而反轉(zhuǎn)效應(yīng)恰好相反,反轉(zhuǎn)效應(yīng)認(rèn)為在前一段時(shí)間表現(xiàn)較差的股票,在下一階段反而會(huì)出現(xiàn)逆轉(zhuǎn)。即過(guò)去一段時(shí)間收益率較低的股票在未來(lái)的收益率反而會(huì)高于過(guò)去收益率較高的股票。就像我們常說(shuō)的超跌反彈;诜崔D(zhuǎn)效應(yīng),投資者可以通過(guò)買(mǎi)入過(guò)去收益率低的股票、賣(mài)出過(guò)去收益率高的股票來(lái)獲利,這種利用股價(jià)反轉(zhuǎn)效應(yīng)構(gòu)造的投資策略稱為反轉(zhuǎn)策略。
接下來(lái)本文將詳細(xì)說(shuō)明兩種策略的具體做法。
既然是選股策略,我們首先需要確定目標(biāo)證券的范圍,即確定一個(gè)股票池,以后兩種策略就從這些股票池中選擇股票,比如可以選擇A股所有股票作為股票池。
接下來(lái),由于要判斷股票在某段時(shí)間內(nèi)表現(xiàn)的好壞,我們要選定一個(gè)時(shí)間長(zhǎng)度作為股票業(yè)績(jī)的評(píng)價(jià)期,通常稱為投資組合的排名期,比如可以選擇3個(gè)月,然后計(jì)算所有股票在這3個(gè)月的累計(jì)收益率作為股票業(yè)績(jī)的評(píng)價(jià)指標(biāo)。接著,根據(jù)排名期計(jì)算的累計(jì)收益率,對(duì)所有股票進(jìn)行升序或者降序排列,然后等分成若干組,其中累計(jì)收益率最大的一組稱為贏家組合,累計(jì)收益率最小的一組稱為輸家組合。排名期之后的一段時(shí)間(比如1個(gè)月)作為贏家組合和輸家組合的持有期限,如果持有的是贏家組合,則為動(dòng)量策略,反之則為反轉(zhuǎn)策略。在持有期結(jié)束后重新確定排名期,重復(fù)上述過(guò)程。
接下來(lái),本文將采用 A股的實(shí)際數(shù)據(jù),實(shí)證檢驗(yàn)一下動(dòng)量策略和反轉(zhuǎn)策略的效果到底怎樣。
(【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識(shí),可以參與我與論壇合作開(kāi)設(shè)的課程:《python量化投資入門(mén)》,我會(huì)親自授課,隨問(wèn)隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會(huì)在圈中分享量化的所見(jiàn)所思,圈子介紹點(diǎn)擊此處。)
---實(shí)戰(zhàn)---
假設(shè)我們選擇A股市場(chǎng)所有股票作為考慮的目標(biāo)股票,回測(cè)的開(kāi)始日期為2010年12月31日,結(jié)束日期為2015年12月31日(開(kāi)始結(jié)束時(shí)間是參數(shù),在程序中可以自行修改),排名期為3個(gè)月(也可以自行設(shè)置),即從2011年4月1號(hào)開(kāi)始,每月的第一個(gè)交易日根據(jù)前三個(gè)月的累計(jì)收益率的排名換倉(cāng)。
為了使結(jié)果更加可靠,本文剔除了在排名期內(nèi)累計(jì)停牌超過(guò)(5*排名期月份數(shù))天的股票。比如,如果排名期為3個(gè)月,就剔除在這3個(gè)月內(nèi)累計(jì)停牌超過(guò)15天的股票,接著計(jì)算剩下的股票在排名期的累計(jì)收益率,然后根據(jù)累計(jì)收益率按升序排序,取排序后前5%(即累計(jì)收益率最低的5%)的股票作為反轉(zhuǎn)策略的股票組合,后5%(即累計(jì)收益率最高的5%)的股票作為動(dòng)量策略的股票組合。在下個(gè)月第一個(gè)交易日,剔除掉反轉(zhuǎn)策略股票組合和動(dòng)量策略股票組合中當(dāng)天開(kāi)盤(pán)漲停的股票,按等權(quán)重持有剩余的股票,持有期為1個(gè)月,計(jì)算這1個(gè)月內(nèi)股票組合的收益率。下月初再根據(jù)前三個(gè)月的排名重復(fù)上述過(guò)程,最終可以得到動(dòng)量策略和反轉(zhuǎn)策略每天的日收益率曲線,進(jìn)而計(jì)算出相應(yīng)的資金曲線。
本文希望通過(guò)動(dòng)量策略和反轉(zhuǎn)策略在A股的實(shí)證,向大家介紹pandas的以下幾個(gè)功能的運(yùn)用:
1. 時(shí)間序列重采樣resample()函數(shù)的用法
2. 數(shù)據(jù)分組函數(shù)groupby()函數(shù)的用法
3. 分組計(jì)算函數(shù)agg()函數(shù)的用法
下面上具體的程序。
---程序---
要驗(yàn)證動(dòng)量策略和反轉(zhuǎn)策略的實(shí)際效果,需要A股所有股票的歷史交易數(shù)據(jù),在www.yucezhe.com可以下載到所有股票歷史至今的數(shù)據(jù)。如下圖所示,每一行是每一天的數(shù)據(jù):
數(shù)據(jù)有以下的字段:
【code】股票的代碼,上證股票以sh開(kāi)頭,深證股票以sz開(kāi)頭
【date】交易日期
【open】開(kāi)盤(pán)價(jià)
【high】最高價(jià)
【low】最低價(jià)
【close】收盤(pán)價(jià)
【change】漲跌幅,復(fù)權(quán)之后的真實(shí)漲跌幅,保證準(zhǔn)確
【volume】成交量
【money】成交額
【traded_market_value】流通市值
【market_value】總市值
【turnover】換手率,成交量/流通股本
【adjust_price】后復(fù)權(quán)價(jià),復(fù)權(quán)開(kāi)始時(shí)間為股票上市日,精確到小數(shù)點(diǎn)后10位
【report_date】最近一期財(cái)務(wù)報(bào)告實(shí)際發(fā)布的日期
【report_type】最近一期財(cái)務(wù)報(bào)告的類型,3-31對(duì)應(yīng)一季報(bào),6-30對(duì)應(yīng)半年報(bào),9-30對(duì)應(yīng)三季報(bào),12-31對(duì)應(yīng)年報(bào)
【PE_TTM】最近12個(gè)月市盈率,股價(jià) / 最近12個(gè)月歸屬母公司的每股收益TTM
【PS_TTM】最近12個(gè)月市銷率, 股價(jià) / 最近12個(gè)月每股營(yíng)業(yè)收入
【PC_TTM】最近12個(gè)月市現(xiàn)率, 股價(jià) / 最近12個(gè)月每股經(jīng)營(yíng)現(xiàn)金流
【PB】市凈率,股價(jià) / 最近期財(cái)報(bào)每股凈資產(chǎn)
下面是代碼的截圖,代碼里面有詳細(xì)的注釋,有問(wèn)題可以留言,附件中有程序的源碼,回復(fù)即可下載。
將數(shù)據(jù)下載下來(lái),運(yùn)行代碼,可以看到動(dòng)量策略的年化收益率為-1%,最大回撤達(dá)到-61.8%,而反轉(zhuǎn)策略的年化收益為37%,遠(yuǎn)遠(yuǎn)超過(guò)動(dòng)量策略,并且最大回撤也比動(dòng)量策略小很多。和大盤(pán)相比,在兩者最大回撤差不多的情況下,反轉(zhuǎn)策略的年化收益也遠(yuǎn)高于同期大盤(pán)的年化收益3.9%,說(shuō)明中國(guó)的A股市場(chǎng)存在較為明顯的反轉(zhuǎn)效應(yīng),反轉(zhuǎn)策略的實(shí)際效果要遠(yuǎn)好于動(dòng)量策略。
其實(shí)在國(guó)外,慣性策略還是比較有效的,但在A股市場(chǎng)效果不好,可能和中國(guó)市場(chǎng)過(guò)分炒作有關(guān)。而反轉(zhuǎn)策略在中國(guó)相當(dāng)有效,是一個(gè)非常好的策略。建議大家可以修改程序中的一些參數(shù),來(lái)找到最優(yōu)化的反轉(zhuǎn)策略。比如可以適當(dāng)縮小選股范圍,比如只在績(jī)優(yōu)股或者創(chuàng)業(yè)板股票中選取。也可以調(diào)整計(jì)算漲跌幅排序的時(shí)間,本文使用3個(gè)月,可以試試6個(gè)月、1個(gè)月。也可以縮短組合持有期。
(【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識(shí),可以參與我與論壇合作開(kāi)設(shè)的課程:《python量化投資入門(mén)》,我會(huì)親自授課,隨問(wèn)隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會(huì)在圈中分享量化的所見(jiàn)所思,圈子介紹點(diǎn)擊此處。)
之后會(huì)講的內(nèi)容:
- 以均線策略為基礎(chǔ),從頭到尾教大家如何使用Python編寫(xiě)一個(gè)完整的策略
關(guān)于《量化小講堂》之后想看的內(nèi)容,或者相關(guān)問(wèn)題,可以加我微信xbx_laoshi、Q群(快滿):438143420溝通。
附件中是Python程序文件,免費(fèi),回復(fù)可見(jiàn)。覺(jué)得文章內(nèi)容有幫助的話,頂貼是最好的鼓勵(lì)!