天天看點

WorldQuant 101 Alpha因子建構及因子測試

背景介紹

根據WorldQuant發表的論文《101 Formulaic Alphas 》 ,其中公式化地給出了101個alpha因子。與傳統方法不一樣的是,他們根據資料挖掘的方法建構了101個alpha,據說裡面80%的因子仍然還行之有效并被運用在實盤項目中。

在BigQuant政策研究平台上,可通過表達式快速進行因子建構和資料标注,再也不需要自己手動編寫冗長代碼。

表達式簡介

因為在機器學習和深度學習中,因子是一個很重要的概念,也被稱為特征,開發AI算法的關鍵在于特征選擇。如果是簡單的基礎因子,比如近5日收益率: c l o s e 5 / c l o s e 0 − 1 close\\_5/close\\_0-1 close5​/close0​−1,因子建構比較簡單,但是如果想建構近5日每日收益率和成交量的相關性這個因子就比較棘手,需要編寫大量的代碼來計算該因子。是以,我們設計了bigexpr表達式引擎。

bigexpr是BigQuant開發的表達式計算引擎,通過編寫簡單的表達式,就可以對資料做任何運算,而無需編寫代碼。

bigexpr在平台上被廣泛使用,M.advanced_auto_labeler 和 M.derived_feature_extractor 都已經由bigexpr驅動,您可以用表達式就可以定義标注目标和完成後特征抽取。

正如剛剛提到的近5日每日收益率和成交量的相關性因子可以這樣定義:

c o r r e l a t i o n ( c l o s e 0 / s h i f t ( c l o s e 0 , 1 ) − 1 , v o l u m e 0 , 5 ) correlation(close\\_0/shift(close\\_0,1)-1,volume\\_0,5) correlation(close0​/shift(close0​,1)−1,volume0​,5)

其中, c o r r e l a t i o n correlation correlation表示求相關系數, c l o s e 0 close\\_0 close0​表示當天收盤價, s h i f t ( c l o s e 0 , 1 ) shift(close\\_0,1) shift(close0​,1)表示前一日收盤價, v o l u m e 0 volume\\_0 volume0​表示當天成交量。是以,可以看出,并不需要編寫大量代碼計算該因子,通過表達式即可快速建構。

函數說明

表達式引擎中有不少簡單函數,對其中的部分函數進行解釋:

  • 可分為橫截面函數和時間序列函數兩大類,其中時間序列函數名多為以KaTeX parse error: Expected group after '_' at position 5: ts\\_̲開頭
  • 大部分函數命名方式較為直覺
  • a b s ( x ) abs(x) abs(x) 、 l o g ( x ) log(x) log(x)分别表示 x x x的絕對值和 x x x的自然對數
  • r a n k ( x ) rank(x) rank(x)表示某股票 x x x值在橫截面上的升序排名序号,并将排名歸一到[0,1]的閉區間
  • d e l a y ( x , d ) delay(x,d) delay(x,d)表示 x x x值在 d d d天前的值
  • d e l t a ( x , d ) delta(x,d) delta(x,d)表示 x x x值的最新值減去 x x x值在 d d d天前的值
  • c o r r e l a t i o n ( x , y , d ) correlation(x,y,d) correlation(x,y,d)、 c o v a r i a n c e ( x , y , d ) covariance(x,y,d) covariance(x,y,d)分别表示 x x x和 y y y在長度為 d d d的時間視窗上的皮爾遜相關系數和協方差
  • t s m i n ( x , d ) ts\\_min(x,d) tsm​in(x,d)、 t s m a x ( x , d ) ts\\_max(x,d) tsm​ax(x,d)、 t s a r g m a x ( x , d ) ts\\_argmax(x,d) tsa​rgmax(x,d)、 t s a r g m i n ( x , d ) ts\\_argmin(x,d) tsa​rgmin(x,d)、 t s r a n k ( x ) ts\\_rank(x) tsr​ank(x)、 s u m ( x , d ) sum(x,d) sum(x,d)、 s t d d e v ( x , d ) stddev(x,d) stddev(x,d)等均可以通過函數名稱了解其作用

因子說明

BigQuant平台上系統因子超過2000個,包括了基本資訊因子、量價因子、估值因子、财報因子、技術名額因子等。本文簡單舉若幹因子進行介紹。

基本資訊因子

  • list_days # 上市天數
  • list_board_0 # 上市闆
  • company_found_date_0 # 公司成立天數
  • industry_sw_level1_0 # 申萬一級行業類别
  • st_status_0 # ST狀态
  • in_sse50_0 # 是否屬于上證50指數成分
  • in_csi300_0 # 是否屬于滬深300指數成分

量價因子

  • open_0 # 當日開盤價
  • open_1 # 前一日開盤價
  • close_0 # 當日收盤價
  • high_0 # 當日最高價
  • low_0 # 當日最低價
  • volume_0 # 當日成交量
  • amount_0 # 當日成交額
  • adjust_factor_0 # 複權因子

估值因子

  • market_cap_0 # 總市值
  • rank_market_cap_0 # 總市值排序
  • pe_ttm_0 # 市盈率(TTM)
  • rank_pe_ttm_0 # 市盈率(TTM)升序百分比排名
  • pe_lyr_0 # 市盈率(LYR)
  • pb_lf_0 # 市淨率(LF)
  • ps_ttm_0 # 市銷率(TTM)

财報因子

  • fs_net_profit_0 # 歸屬母公司股東的淨利潤
  • fs_net_profit_yoy_0 # 歸屬母公司股東的淨利潤同比增長率
  • fs_net_profit_qoq_0 # 歸屬母公司股東的淨利潤環比增長率
  • fs_roe_0 # 淨資産收益率
  • fs_roa_0 # 總資産收益率
  • fs_gross_profit_margin_0 # 銷售毛利率
  • fs_net_profit_margin_0 # 銷售淨利率
  • fs_eps_0 # 每股收益
  • fs_bps_0 # 每股淨資産
  • fs_cash_ratio_0 # 現金比率

資料标注

和因子建構一樣,資料标注也是機器學習算法中非常重要的一部分,更詳細的文檔為:自定義标注。

以前,資料标注主要通過fast_auto_label實作,有了表達式後,資料标注可以通過advanced_auto_label實作。資料标注的整體思想和内容主要展現在标注表達式上,可以通過 M.instruments子產品獲驗證券代碼清單,然後通過 M.advanced_auto_labeler子產品實作标注表達式的編寫,如下代碼所示:

  • label_expr為一個list,清單裡四個元素決定了标注的具體操作,詳細見:表達式引擎
  • 計算未來一段時間的相對收益作為标注的原始依據,這裡可以使用bigexpr表達式,快速完成資料标注
  • 使用clip和all_quantile函數做極值處理
  • 将原始資料離散化,這裡可以采取等寬離散化或者等頻離散化,兩者各有優劣
  • 通過where函數過濾掉一字漲停的樣本資料

101 Alphas清單

WorldQuant 101 Alpha因子建構及因子測試

為了友善檢視,這裡選取了WorldQuant公開的101個alpha及其表達式(因版面受限,可至社群檢視全部)。可以參考下面的單因子測試的代碼做實驗,對各因子進行測試,希望大家都能開發出可以穩定盈利的政策,發掘出新的alpha。

單因子測試

這裡我們以 shift(close_0,15) / close_0 因子為例,介紹如何進行單因子測試,開發基于單因子的AI政策(克隆請至社群)。

WorldQuant 101 Alpha因子建構及因子測試

繼續閱讀