本系列帖子“量化小講堂”,通過實(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ù)、財務(wù)數(shù)據(jù)、分鐘數(shù)據(jù)、分筆數(shù)據(jù)、逐筆數(shù)據(jù)等。
【量化小講堂-Python、Pandas系列17】簡易波動指標(biāo)(EMV)策略在A股的實(shí)證
上一期量化小講堂向大家介紹了布林帶策略在A股的實(shí)證效果(http://xalimeijing.com/thread-4901403-1-1.html)。本期將以簡易波動指標(biāo)(EMV)策略為例,實(shí)證檢驗(yàn)一下EMV策略在A股的實(shí)際效果。
---策略簡介---
簡易波動指標(biāo)(EMV),是為數(shù)不多的考慮價量關(guān)系的技術(shù)指標(biāo)。它是根據(jù)成交量和人氣的變化,構(gòu)成一個完整的股價系統(tǒng)循環(huán)。該指標(biāo)指示投資者在人氣聚集且成交熱絡(luò)的時候買進(jìn)股票,并且在成交量逐漸展現(xiàn)無力時,賣出股票。具體來說,當(dāng)股價下跌時,由于買方萎靡退縮,致使成交量逐漸的減少,EMV數(shù)值也因而尾隨下降,直到股價下跌至某一個合理支撐區(qū),撿便宜貨的買單促使成交量再度活躍,EMV 數(shù)值于是作相對反應(yīng)向上攀升。所以EMV 指標(biāo)的上升下降意味著市場的強(qiáng)弱變化,可以以此作為擇時的判斷依據(jù)。
本文采用的EMV策略的具體規(guī)則為:
第一步:計算EM指標(biāo)的值\[EM=(\frac{H_i+L_i}{2}-\frac{H_{i-1}+L_{i-1}}{2})*(H_i-L_i)/VOL_i\]其中,$H_i,L_i,VOL_i$分別是第i日股票的最高價、最低價和成交量。
第二步:計算EMV = EM的n日簡單移動平均
第三步:計算MAEMV = EMV的m日簡單移動平均
第四步:當(dāng)EMV大于MAEMV時,買入,信號為1;當(dāng)EMV小于MAEMV時,賣出,信號為-1。
(【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識,可以參與我與論壇合作開設(shè)的課程:《python量化投資入門》,我會親自授課,隨問隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會在圈中分享量化的所見所思,圈子介紹點(diǎn)擊此處。)
---實(shí)戰(zhàn)---
為了檢驗(yàn)EMV策略在A股的實(shí)際效果,本文將該策略在所有A股都運(yùn)行一遍。由于策略用不同的參數(shù)回測結(jié)果也不一樣,因此對每只股票回測時都遍歷一遍參數(shù),選擇使超額收益率最大的參數(shù)作為該股票的最優(yōu)參數(shù)。具體步驟如下:
一、遍歷數(shù)據(jù)文件夾中所有股票文件的文件名,得到股票代碼列表
用python提取股票歷史數(shù)據(jù)文件夾下每個股票對應(yīng)的文件名(即股票代碼)并存放到一個列表里,這樣就得到了所有A股的代碼列表。
接著遍歷股票代碼的列表,讀取每只股票的歷史數(shù)據(jù)。
二、計算股票的后復(fù)權(quán)價格
在讀取某只股票的歷史數(shù)據(jù)后,為了回測結(jié)果的可靠性,本文重新計算了復(fù)權(quán)后的開盤價、收盤價、最高價和最低價,后面計算指標(biāo)值和漲跌幅都以復(fù)權(quán)后的數(shù)據(jù)為基礎(chǔ)。有些上市不久的股票由于時間太短可能不具有代表性,因此本文在運(yùn)行策略之前會先判斷該股票上市至今的交易天數(shù),剔除掉上市不到1年半的股票。
三、遍歷參數(shù)進(jìn)行回測
接著就是計算EMV指標(biāo)并給出每天的信號了,在計算EMV和MAEMV時本文用到參數(shù)范圍分別是n取16到26,間隔為2,m取20到25,間隔為1。即遍歷該范圍內(nèi)的所有參數(shù)組合,每一參數(shù)組都會輸出對應(yīng)的每天的信號,根據(jù)買賣信號,可以得到每天的倉位,進(jìn)而可以得到資金曲線及相關(guān)的回測指標(biāo)(相關(guān)內(nèi)容可參考量化小講堂http://xalimeijing.com/thread-4745852-1-1.html)。在得到所有參數(shù)的回測結(jié)果后,根據(jù)超額收益率大小進(jìn)行排序,選擇使超額收益最大的參數(shù)作為該股票的最優(yōu)參數(shù),并將相應(yīng)數(shù)據(jù)存入csv文件。
最后,在遍歷完所有A股后,我們可以得到每只股票在最優(yōu)參數(shù)組下使用EMV策略的回測結(jié)果,并和股票的年化收益及最大回撤做了一下對比。
本文希望通過對EMV策略的實(shí)際操作,向大家介紹pandas的以下幾個功能的運(yùn)用:
1. 移動標(biāo)準(zhǔn)差函數(shù)rolling_std()函數(shù)的用法
2. 時間序列超前滯后函數(shù)shift()函數(shù)的用法
3. 空值填充函數(shù)fillna()函數(shù)的用法
下面上具體的程序。
---程序---
要運(yùn)行EMV策略,需要所有A股的歷史交易數(shù)據(jù),在www.yucezhe.com可以下載到所有股票歷史至今的數(shù)據(jù)。如下圖所示,每一行是每一天的數(shù)據(jù):
數(shù)據(jù)有以下的字段:
【code】股票的代碼,上證股票以sh開頭,深證股票以sz開頭
【date】交易日期
【open】開盤價
【high】最高價
【low】最低價
【close】收盤價
【change】漲跌幅,復(fù)權(quán)之后的真實(shí)漲跌幅,保證準(zhǔn)確
【volume】成交量
【money】成交額
【traded_market_value】流通市值
【market_value】總市值
【turnover】換手率,成交量/流通股本
【adjust_price】后復(fù)權(quán)價,復(fù)權(quán)開始時間為股票上市日,精確到小數(shù)點(diǎn)后10位
【report_date】最近一期財務(wù)報告實(shí)際發(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)
下面是代碼的截圖,代碼里面有詳細(xì)的注釋,有問題可以留言,附件中有程序的源碼,回復(fù)即可下載。
這是最后回測結(jié)果的部分截圖:
運(yùn)行該策略的一共有2607只股票,其中,策略年化收益大于股票本身年化收益的有1950只個股,占比大概為74.8%,而年化收益除以最大回撤絕對值能超過股票本身的有2304只個股,大概占88.4%,總的來說EMV策略的效果還不錯。大家有其他一些技術(shù)指標(biāo)也可以嘗試一下,看看效果如何,只需要將第一部分信號產(chǎn)生方式改成自己的策略邏輯就可以了。
(【python量化課程】想要快速、系統(tǒng)的學(xué)習(xí)量化知識,可以參與我與論壇合作開設(shè)的課程:《python量化投資入門》,我會親自授課,隨問隨答。參與課程還可以免費(fèi)加入我的小密圈,我每天會在圈中分享量化的所見所思,圈子介紹點(diǎn)擊此處。)
---之后要講的內(nèi)容---
關(guān)于《量化小講堂》之后想看的內(nèi)容,或者相關(guān)問題,可以加我微信xbx_laoshi、Q群(快滿):438143420溝通。
附件中是Python程序文件,免費(fèi),回復(fù)可見,覺得文章內(nèi)容有幫助的話,頂貼是最好的鼓勵!