1. 程式人生 > >多因子模型之因子(訊號)測試平臺----alphalens(二)

多因子模型之因子(訊號)測試平臺----alphalens(二)

今天這一個部分,我們要用到另外一個python的大殺器,notebook,現在叫做jupter notebook。大家如果裝了anaconda的話就會有這個的。

        大家在命令視窗中把目錄切換到工作目錄就可以了。

        回車之後就可以啟動notebook了。

        為什麼我們今天要在notebook裡面程式設計,而不是繼續在pycharm上面呢?原因就是圖片顯示的問題。在pycharm裡面,我們plot會有很多問題,比例失真,而且圖片不能保留,而notebook可是一個視覺化很有利的工具。

        當然,接下來在notebook裡面的教程只是一個教學的目的,後期,我們會把alphalens分解開來,然後在pycharm裡面執行,不顯示圖片,而是直接把圖片儲存起來,方便最後檔案的形成。最後的檔案,可以是網頁,也可以是pdf。而現在是用notebook的目的就是讓我們明白測試單個因子的時候的一些指標的觀察方法。畢竟這一系列的教程,不僅僅是程式設計的教程,更重要的是學習因子的測試和因子表現的分析。

        一個因子的表現,通常可以從Return, information coefficient,turnover三個方面來考察,當然也有別的,但是這三個是最主要的。而alphalens也正是圍繞著這個展開的。

        今天我們先來分析一下return這一部分,alphalens給我們提供了哪些視角,以及含義是什麼。

        在notebook裡面,我們只需要執行下面這一句,alphalens就會把所有的關於return的分析展示出來:

alphalens.tears.create_returns_tear_sheet(factor_data)

1.收益率表

        我們先來分析一下這張表。

        我們有一個因子,給每個股票在每一天都打了分,那麼,你得按照這個分數來分層次。比如,我們分5個層次,那麼得分前20%的是第一層,即Top Quantile,最後面20%的是Bottom Quantile。然後,每隔特定的時間點,我們對這些層裡面的股票進行輪換。所以,這裡就產生一個問題,每隔多少時間調倉?

        我們在這個例子當中使用的是1、5、10,也就是按照每天調倉、一週調倉、半個月調倉來進行因子的測試。當然,我們也可以選擇更多的調倉週期。

        如此一來,表格就很清楚了,三列分別對應的是三個調倉週期的結果。第一行是按照這樣的調倉週期,獲得的年化alpha,beta(這裡,alphalens中的beta是全市場的平均收益,而這裡的全市場是每一個層加起來的平均收益)。後面是每個層的收益。

        具體怎麼計算,後續如果分析原始碼的話,可以接觸到,比較alphalens只是一個工具,首先要會使用,然後想著改進提高。畢竟學習的過程就是守、破、離。必須先準守,弄明白了才可以有自己的見解,對工具做提高。

        當然啦,好的因子,對於上面的表格,年化收益率應該比較大,而且top和bottom的收益率spread應該比較顯著。

2.分層平均收益率柱狀圖

        接下來是這張圖,者可以說是單因子測試最重要的一張圖。由於我們的股票標的池比較少,所以作為一個教程,筆者只把我們的因子得分分層了5層,也就是和上面舉得例子一樣。

        上圖中,每一組柱狀圖代表的是一個層,從左往右依次從bottom到top。顯然,我們這個因子是一個反向因子,也就是說,因子的值越高,表現越差,實際情況下,我們應該先糾正方向。

        通常,如果我們的標的池很多,那麼可以分很多的層,譬如30、50,然後繪製這個圖,觀察圖形的形態。我們希望的是,這些柱狀圖是單調生長的,這樣就說明,因子的單調性很好,分值越高,預測股票的表現越好或者越差。   

        當然,實際上,這樣的因子並不多,所以說,尋找alpha是很困難的路,而尋找alpha的前提,就是有一個很好用的單因子回測平臺。

3.所有收益率分佈圖

        接下來,是小提琴圖。這個圖其實是這麼多收益的分佈。我們前面看到的柱狀圖的高度其實是每個調倉週期內獲得的收益的均值。我們知道,均值僅僅是分佈的一階矩,相對而言,只看均值會損失很多資訊。所以,這裡就把每一層的每一次調倉週期內獲得的收益分佈繪製出來。

4.單訊號組合構建收益率圖

        從上面我們可以看到,十日調倉的收益明顯更加集中,方差更小,換句話說,收益率更加可信。

        我們知道,我們的因子值目前來說,是一個正態分佈,均值幾乎為零。那麼我們就可以用因子值作為權重來構建一個全市場的股票組合進行回測。由於我們的是負向指標,所以出現了上面這樣向下的曲線,而實際情況下,是向上的。

        這是一種很樸素的構建組合的方法,也就是單因子組合的構建。對於好的訊號,當然是收益率越大越好。注意的是,這裡並不是一個zero-investment的組合(看alphalens的說明,是這樣的)。而事實上,zero-investment的組合也是一個很重要的指標,後期精益alphalens的時候,我們可以自己增加。

        上面這個圖,就是把每一層分開了構建了組合,同時,每一層內,只有多頭,而股票的權重是按照因子的大小來設定。(具體權重設定是否如此有待考察)對於這類圖,評價標準就是累計收益率是否發散,越發散越好,說明因子的區分度大。

        上面兩幅圖都是以1天為調倉週期的,後面還有5天和10天為調倉週期的。

5.Top minus bottom

        這是每次調倉的時候,計算一下top層和bottom層收益率的差。這也是一個很重要的指標。對於好的因子,這個差的絕對值應該越大越好,同時,方向保持穩定。上圖中的橙黃色的線則是對每次調倉收益率的差做了一個月度平滑。

        比如上面這裡的十日調倉和月度,其實趨勢很接近了。

        這類圖,好的訊號應當有下面這樣的表現:

a.波動比較小

b.某一個方向的佔比處於絕對地位,比如大部分時候的Top Minus Bottom都是正的