背景介紹
根據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) tsmin(x,d)、 t s m a x ( x , d ) ts\\_max(x,d) tsmax(x,d)、 t s a r g m a x ( x , d ) ts\\_argmax(x,d) tsargmax(x,d)、 t s a r g m i n ( x , d ) ts\\_argmin(x,d) tsargmin(x,d)、 t s r a n k ( x ) ts\\_rank(x) tsrank(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清單
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzMDO4ATMxcTMwMTMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
為了友善檢視,這裡選取了WorldQuant公開的101個alpha及其表達式(因版面受限,可至社群檢視全部)。可以參考下面的單因子測試的代碼做實驗,對各因子進行測試,希望大家都能開發出可以穩定盈利的政策,發掘出新的alpha。
單因子測試
這裡我們以 shift(close_0,15) / close_0 因子為例,介紹如何進行單因子測試,開發基于單因子的AI政策(克隆請至社群)。