python中shift函数rolling_【邢不行|量化小讲堂系列18-Python量化入门】简易波动指标(EMV)策略实证...
引言:
邢不行的系列帖子“量化小講堂”,通過實際案例教初學者使用python進行量化投資,了解行業研究方向,希望能對大家有幫助。
個人微信:xingbuxing0807,有問題歡迎交流。
簡易波動指標(EMV)策略在A股的實證
上一期量化小講堂向大家介紹了布林帶策略在A股的實證效果。本期將以簡易波動指標(EMV)策略為例,實證檢驗一下EMV策略在A股的實際效果。
策略簡介
簡易波動指標(EMV),是為數不多的考慮價量關系的技術指標。它是根據成交量和人氣的變化,構成一個完整的股價系統循環。該指標指示投資者在人氣聚集且成交熱絡的時候買進股票,并且在成交量逐漸展現無力時,賣出股票。具體來說,當股價下跌時,由于買方萎靡退縮,致使成交量逐漸的減少,EMV數值也因而尾隨下降,直到股價下跌至某一個合理支撐區,撿便宜貨的買單促使成交量再度活躍,EMV 數值于是作相對反應向上攀升。所以EMV 指標的上升下降意味著市場的強弱變化,可以以此作為擇時的判斷依據。
本文采用的EMV策略的具體規則為:
第一步:計算EM指標的值
其中,$H_i,L_i,VOL_i$分別是第i日股票的最高價、最低價和成交量。
第二步:計算EMV = EM的n日簡單移動平均
第三步:計算MAEMV = EMV的m日簡單移動平均
第四步:當EMV大于MAEMV時,買入,信號為1;當EMV小于MAEMV時,賣出,信號為-1。
實戰
為了檢驗EMV策略在A股的實際效果,本文將該策略在所有A股都運行一遍。由于策略用不同的參數回測結果也不一樣,因此對每只股票回測時都遍歷一遍參數,選擇使超額收益率最大的參數作為該股票的最優參數。具體步驟如下:
一、遍歷數據文件夾中所有股票文件的文件名,得到股票代碼列表
用python提取股票歷史數據文件夾下每個股票對應的文件名(即股票代碼)并存放到一個列表里,這樣就得到了所有A股的代碼列表。
接著遍歷股票代碼的列表,讀取每只股票的歷史數據。
二、計算股票的后復權價格
在讀取某只股票的歷史數據后,為了回測結果的可靠性,本文重新計算了復權后的開盤價、收盤價、最高價和最低價,后面計算指標值和漲跌幅都以復權后的數據為基礎。有些上市不久的股票由于時間太短可能不具有代表性,因此本文在運行策略之前會先判斷該股票上市至今的交易天數,剔除掉上市不到1年半的股票。
三、遍歷參數進行回測
接著就是計算EMV指標并給出每天的信號了,在計算EMV和MAEMV時本文用到參數范圍分別是n取16到26,間隔為2,m取20到25,間隔為1。即遍歷該范圍內的所有參數組合,每一參數組都會輸出對應的每天的信號,根據買賣信號,可以得到每天的倉位,進而可以得到資金曲線及相關的回測指標(相關內容可參考【邢不行|量化小講堂系列15-Python量化入門】逆天的反轉策略在A 股實證)。在得到所有參數的回測結果后,根據超額收益率大小進行排序,選擇使超額收益最大的參數作為該股票的最優參數,并將相應數據存入csv文件。
最后,在遍歷完所有A股后,我們可以得到每只股票在最優參數組下使用EMV策略的回測結果,并和股票的年化收益及最大回撤做了一下對比。
本文希望通過對EMV策略的實際操作,向大家介紹pandas的以下幾個功能的運用:
1. 移動標準差函數rolling_std()函數的用法
2. 時間序列超前滯后函數shift()函數的用法
3. 空值填充函數fillna()函數的用法
下面上具體的程序。
程序
要運行EMV策略,需要所有A股的歷史交易數據,在www.yucezhe.com可以下載到所有股票歷史至今的數據。如下圖所示,每一行是每一天的數據:
數據有以下的字段:
【code】股票的代碼,上證股票以sh開頭,深證股票以sz開頭
【date】交易日期
【open】開盤價
【high】最高價
【low】最低價
【close】收盤價
【change】漲跌幅,復權之后的真實漲跌幅,保證準確
【volume】成交量
【money】成交額
【traded_market_value】流通市值
【market_value】總市值
【turnover】換手率,成交量/流通股本
【adjust_price】后復權價,復權開始時間為股票上市日,精確到小數點后10位
【report_date】最近一期財務報告實際發布的日期
【report_type】最近一期財務報告的類型,3-31對應一季報,6-30對應半年報,9-30對應三季報,12-31對應年報
【PE_TTM】最近12個月市盈率,股價 / 最近12個月歸屬母公司的每股收益TTM
【PS_TTM】最近12個月市銷率, 股價 / 最近12個月每股營業收入
【PC_TTM】最近12個月市現率, 股價 / 最近12個月每股經營現金流
【PB】市凈率,股價 / 最近期財報每股凈資產
下面是代碼的截圖,代碼里面有詳細的注釋,有問題可以留言,附件中有程序的源碼,回復即可下載。
這是最后回測結果的部分截圖:
運行該策略的一共有2607只股票,其中,策略年化收益大于股票本身年化收益的有1950只個股,占比大概為74.8%,而年化收益除以最大回撤絕對值能超過股票本身的有2304只個股,大概占88.4%,總的來說EMV策略的效果還不錯。大家有其他一些技術指標也可以嘗試一下,看看效果如何,只需要將第一部分信號產生方式改成自己的策略邏輯就可以了。
對本文研究有自己的想法的朋友,歡迎在評論區留言。關于文中的代碼、數據,以及下期《量化小講堂》想了解的內容,也可以加我個人微信xingbuxing0807交流。
如果你想入門量化,但是始終找不到方向,可以加入我的知識星球。我會在里面解答你的問題,分享我的感悟,不論是投資、技術,還是職業選擇、思維方式。
-- 學習和成長從來都不是一個人的事 --
https://t.zsxq.com/VbMrjYb (二維碼自動識別)
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的python中shift函数rolling_【邢不行|量化小讲堂系列18-Python量化入门】简易波动指标(EMV)策略实证...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习笔记:正则表达式
- 下一篇: Python学习笔记:常用内建模块1