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/close01,因子构建比较简单,但是如果想构建近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列表

在这里插入图片描述

为了方便查看,这里选取了WorldQuant公开的101个alpha及其表达式(因版面受限,可至社区查看全部)。可以参考下面的单因子测试的代码做实验,对各因子进行测试,希望大家都能开发出可以稳定盈利的策略,发掘出新的alpha。

单因子测试

这里我们以 shift(close_0,15) / close_0 因子为例,介绍如何进行单因子测试,开发基于单因子的AI策略(克隆请至社区)。
在这里插入图片描述

posted @ 2020-11-30 17:21  BigQuant量化  阅读(53)  评论(0编辑  收藏  举报  来源