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