1. 程式人生 > >alphalens教程1--整理好你的資料

alphalens教程1--整理好你的資料

很久以前研究過這個,週末下大雨,整理一下子IDE裡面的工程檔案,發現了當時的測試demo,於是決定再來感受一下。 alphalens是quantopian下的三大quant利器這裡,剩下兩個是大名鼎鼎的zipline和pyfolio。alphalens是用於因子回測的,使用很方便,但是,最大的一個特點就是,函式的名稱真是長啊! 安裝就不說了,似乎pip就可以了。 萬事開頭難,中間也難,結尾更難。很多事確實是這樣。 alphalens第一個難點就是把要測試的因子相關的資料整理成alphalens需要的那樣。我們從alphalens的一個數據標準化函式說起。alphalens.get_clean_factor_and_forward_returns
函式定義如下:
def get_clean_factor_and_forward_returns(factor,
                                         prices,
                                         groupby=None,
                                         by_group=False,
                                         quantiles=5,
                                         bins=None,
                                         periods=(1, 5, 10),
                                         filter_zscore=20,
                                         groupby_labels=None):
我們來解釋一下引數: factor : pd.Series - MultiIndex 一個MultiIndex Series型別的資料,index分別是日期與資產名稱,值是當天的alpha值。
prices : pd.DataFrame 通常是一個列數很多的dataframe的資料結構,如下圖所示,列名是股票程式碼,index是日期。
groupby : pd.Series - MultiIndex or dict groupby是一個MultiIndex 的series或者一個dict,通常用dict更加直觀,而且這兩者也是可以相互轉換的。dict的key是股票的程式碼,值是所屬行業的分類名詞,不一定是數字也可以是別的。

還有一點,如果傳入的是dict則預設測試周期中,行業的屬性不變,如果使用Series則可以改變。 by_group : bool 如果是True,那麼就按行業分類計算. quantiles : int or sequence[float] 因子分層的設定,可以直接設定一個整數,把標的池均分成幾個等分,也可以用一個列表,用來分不同的分層比例,例如 [0, .10, .5, .90, 1.] or [.05, .5, .95] bins : int or sequence[float] 與quantiles一樣,用於分層設定,不過是value策略。所以,兩者直接只能選一個,另外一個必須設定為None periods : sequence[int] 調倉週期設定 filter_zscore : int or float 設定收益率異常值的閾值為多少倍標準差 groupby_labels : dict 與groupby相互聯絡,例如之前是按照行業分類,而每個行業用數字表示,這裡則可以在把數字對映到具體的行業。
所以,我們需要準備好上面這些輸入的資料。 最後,我們來看一下這個函式的返回值。 返回值是pd.DataFrame - MultiIndex,包含每個調倉週期的收益率,因子值,所屬group(這裡是行業),以及分層的次序。

如果,我們整好資料,然後使用了這個函式獲得返回值,那麼,技術性難題已經解決了80%了。