用python作投資--多因子策略

導語:每一位寬客都相信,影響股票漲跌的因素不勝枚舉,而這些「因素」就是因子!本文做爲一篇合格的入門教程,提供代碼當作框架,各路寬客能夠本身測試,查看收益率,亦可利用聚寬python平臺自行構建代碼。python

規範源碼已更新!請你們克隆研究。
本文由JoinQuant量化課堂推出 。難度標籤爲進階上,理解深度標籤:level-0

JoinQuant免費提供數據獲取、研究環境、策略回測、實盤鏈接、發送交易信號,學習交流等功能.

做者: 導數君
編輯: 宏觀經濟算命師

因子

因子是什麼?通俗來說。選股擇時,咱們得有一個標準對不對?這些標準就叫作因子。好比,我認爲營收增加率高的公司就是好公司!那我就把營收增加率大於30%的股票拉出來歸入石榴裙下好了。這個營收增加率大於30%就是因子,完畢。算法

因子有選股的因子(股票好很差),有擇時的因子(好股票何時買)。因爲擇時每每跟技術指標關係緊密,本篇中就介紹基本面類的因子吧,偏財務向。編程

選取因子

最簡單的方法,先物色一些本身喜歡的因子,好比增加率啦,市值啦,ROE啦,等等。而後一個個往裏面加,看看效果如何,效果好了留下,效果差了刪除,反覆重複這個過程就能找到心儀的因子啦。框架

舉個例子,小編先選兩個因子,ROA和淨利潤/營業總收入(%)。ROA和利潤率比較高的通常都是表現良好的公司,因此小編決定選取ROA和淨利潤/營業總收入前20名的股票買入,回測結果以下圖所示:函數

1.png

表現比大盤略好一點,11年的收益有3.98倍。那換個因子試試?小編把淨利潤/營業總收入換成淨利潤環比增加率(%),回測結果以下圖所示:post

2.png

而後發現收益率好了一點點,過去11年的收益有7.54倍。嗯,比剛纔高了一些。若是咱們把這三個因子都加進去會怎樣呢?學習

3.png

收益率爲5.34倍,沒有剛纔那麼好了,仍是剛纔的ROA和淨利潤環比增加率(%)這兩個因子比較好,那就保留兩個吧。小編據說小市值股票收益好,若是把市值這個因子也加進去會怎麼樣呢?回測了一下,發現:測試

4.png

收益竟然有28倍!真的是太難以想象了。spa

因此話說回來,雖然這種試錯法選因子是一種比較基礎的選因子方式,但其實還挺有用。通過反覆試錯,小編髮現小市值和ROE高的股票收益比較高,回測結果顯示,收益能夠達到42倍之多!code

5.png

是否是很驚豔!你能夠直接編程構建代碼,也能夠用咱們的代碼當作框架。總之,能夠本身測試一下,看看收益會不會爆表。
做爲一篇合格的教程,咱們接下來看看代碼是如何實現的:

編寫代碼的一些問題

首先,財務面的數據有個問題,就是有些數據是不可得到的,這樣的話對排序的影響比較大,所以涉及到一個清洗數據的步驟。一個很簡單的辦法就是用均值來填充,這個在Python的pandas庫裏面有個現成的函數,你們能夠嘗試使用裏面的均值填充法。小編本身也寫了一個填充均值的函數,你們也能夠參考一下源碼。

不過隨着深刻的研究,可能會發現用均值填充並非一個完美的方法。這裏小編再提供一個思路,你們感興趣能夠本身實現:若是某隻股票這一期的某個財務數據空缺,可是上一期沒有,咱們能夠根據該股票這個數據與上一期的平均值比例來肯定。用公式說可能更清晰點:
空缺數值=本期該字段平均值*上期該字段數值/上期該字段平均值。

其次,咱們對因子的單位要作一個統一。由於有的因子絕對值好幾十億(好比市值),有的可能只有十幾(收益率)甚至是負的,所以因子和因子之間很難直接賦予權重進行計算。所以,咱們能夠考慮使用排名的方法,對這些因子進行排名。
Python自帶有一個sort函數,不過爲了練手起見,小編本身寫了一個。用的是最簡單的冒泡排序算法,高手也能夠試一下堆排序或者歸併排序以加快回測的速度。

最後,咱們將上述功能彙總成一個函數,集中取數據-清洗數據。

有了以上的幾個子函數,寫主函數就很方便了,各位寬粉們趕忙嘗試吧!

小結

咱們這篇文章主要介紹瞭如何經過財務數據來構建一個多因子的策略。因爲是入門向,咱們構建多因子的方法比較簡單,選取的因子依據是主觀分析+排名。
若是想定量的分析,主流的方法是作迴歸分析,或者對各個因子進行打分,這些將會在進階的量化課堂中有所介紹。若是還有其餘的方法,固然也歡迎嘗試。

多因子策略入門_函數說明.png

本文由JoinQuant量化課堂推出,版權歸JoinQuant全部,商業轉載請聯繫咱們得到受權,非商業轉載請註明出處。

文章更迭記錄:
v2.1,2016-07-25,修正文字,感謝 liuzehong 指出
v2.0,2016-07-16,更新爲規範源碼,添加「函數說明書」
v1.1,2016-07-04,添加「導語」
v1.0,2016-05-21,文章上線

策略代碼與回測結果見原文

相關文章
相關標籤/搜索