1、请务必阅读正文之后的信息披露和法律声明 金融工程研究金融工程研究 证券证券研究研究报告报告 金融工程专题报告金融工程专题报告 2019 年年 06 月月 17 日日 相关研究相关研究 Table_ReportInfo 听海外高频交易专家讲解美国的高频交易2019.06.11 中证红利低波指数及华泰柏瑞中证红利低波 ETF 及其联接基金投资价值分析2019.06.11 选股因子系列研究(四十八)探索A 股的五因子模型2019.05.28 Table_AuthorInfo分析师:冯佳睿 Tel:(021)23219732 Email: 证书:S0850512080006 分析师:余浩淼 Tel:(
2、021)23219883 Email: 证书:S0850516050004 金融科技(金融科技(Fintech)和)和数据挖掘数据挖掘研究研究(三三)量化因子量化因子的批量生产与集中管理的批量生产与集中管理 Table_Summary投资要点:投资要点:量化因子量化因子计算可以定义为一种计算可以定义为一种基于基于初等计算函数与一阶谓词逻辑的递归过程初等计算函数与一阶谓词逻辑的递归过程。量化因子的本质是股票的某种数量化特征,一般需要通过对股票某些数量信息进行计算得到。与计算机函数从“函数输入出发,输入函数计算,得到函数输出”相类似,量化计算过程也可以拆解为“从量化指标出发,输入量化计算,得到新量
3、化指标”。由此可见,计算机函数构成的基本逻辑递归过程也同样适用于因子计算架构。定义量化定义量化指标指标的的计算过程有计算机语言与计算过程有计算机语言与 XML 文本文本两种两种方式方式。由于 算子与图灵机、递归函数等价,因此无论是基于 算子的函数式编程语言,还是基于图灵机的过程、命令范式语言,都可以用来构建量化计算过程。在定义逻辑结构较为复杂的因子时,过程、命令范式语言较为合适。而当需要批量生产因子时,可以表达递归逻辑的 XML 文本也可以作为递归逻辑描述语言来使用。利用利用自动因子生成器自动因子生成器暴力暴力挖掘因子挖掘因子是是生产有效因子生产有效因子的的重要方式重要方式。利用自动因子生成器
4、构建的 226 个突破型因子,其中有 20%-30%在截面上有较好的选股效果。然而,经正交后,效果明显下降。这说明,暴力挖掘方式还是能获取一部分传统因子构建过程中没有挖掘到的信息,但毕竟两种方式具有相同的初始算根,有大量信息被传统因子所解释。利用逐笔利用逐笔数据构建数据构建的的高频因子高频因子有着有着非常非常突出突出的的效果效果。构建买入大单成交额占比因子,其截面表现非常优异。利用正交后的因子构建等权组合,可获得接近 20%的多空年化收益与 9 左右的收益回撤比。高频数据的处理成本非常高,目前只能进行 15 年 8 月以来的短周期回测,所以,因子表现的稳定性需要进一步跟踪。自动构建自动构建数据
5、表是数据表是进行进行因子自动化管理的关键要素因子自动化管理的关键要素。依据因子结构进行因子数据库管理是因子计算自动化的重要步骤,而自动构建 SQL 语句,对数据表进行增删查改是实现这种自动化管理的关键技术。风险提示风险提示。数据挖掘是从历史先验数据获取经验模型的方法,存在模型失效可能。2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告2 请务必阅读正文之后的信息披露和法律声明 目目 录录 1.计算机视角下的量化因子计算过程.5 2.量化因子计算过程的实现.6 3.基于日频数据的量化因子构建.6 3.1 日频初始量化
6、指标计算过程.6 3.2 日频量化指标计算算子.7 3.3 利用计算机语言表达量化计算过程的递归逻辑.8 3.4 利用量化计算过程构建自动因子生成器.10 4.基于高频数据的量化因子构建.12 4.1 高频初始量化指标计算过程.12 4.2 高频量化计算算子.13 4.3 基于高频初始计算过程的高频成交因子.14 5.因子自动管理系统框架.16 6.总结.17 7.风险提示.17 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告3 请务必阅读正文之后的信息披露和法律声明 图目录图目录 图 1 量化因子计算的基本过
7、程.5 图 2 量化因子计算递归流程简介.5 图 3 量化因子计算过程构建流程.6 图 4 量化指标计算语言示例.9 图 5 量化因子批量生产的逻辑流程图.10 图 6 暴力因子生成的 XML 脚本示意.11 图 7 组合一:多空净值(IC0.02).12 图 8 组合二:多空净值(IC 分位数90%).12 图 9 TotalBidAmount 等权组合超额收益.15 图 10 TotalBidAmount 等权组合多空收益.15 图 11 因子管理框架示意图.16 图 12 因子关系数据库中,用于建表的 SQL 语句示例.16 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1
8、 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告4 请务必阅读正文之后的信息披露和法律声明 表目录表目录 表 1 量化指标计算过程递归步骤.5 表 2 常用日频基础数据列表.7 表 3 常用量化指标计算算子.8 表 4 BARRA 风格因子定义.9 表 5 BARRA 因子 IC 与多空收益率(2010.01-2019.04).10 表 6 均值突破因子截面表现(2010.01-2019.05).11 表 7 正交后均值突破因子截面表现(2010.01-2019.05).11 表 8 LEVEL2 高频数据列表.13 表 9 TotalBidAmount 因子 IC 与多空
9、收益率(2015.08-2019.05).14 表 10 正交 TotalBidAmount 因子 IC 与多空收益率(2015.08-2019.05).15 表 11 正交 TotalBidAmount 因子的截面溢价(2015.08-2019.05).15 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告5 请务必阅读正文之后的信息披露和法律声明 量化因子是构建多因子组合的基本要素。随着越来越多不同种类的有效因子被发现,如何快速高效地计算因子,向前更新因子值,自动存储历史数据与新数据,方便快捷地访问因子值,对
10、于量化组合管理来说,正变得越来越重要。本文希望从计算机的角度,构建一个完整的从计算到更新,再到管理的量化因子维护框架。1.计算机计算机视角视角下下的的量化因子计算量化因子计算过程过程 量化因子的本质是股票的某种数量化特征,一般需要通过对股票某些数量信息进行计算得到。转换成计算机语言为“以股票有关数据为输入,通过量化计算函数计算得到新的量化指标作为输出”。这一过程可以简单地通过下图来表达。图图1 量化因子计算量化因子计算的的基本过程基本过程 资料来源:海通证券研究所整理 与计算机函数“从函数输入出发,输入函数计算,得到函数输出”相类似,量化计算过程也可以拆解为“从量化指标出发,输入量化计算,得到
11、新量化指标”。由此可见,计算机函数构成的基本逻辑递归过程也同样适用于因子计算架构。图图2 量化因子量化因子计算计算递归递归流程简介流程简介 资料来源:海通证券研究所整理 上图展示了因子计算的一般递归过程,其中所有实体都被定义为量化指标计算过程。这是以一个量化指标计算过程为输入,获得新量化指标计算过程的实体。量化指标计算过程的递归步骤如下表所示。表表 1 量化指标量化指标计算过程递归计算过程递归步骤步骤 Step1:从输入量化指标计算过程中读取其输出的量化指标或者参数 Step2:将参数输入包含多个量化指标计算过程的指标计算器,计算获得输出量化指标计算过程 Step3:判断输出量化指标计算过程是
12、否为所求因子 Step4:如果是所求因子,结束计算过程,获得所求输出。否则,将该量化指标计算过程作为输入参数,输入新的量化指标计算过程,从 Step1 重新开始计算。资料来源:Wind,海通证券研究所 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告6 请务必阅读正文之后的信息披露和法律声明 从上述过程中,我们可以得到计算量化指标最重要的 4 个要素。量化指标量化指标计算过程计算过程:一个递归的计算实体,其输入与输出也均为量化指标计算过程。运算过程包括数据读取,参数读取,指标计算器,输出计算过程四步。计算计算参数
13、参数:一种常数量化指标计算过程。即,不需要任何参数或数据作为输入,便可输出返回一个固定的常数。初始初始量化指标量化指标计算过程计算过程:仅以计算参数为输入,直接依据参数从数据源读取数据的过程。一般为从外部数据源获取股票成交价等量化数据的过程。量化量化指标计算算子指标计算算子:一种指标计算器,仅包含初等基本函数计算或者简单一阶谓词逻辑计算的过程。由于常用的股票量化数据以时间序列数据或面板数据居多,因此这些基本函数计算一般为面板数据在截面上的计算函数或基础统计函数,或时间序列数据的一些基本运算。2.量化因子计算量化因子计算过程的过程的实现实现 由上文量化指标计算过程的逻辑框架定义可以看出,实现该计
14、算过程需要以下几个步骤:1.构建初始量化指标计算过程,也就是提取计算量化指标的原始数据。该过程是整个因子计算的起点。2.构建量化指标计算算子,即实现各种不同的基本函数计算或者一阶谓词逻辑的简单组合。3.采用某种递归逻辑表达方式,如程序语言,递归结构配臵文件等,编写量化指标计算过程的递归过程。4.解析编写好的量化指标计算过程,运行并获取结果。图图3 量化因子量化因子计算过程构建流程计算过程构建流程 资料来源:海通证券研究所管理 由上述过程可知,在构建量化指标计算过程时,如何获取初始量化指标计算过程,定义哪些量化计算算子,用什么方式编写、记录量化计算过程的递归逻辑,是最重要的三个问题。后文我们将从
15、这三点出发,介绍不同类型的量化因子是如何构建的。3.基于日频基于日频数据的数据的量化量化因子构建因子构建 3.1 日频日频初始量化指标计算过程初始量化指标计算过程 从数据频率上看,日频数据是构建量化因子最常用的数据类型。以交易日为单位,市场每天会产生大量公开的价量及其衍生数据。此外,财报相关的低频率基本面数据,2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告7 请务必阅读正文之后的信息披露和法律声明 也可以较为方便地加工成基于交易日的日频数据,用于因子计算。表表 2 常用常用日频基础日频基础数据列表数据列表 数据
16、名称数据名称 数据周期数据周期类型类型 描述描述 价量价量数据数据 开盘价(OPEN)交易日 股票每个交易日的开盘价 收盘价(CLOSE)交易日 股票每个交易日的收盘价 最高价(HIGH)交易日 股票每个交易日的最高价 最低价(LOW)交易日 股票每个交易日的最低价 前收盘价(PRE_CLOSE)交易日 股票前一交易日的收盘价按当日复权因子复权后价格 复权因子(ADJFACTOR)交易日 股票每个交易日的向后复权因子 成交量(VOLUME)交易日 股票每个交易日的成交量 成交额(AMOUNT)交易日 股票每个交易日的成交额 价格价格衍生数据衍生数据 总市值(VAL_MV)交易日 股票每个交易日
17、的总市值 流通市值(DQ_MV)交易日 股票每个交易日的流通市值 市盈率(PE)交易日 股票每个交易日的市盈率 滚动市盈率(PE_TTM)交易日 股票每个交易日的滚动市盈率 市净率(PB)交易日 股票每个交易日的市净率 换手率(TURN)交易日 股票每个交易日的换手率 自由流通换手率(FREETURNOVER)交易日 股票每个交易日的自由流通换手率 一致预期净利润(NET_REVENUE_FORCAST)交易日 股票每个交易日的分析师一致预期净利润 非非固定周期指标固定周期指标 总股本(TOT_SHARE)公告变动日 每个股票不同日期公告的总股本 A 股流通股本(FLOAT_A_SHARE)公
18、告变动日 每个股票不同日期公告的 A 股流通股本 自由流通股本(FREE_SHARES)公告变动日 每个股票不同日期公告的自由流通股本 净资产(NET_ASSETS)公告变动日 每个股票不同日期公告的净资产 不定期调入不定期调入调出指标调出指标 特别处理标志(IS_ST)调入调出日期 股票不定期被确认为 ST 或 ST 摘帽 所属申万一级行业代码(SW_INDUS_I_CODE)调入调出日期 股票被不定期调入或调出某申万一级行业 所属中信一级行业代码(CITICS_INDUS_I_CODE)调入调出日期 股票被不定期调入或调出某中信一级行业 会计期会计期指标指标 滚动营业收入(OPER_REV
19、_TTM)财报期 股票滚动营业收入 滚动归属母公司净利润(NET_PROFIT_PARENT_COMP_TTM)财报期 股票滚动归属母公司净利润 资产净收益率(ROE_TTM)财报期 股票滚动资产净收益率 资料来源:Wind,海通证券研究所 上表列举了较为常用的几种不同周期的日频基础数据。一般情况下,日频因子的初始量化指标计算过程便是通过设臵不同参数提取上述指标的过程。量化因子计算的常见操作过程为,处理以交易日为时间序列、不同标的为截面维度的数据类型。上表中不同周期类型的数据,除交易日类型的价量数据、价格衍生数据外,其他基本面数据,如财报数据、不定期公告数据,均可以利用最近数值填充法,将其处理
20、为以交易日为时间序列的面板数据。3.2 日频日频量化指标计算算子量化指标计算算子 作为处理量化指标的原子运算单元,量化指标的面板数据结构决定了算子主要由时间序列算子与截面数据算子两种形式构成。常用的算子如下表所示。2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告8 请务必阅读正文之后的信息披露和法律声明 表表 3 常用量化指标常用量化指标计算算子计算算子 算子名称算子名称 算子类型算子类型 描述描述 最大值(MAX)时间序列 计算过去 N 个交易日指标最大值 最小值(MIN)时间序列 计算过去 N 个交易日指标最
21、小值 均值(MEAN)时间序列 计算过去 N 个交易日指标均值 标准差(SD)时间序列 计算过去 N 个交易日指标标准差 偏度(SKEWNESS)时间序列 计算过去 N 个交易日指标偏度值 峰度(KURTOSIS)时间序列 计算过去 N 个交易日指标峰度值 半衰期加权求和(DECAY_LINEAR)时间序列 计算过去 N 个交易日某指标以距今交易日数为半衰期的加权求和值 延迟(DELAY)时间序列 计某指标延迟 N 个交易日值 延迟做差(DELTA)时间序列 计某指标延迟 N 个交易日值与当日的差值 累乘(PROD)时间序列 计算过去 N 个交易日指标累乘值 累加(SUM)时间序列 计算过去
22、N 个交易日指标累加值 分位数(RANK)时间序列/截面 计算过去 N 个交易日|同交易日所有标的指标分位数值 累计最小值(ACC_MIN)时间序列 计算过去 N 个交易日指标累计最小值 累计最大值(ACC_MAX)时间序列 计算过去 N 个交易日指标累计最大值 信息系数(IC)时间序列 计算过去 N 个交易日两指标间信息系数 秩信息系数(RANK_IC)时间序列 计算过去 N 个交易日两指标间秩信息系数 协方差(COV)时间序列 计算过去 N 个交易日两指标间协方差 BETA(BETA)时间序列 计算过去 N 个交易日 A 指标与 B 指标线性回归系数 0,1 判别(IF_ELSE)截面 计
23、算同交易日所有标的指标是否满足参数条件 初等函数运算 截面 利用类似 x=x0+x1初等函数公式,对于同交易日所有标的不同指标进行计算 资料来源:海通证券研究所整理 算子的输入和输出都必须为面板数据。上述算子包含了处理面板数据时,用到的绝大多数计算方法。通过上述算子的递归迭代,基本可以满足目前主要因子计算所需的因子计算过程。3.3 利用利用计算机计算机语言表达语言表达量化计算过程的递归逻辑量化计算过程的递归逻辑 量化计算过程即为一种递归过程。通过某种可以描述递归逻辑的表达范式,可以编写范式脚本,描述预先定义好的递归逻辑过程,并通过专用程序解析范式脚本,进行数据计算。计算机程序语言天然被设计用以
24、描述这样的逻辑范式。由于 算子与图灵机、递归函数等价,因此无论是基于 算子的函数式编程语言,还是基于图灵机的过程、命令范式语言,都可以用来构建量化计算过程。选择计算机语言作为量化计算过程的逻辑描述工具有两种方案可供选择,一是完全借鉴现有的 R、Matlab 等传统量化研究中比较常用的语言,构建其语法的解释器,并实现上述算子与初始量化指标计算过程。二是完全构建一套新的计算机语言,专门用于量化计算过程的逻辑范式描述,最大程度地保证对该语言的控制力。出于快速实现的考虑,本文采用第二种方式,即构建了一套自己的语言,通过构建量化计算过程的方式,在服务器中计算并维护 BARRA 风格因子。2 1 1 5
25、5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告9 请务必阅读正文之后的信息披露和法律声明 表表 4 BARRA 风格风格因子定义因子定义 因子名称因子名称 算法算法描述描述 Size 市值 股票当日市值 Beta 过去 252 个交易日股票超额收益(股票收益-无风险收益)相对中证全指超额收益加权最小二乘法回归的 BETA 值 Momentum 动量 过去 252个交易日 log超额收益与过去 21个交易日 log超额收益的差值 DASTD 过去 252 个交易日股票相对于无风险收益率的超额收益的加权二阶中心距 CMRA 过去
26、252 个交易日,最大累计月 log 超额收益与最小累计月 log超额收益的差值 HSIGMA 过去 252 个交易日股票超额收益(股票收益-无风险收益)相对中证全指超额收益加权最小二乘法回归的残差值标准差 ResidualVolatility 残差波动率 0.74*DASTD+0.16*CMRA+0.1*HSIGMA NonLinearSize 非线性市值 市值的三次方 PB 市净率 市净率 PE 市盈率 市盈率 STOM 过去 21 个交易日 log 换手率之和 STOQ 过去 63 个交易日 log 换手率之和 STOA 过去 252 个交易日 log 换手率之和 Liquidity 流
27、动性 0.35*STOM+0.35*STOQ+0.3*STOA EPFWD 未来一年盈利预测除以总资产 CETOP 滚动经营现金流除以总资产 ETOP 滚动归母净利润除以总资产 Earnings Yield 盈利收益率 0.68*EPFWD+0.21*CETOP+0.11*ETOP EGRSF 未来一年预测利润相对于目前利润增速 EGRO 过去四年利润回归斜率除以利润均值 SGRO 过去四年销售额回归斜率除以销售额均值 Growth 成长性 0.17*EGRSF+0.3*EGRO+0.53*SGRO MLEV(市值+非流动性负债)/市值 DTOA 总资产/总负债 BLEV(所有者权益+非流动性
28、负债)/所有者权益 Leverage 杠杆 0.38*MLEV+0.35*DTOA+0.27*BLEV 资料来源:The Barra US Equity Model(USE4),海通证券研究所 BARRA 风格因子计算方式如上表所示。其中,除市值、市盈率等可以直接从初始量化指标计算过程中获得,其他指标均需要经过数次量化指标计算算子的递归迭代得到。其定义方式的迭代逻辑相对复杂,但逻辑过程固定,且需要计算的中间指标与最终指标的数量均有限。对于这种固定且数量较少,但相对需要多层次复杂迭代的递归逻辑,直接将逻辑转换为程序语言是一种较高效的方式。图图4 量化指标量化指标计算语言示例计算语言示例 资料来源
29、:海通证券研究所整理 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告10 请务必阅读正文之后的信息披露和法律声明 上图是利用我们自定义的量化指标计算语言,计算 BARRA 风格因子的部分示意。其中,以 Value=Function(Value,Param)的形式定义量化指标计算过程。Value 即为量化指标计算过程的输入或返回,Param 为过程参数。Function 可以代表不同类型的计算过程,既可以是预先定义的基本算子,也可以是在上下文中以 function=Function(Value,Param)end
30、 function 形式定义的量化指标计算过程计算器。从语法结构看,该语言是一种典型的基于图灵机的命令范式语言。表表 5 BARRA 因子因子 IC 与与多空收益率多空收益率(2010.01-2019.04)因子因子名称名称 IC IC-IR IC 胜率胜率 RIC RIC-IR RIC 胜率胜率 多空收益多空收益 多空多空波动波动 多空多空 IR Size 市值-0.054-1.654 31.5%-0.052-1.304 33.3%26.8%17.0%1.581 Beta 0.008 0.291 48.6%-0.001-0.016 45.0%5.3%9.9%0.536 Momentum 动量
31、-0.009-0.338 49.5%-0.015-0.495 46.8%3.6%9.6%0.377 ResidualVolatility 残差波动率-0.015-0.499 40.5%-0.043-1.253 33.3%4.2%11.8%0.357 NonLinearSize 非线性市值-0.053-1.616 34.2%-0.052-1.307 36.0%28.0%18.5%1.510 PB 市净率-0.003-0.237 49.5%-0.015-0.706 39.6%4.7%9.4%0.499 PE 市盈率-0.004-0.542 44.1%-0.013-0.742 39.6%4.3%6.
32、3%0.679 Liquidity 流动性-0.099-2.073 29.7%-0.054-1.405 32.4%21.0%14.5%1.445 EarningsYield 盈利预期 0.010 0.736 61.3%0.009 0.451 57.7%7.6%9.2%0.831 Growth 成长性-0.002-0.118 41.4%-0.001-0.031 45.9%0.7%6.0%0.109 Leverage 杠杆-0.002-0.127 45.0%0.002 0.082 51.4%0.7%10.7%0.063 资料来源:Wind,海通证券研究所 上表罗列了我们计算的 BARRA 因子的截
33、面表现。除市值,流动性外,绝大部分因子的收益预测能力已严重下降。因此,它们主要作为风险因子,被用来控制组合风险暴露。而寻找有效的 ALPHA 因子,则可以通过自动因子生成器的方式进行探索。3.4 利用量化利用量化计算过程构建计算过程构建自动自动因子生成器因子生成器 将因子的计算数据与逻辑单元原子化后,便可以利用这些原子单元的自动递归迭代,批量生产新的因子。具体过程如下图所示。图图5 量化量化因子批量生产因子批量生产的的逻辑逻辑流程流程图图 资料来源:海通证券研究所整理 由单一的收益率这一初始量化计算过程,叠加不同周期的均值(MEAN)算子,便可以构成 N 个短周期均值因子和 M 个长周期均值因
34、子。利用标准差(SD)算子,构建M 个和长周期均值因子一一对应的标准差因子。最后,将 N 个短周期均值或最新值与不同的 M 个长周期均值做差,再除以对应的标准差,便可以构建 N*M 个突破因子。假设使用的初始量化过程为 P 个,则突破因子可以有 P*N*M 个。突破因子同时又可以通过别的算子与其他量化计算过程迭代,每多一个初始量化过程数据,每多一种周期,每多一个算子,均可以让生产的因子成倍增加。由于初始量化计算过程、量化计算因子以及可计算周期为有穷,则通过这些元素生2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告
35、11 请务必阅读正文之后的信息披露和法律声明 成的因子也将是有穷的。理论上,遍历所有递归情况可以穷举所有因子,但目前并不推荐这种做法,原因主要有三。首先,某些数据之间进行初等函数计算是没有意义的。如,成交量加减成交价格。其次,某些算子多层次叠加并不会增加蕴含的信息量。如,计算数据截面分位数与将数据求三次方后再计算其截面分位数。最后,穷尽所有可能性对运算资源的消耗非常严重。而且穷举得到的最终结果往往包含大量噪音,降噪过程也会极大地占用计算资源,使得因子构建得不偿失。自动因子生成器仅通过遍历周期与算子对量化计算过程进行迭代计算,其逻辑路径判断比较简单。因此,除通过计算机语言构建递归逻辑外,还可以通
36、过 XML 文本对递归过程进行描述。图图6 暴力暴力因子生成因子生成的的 XML 脚本示意脚本示意 资料来源:海通证券研究所整理 XML 是计算机领域一种主流的标记计算机可理解信息的语言。以 XML 节点为单元,每一个节点又递归地包含 N 个子节点。我们以 BaseData 节点表示初始量化计算过程,以包含 FuncStr 属性的 PeerNode 节点表示包含初等函数算子的量化计算过程,以包含Operators 与 Periods 节点的 PeerNode 节点,表示 X 个时间序列计算算子的量化计算过程。其中,X 等于时间序列算子数 N 乘以周期数 M。我们以日收益率、换手率、自由流通换手
37、率、PB、PE 等为初始量化计算过程,通过叠加均值,标准差算子,构建了 226 个依据以上基础数据的不同短周期相对不同长周期的突破因子。当因子 IC 或 RIC 均值的绝对值大于 0.02,且 IR 大于 1.5 时,我们认定其有效。下表给出了这一标准下,全部有效因子的平均表现。表表 6 均值突破均值突破因子截面表现因子截面表现(2010.01-2019.05)有效有效因子数因子数 有效有效因子因子 IC 均值均值 有效有效因子因子 IC 胜率胜率 有效有效因子因子多空多空收益收益 有效有效因子因子多空波动多空波动 有效有效因子因子多空多空 IR IC 有效因子 47/226 0.042 76
38、.3%13.0%7.89%1.634 RIC 有效因子 81/226 0.048 73.8%11.9%8.29%1.441 资料来源:Wind,海通证券研究所 2010 年 1 月到 2019 年 4 月,我们构建的 226 个因子中,约有 20%到 30%的因子在截面上长期有效。考虑到这些因子均是由构建传统因子的基础数据经初等基本函数计算得出,我们将其与传统九因子正交,剥离后的效果如下表所示。表表 7 正交正交后后均值突破均值突破因子截面表现因子截面表现(2010.01-2019.05)有效有效因子数因子数 有效有效因子因子 IC 均值均值 有效有效因子因子 IC 胜率胜率 有效有效因子因子
39、多空多空收益收益 有效有效因子因子多空波动多空波动 有效有效因子因子多空多空 IR IC 有效因子 66/226 0.024 71.1%7.6%4.93%1.568 RIC 有效因子 95/226 0.026 73.2%7.1%4.68%1.527 资料来源:Wind,海通证券研究所 2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告12 请务必阅读正文之后的信息披露和法律声明 由上表可见,由于计算所用的原始数据高度重合,剥离传统因子后,因子 IC 稳定性得到了提升,但有效性也显著下降。我们利用两种因子筛选标准,以
40、一年为滚动窗口构建两个因子和个股加权方式均为等权的组合。组合一选取过去一年 IC 均值大于 0.02,且 IC-IR 大于 1.5 的因子;组合二选取过去一年 IC 均值分位数大于 90%,且 IC-IR 大于 1.5 的因子。由下图可见,将筛选条件从一变为二后,多空组合的业绩表现有了明显的提高。年化收益率从 7.04%上升到 8.65%,最大回撤从 3.39%下降到 2.42%。图图7 组合一组合一:多空净值多空净值(IC0.02)资料来源:Wind,海通证券研究所 图图8 组合二:组合二:多空净值多空净值(IC 分位数分位数90%)资料来源:Wind,海通证券研究所 由此可见,通过改变筛选
41、因子的条件,可以有效提升组合的收益表现。但由于上述计算过程与九因子同源,正交后单因子的有效性较弱,故如何将这类由暴力生成方法得到的因子与传统因子结合使用,是发挥因子效应的关键。以上分析表明,利用量化计算过程构建的自动因子生成器可以得到有效的因子簇,提供传统因子未包含的信息。目前为止,我们只是简单尝试了均值突破这一最直接的因子构建逻辑,就得到了令人兴奋的结果。可以期待,扩展更复杂的因子构建逻辑、增加更多有效初始量化计算过程与量化计算因子,或许会对现有组合带来更多有益的补充。此外,由于通过这种方式构建的因子的数目相较于以往会有几何级的增长,因此优化因子筛选机制也会使组合的表现获得显著的提升。当因子
42、维度成千上万时,简单的基于 OLS 的因子处理方法将会失效。所以,如何处理高维度的因子数据,高效地从中提炼有效的因子信息,也是利用好自动因子生成器面临的重要课题。4.基于高频基于高频数据的数据的量化量化因子构建因子构建 随着传统量化选股方式的广泛应用,经典日频因子的效果逐渐降低,并逐渐转化为风险因子。因此,除利用自动因子生成方式,尽可能挖掘传统基础数据的有效信息外,引入新的量化因子数据源是提供组合 ALPHA 的重要方式。自 2010 年交易所推出LEVEL2 行情源以来,透过描述市场成交细节的日内高频行情信息,分析、寻找价格形成的细节脉络成为构建新的 ALPHA 因子的重要方式。相较于日频数
43、据,高频数据虽然拥有更高的数据密度与不同的数据结构,但就单个标的来看,依然可以将其定义为一种时间序列数据进行处理。因此,对应的因子计算过程的大体思路依然可以沿用上一节所述的量化因子计算过程这一框架。4.1 高频高频初始量化指标计算过程初始量化指标计算过程 下表列示了交易所的 LEVEL2 行情产品,基于此可以构建不同种类的高频初始量化指标计算过程。2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告13 请务必阅读正文之后的信息披露和法律声明 表表 8 LEVEL2 高频高频数据列表数据列表 数据名称数据名称 最小数
44、据最小数据间隔间隔 描述描述 分钟分钟 K 线线 开盘价(OPEN)分钟 分钟 K 线开盘价 收盘价(CLOSE)分钟 分钟 K 线收盘价 最高价(HIGH)分钟 分钟 K 线最高价 最低价(LOW)分钟 分钟 K 线最低价 成交量(VOLUME)分钟 分钟成交量 成交额(AMOUNT)分钟 分钟成交额 成交笔数(TRADE_NUM)分钟 分钟成交笔数 Tick 盘口盘口快照快照 成交价(MATCH)3 秒 每三秒最后成交价 成交量(VOLUME)3 秒 每三秒最后成交量 成交笔数(TRADE_NUM)3 秒 每三秒内成交笔数 BS 标志(BS_FLAG)3 秒 每三秒最后成交方向 累计成交量
45、(ACC_VOLUME)3 秒 开盘到最新 Tick 累计成交量 累计成交额(ACC_AMOUNT)3 秒 开盘到最新 Tick 累计成交额 前收盘价(PREE_CLOSE)3 秒 股票前收盘价 开盘价(OPEN)3 秒 股票开盘价 最高价(HIGH)3 秒 开盘到最新 Tick 最高价 最低价(LOW)3 秒 开盘到最新 Tick 最低价 买卖十档行情 3 秒 每三秒盘口截面买卖十档挂单价量 平均委卖价格(AVG_ASK_PRICE)3 秒 每三秒盘口截面平均委卖价格 叫卖总量(ASK_TOT_VOL)3 秒 每三秒盘口截面总委卖量 平均委买价格(AVG_BID_PRICE)3 秒 每三秒盘
46、口截面平均委买价格 叫买总量(BID_TOT_VOL)3 秒 每三秒盘口截面总委买量 逐笔成交逐笔成交 成交编号(INDEX)毫秒 每笔成交编号 成交代码(FUNC_CODE)毫秒 每笔成交类型(深市有意义)BS 标志(BS_FLAG)毫秒 每笔成交 BS 标志 成交价格(TRADE_PRICE)毫秒 每笔成交价格 成交量(TRADE_VOLUME)毫秒 每笔成交量 叫卖序号(ASK_ORDER)毫秒 成交叫卖单编号 叫买序号(BID_ORDER)毫秒 成交叫买单编号 逐笔逐笔委托委托(仅仅深市深市)委托编号(INDEX)毫秒 每笔委托编号 委托号(ORDER)毫秒 委托单唯一编号 委托代码(
47、FUNCTION_ID)毫秒 委托代码:B、S、C 委托价格(PRICE)毫秒 委托单价格 委托数量(VOLUME)毫秒 委托单数量 资料来源:Wind,海通证券研究所 高频与日频数据间的最大差异在于不同的时间周期与数据结构。与传统的日频数据相比,除单日数据量大增外,时间单位的不整齐也是高频数据的另一重要特征。除分钟数据严格的在每个交易日的 240 分钟均有数据外,Tick 数据、逐笔数据均会因标的成交热度不同而有较大差异,其时间序列有明显的时间间隔不均匀特性。4.2 高频量化计算算子高频量化计算算子 从算子类型角度看,与日频数据相同,高频数据算子依然由初等函数、一阶谓词逻辑以及基本的时间序列
48、函数和截面统计函数构成。由于高频数据具有数据规模大、时间间隔不均匀的特性,在处理过程中有以下几点需要注意。2 1 1 5 5 9 9 2/3 6 1 3 9/2 0 1 9 0 6 1 7 1 5:4 8 金融工程研究 金融工程专题报告14 请务必阅读正文之后的信息披露和法律声明 分段分段的数据处理过程的数据处理过程。由于高频数据规模很大,因此单次数据处理往往需要按标的或者按时间窗口对数据规模进行划分。一次性计算所有指标对应的所有时段数据,很有可能因为计算资源有限而无法实现。高频高频数据的低频化数据的低频化。间隔不均匀的时间序列数据往往需要先变为均匀时间间隔的数据后,才能进一步处理。将数据处理
49、为最小时间间隔单位可以保证不损失信息,然而却会因为空值填充给本来就需要降噪的高频数据增加更多噪音。因此,将高频数据利用统计或者抽样方式处理为低频数据是更常用的方式。计算的计算的时间时间窗口窗口应当应当避免避免跨跨交易交易日日。日内数据包含当天的市场交易观点和信息,很多时候依赖随机过程模型进行统计抽样。集合竞价的交易制度与隔夜信息会扭曲数据随机过程的特性,对于抽样后的再处理会有一定程度的干扰。因此在降低数据频率,选择计算的时间窗口时应尽可能规避跨交易日。而且,对集合竞价数据也需特别处理。4.3 基于基于高频初始计算过程的高频成交因子高频初始计算过程的高频成交因子 高频数据从一个新的维度揭示了市场
50、的交易信息,利用前述量化计算因子,我们尝试利用逐笔成交数据构建大额买单成交金额占比因子。首先,我们定义大单如下:当订单 i 的成交量减去当日所有订单成交量均值的差大于 l 倍成交量标准差时,将该订单定义为大单。其中,l 一般取 1、2、3。其次,定义如下的大额买单成交金额指标。假如订单 i 全天有 T 笔成交,将每笔成交价乘以对应成交量得到单笔成交额。把该订单所有单笔成交额加总,并乘以该订单买卖标志,即可得到该买单的总成交金额。第三,将所有大额买单的成交额加总,即可得到大额买单成交金额。最后,将上式以当日总成交额,得到大额买单成交金额占比。在使用该因子选股时,我们进一步将每天的因子值按月求平均