【量化課堂】多因子策略入門
一、導語
每一位寬客都相信,影響股票漲跌的因素不勝枚舉,而這些「因素」就是因子!近期,JoinQuant聚寬官網上線『單因子分析』 的功能。我們知道,針對單個因子的研究有助於多因子類策略的設計。本文作為一篇多因子策略入門教程,提供代碼當做框架,各路寬客可以自己測試,查看收益率,亦可利用聚寬因子分析功能和python平台自行構建代碼。
二、因子
因子是什麼?通俗來講。選股擇時,我們得有一個標準對不對?這些標準就叫做因子。比如,我認為營收增長率高的公司就是好公司!那我就把營收增長率大於30%的股票拉出來納入石榴裙下好了。這個營收增長率大於30%就是因子,完畢。
因子有選股的因子(股票好不好),有擇時的因子(好股票什麼時候買)。由於擇時往往跟技術指標關係緊密,本篇中就介紹基本面類的因子吧,偏財務向。
三、選取因子
最簡單的方法,先物色一些自己喜歡的因子,比如增長率,市值,ROE,等等。然後一個個往裡面加,看看效果如何,效果好了留下,效果差了刪除,反覆重複這個過程就能找到心儀的因子啦。
舉個例子,小編先選兩個因子,ROA和凈利潤/營業總收入(%)。ROA和利潤率比較高的一般都是表現良好的公司,所以小編決定選取ROA和凈利潤/營業總收入前20名的股票買入,回測結果如下圖所示:
表現比大盤略好一點,11年的收益有3.98倍。那換個因子試試?小編把凈利潤/營業總收入換成凈利潤環比增長率(%),回測結果如下圖所示:
然後發現收益率好了一點點,過去11年的收益有7.54倍。嗯,比剛才高了一些。如果我們把這三個因子都加進去會怎樣呢?
收益率為5.34倍,沒有剛才那麼好了,還是剛才的ROA和凈利潤環比增長率(%)這兩個因子比較好,那就保留兩個吧。小編聽說小市值股票收益好,如果把市值這個因子也加進去會怎麼樣呢?回測了一下,發現:
收益居然有28倍!真的是太不可思議了。
所以話說回來,雖然這種試錯法選因子是一種比較基礎的選因子方式,但其實還挺有用。經過反覆試錯,小編髮現小市值和ROE高的股票收益比較高,回測結果顯示,收益可以達到42倍之多!
是不是很驚艷!你可以直接編程構建代碼,也可以用我們的代碼當做框架。總之,可以自己測試一下,看看收益會不會爆表。
作為一篇合格的教程,我們接下來看看代碼是如何實現的。
四、編寫代碼的一些問題
首先,財務面的數據有個問題,就是有些數據是不可獲得的,這樣的話對排序的影響比較大,因此涉及到一個清洗數據的步驟。一個很簡單的辦法就是用均值來填充,這個在Python的pandas庫裡面有個現成的函數,大家可以嘗試使用裡面的均值填充法。小編自己也寫了一個填充均值的函數,大家也可以參考一下源碼【量化課堂】多因子策略入門。
不過隨著深入的研究,可能會發現用均值填充並不是一個完美的方法。這裡小編再提供一個思路,大家感興趣可以自己實現:如果某隻股票這一期的某個財務數據空缺,但是上一期沒有,我們可以根據該股票這個數據與上一期的平均值比例來確定。用公式說可能更清晰點:
空缺數值=本期該欄位平均值*上期該欄位數值/上期該欄位平均值。
其次,我們對因子的單位要做一個統一。因為有的因子絕對值好幾十億(比如市值),有的可能只有十幾(收益率)甚至是負的,因此因子和因子之間很難直接賦予權重進行計算。因此,我們可以考慮使用排名的方法,對這些因子進行排名。
Python自帶有一個sort函數,不過為了練手起見,小編自己寫了一個。用的是最簡單的冒泡排序演算法,高手也可以試一下堆排序或者歸併排序以加快回測的速度。
最後,我們將上述功能匯總成一個函數,集中取數據-清洗數據。
有了以上的幾個子函數,寫主函數就很方便了,各位寬粉們趕緊嘗試吧!
五、小結
我們這篇文章主要介紹了如何通過財務數據來構建一個多因子的策略。由於是入門向,我們構建多因子的方法比較簡單,選取的因子依據是主觀分析+排名。
如果想定量的分析,主流的方法是做回歸分析,或者對各個因子進行打分,這些將會在進階的量化課堂中有所介紹。如果還有其他的方法,當然也歡迎嘗試。
推薦閱讀:
※投資小課堂41:他是真正的投資者嗎?
※風險投資機構(VC)是如何判斷一個比較早期的項目是否值得投資的?
※現在是做股票好還是做現貨白銀投資好?
※【債券日評】20171025 10年國債收益率創3年新高
※江南憤青:在金融業的大趨勢面前你要做一個另類