市场微观结构探析系列之三:分时K线中的alpha
新浪财经
来源:量化先行者
报告提要
高频因子
高频选股因子与低频因子具有较大的差异。以月、季为持仓周期的低频选股因子主要来自于财务指标,其从盈利、成长、估值等维度综合评估上市公司;而以日为持仓周期的高频因子主要从股票量价信息中衍生而得。
高频因子挖掘与低频因子相比更显复杂和神秘。相比于低频基本面因子的挖掘由主动管理的投资逻辑所驱动,高频因子的挖掘更倾向于由数据所驱动。而股票交易产生的量价数据频率远高于财务信息,通过遍历量价衍生指标以筛选因子并非易事。
遗传编程
遗传编程遗传编程通过模拟“物竞天择,适者生存”的进化思想,基于个体对于环境适应度,通过“自然选择”和“基因变异”方式从父代中迭代生成新的子代种群。我们构建了因子表达式到个体基因之间的映射,以因子绩效为进化目标让种群迭代繁衍以搜索有效的选股指标。
因子表达方面,本文基于树结构构建了表达式到个体基因之间的映射,并以树结构为基础实现了基因间的交叉互换以及变异;数据输入方面,本文以股票30分钟K线数据作为模型输入,其信息量是日频K线的8倍,有效地降低了降频所带来的交易信息损失;适应度方面,我们从信息系数IC、多头超额、分组收益单调评估因子基因的适应度。
挖掘分时K线中的alpha
基于遗传编程算法,本文以2017至2018年数据作为输入挖掘了100个有效的高频因子。利用2019年数据作为样本外测试集合,我们以选股指标covariance(12,amount,high)、sub(close,ts_Mean(8,low))和指标stddev(6,delta(11,log(volume)))为例展示了因子绩效,各因子分组收益单调,ICIR分别达到了-10.98、-7.77和-13.16,在样本外测试中仍然保持稳健选股能力。
100个高频因子间保持较高独立性,两两之间相关系数绝对值均低于0.70,平均值为0.28。从样本内至样本外,因子alpha随时间出现衰减,ICIR均值从8.67下降到7.30,多空IR均值从7.14下降到5.56,但因子整体在样本外仍然保持了显著的选股能力。
1
引言
如果将构建多因子模型类比成烹饪菜肴,选股因子作为原料将对出锅“股票”的好坏起着决定作用。根据交易频率差异,多因子模型所使用选股因子存在明显差别:以月度或季度为持仓周期的低频模型,因子主要来自于基本面财务指标,从盈利、成长、估值、分析师预期等多维度综合评价上市公司;而以隔日为持仓周期的高频alpha模型主要关注股票量价特征,利用趋势跟踪、均值回归、量价相关性等捕捉短期统计套利机会。
多因子模型的运行原理简洁明了且框架也已非常成熟,因此差异化的模型取决于对细节的把控,即捕获所谓“工匠alpha”。对于线性模型而言,我们希望寻找与股票收益呈线性相关的选股指标。良好的选股因子应该是由逻辑驱动而挖掘的,这样才能在实盘确保拥有更强的稳健性。因而低频模型所用选股因子基本以上市公司财务指标为主,模型包含因子数量也较少。从主动管理投资逻辑出发,在财务报表数据中遍历筛选出有效的选股特征集合在计算方面并不复杂。
高频alpha的主要数据来源是股票的量价特征,相较于基本面财务特征具有明显差异。首先,股价日频K线的数据频率是季频财报的20倍,如果涉及到高频分时K线、Tick数据,复杂度将更为庞大;其次,在模型盈利逻辑层面,低频基本面模型更类似于因子投资或者“smart beta”,高频模型则将盈利希望寄托于大数定律所反应的统计规律,其中的规律更加难以归纳总结;最后,相比于低频基本面模型中一般数十个因子的使用量级,日间高频模型所使用的因子可能以成百上千计。
因此,对于初建高频因子库的投资者而言,手工搭建庞大的因子库需要耗费极大的精力;对于已有成熟因子库的投资者,寻找全新逻辑以挖掘增量alpha也将充满挑战。
遗传编程(遗传规划,Genetic Programming)是解决高频因子挖掘的取巧方式之一。遗传编程借助于生物进化的思想,利用遗传算法在量价数据衍生特征集合中进行局部搜索,让种群快速朝着预期的进化方向收敛,其避免了对特征全集进行全局遍历;同时,相比于神经网络等模型,遗传编程可以清晰展示选股因子的逻辑表达式,这让我们对因子投资逻辑的后续验证成为了可能。
以往券商研报中对于遗传规划算法已有介绍,但一般局限于以股票日频、月频K线数据作为输入特征,日内数据中蕴含alpha则被忽略。本文将尝试以股票分时K线作为输入特征,利用遗传规划算法挖掘有效的日频alpha因子。
2
遗传编程
由于难以对量价信息所衍生特征集合进行全局遍历,而手工构建高频因子库面临庞大工程量,因此在本章我们将介绍利用遗传编程挖掘有效的选股指标。
遗传编程(遗传规划,Genetic Programming)通过模拟生物“物竞天择,适者生存”的进化思想,通过种群筛选以及基因变异等方式不断在父代中迭代生成下一代种群。
遗传编程主要包含种群初始化、适应度评估、自然选择、基因交叉变异等步骤:
初始化种群:初始化生成包含一定数量个体的种群;
适应度评估;根据评估标准度量个体的适应度;
自然选择:按照优胜劣汰思想在当前种群中筛选一定数量个体进入下一代;
基因交叉变异:由父代生成子代过程中模仿生物进化过程进行基因交叉互换和基因突变;
不断迭代适应度评估、自然选择以及基因交叉变异的过程生成子代种群,当算法触发设定的停止标准后我们可在种群中挑选出适应度最优的个体集合。
2.1 基因表达
对于遗传编程而言,个体基因的表示是其核心之一。我们将选股因子看作遗传编程算法中的种群个体,那么因子的具体表达式即为个体独有的基因。例如,结合股票日行情数据以及四则表达式我们可构造指标“(open-high)/vwap”,以树形结构可将其简洁地表示如下。
通过树结构,因子基因的交叉与变异也能清晰地展现。在进化中种群中往往存在不同个体间基因的交叉互换以生成新的个体,其原理如下左图所示,树1将子树“vwap”与树2的子树“low-high”交叉互换得到新的树结构“(open-high)/(low-high)”。
而个体自身在进化过程中还存在基因变异,本文所使用变异类型包含点变异、子树变异、Hoist变异。在下右图中展示了点变异,因子树“(open-high)/vwap”的节点“vwap”通过点变异转变为“low”,进而得到新的树结构“(open-high)/low”。
2.2 特征与算子
成交量等就是终结符;另一种是函数符,可以表示运算符或函数操作,例如+,log 等都属于函数符。如前文因子树图中所展示,公式树由特征和算子两部分组成。在本文中,特征是我们输入模型的基础数据,即每只股票所拥有的量价信息。本文用以构建因子的量价数据包含股票在K线图上的开盘价、最高价、最低价、收盘价、均价、成交额、成交量共7类数据类型。
算子即对特征进行运算以产生全新表达的函数,算子通过组合基础特征可产生全新的特征,进而得到更复杂的基因表达。根据类型的差异,不同算子接受参数个数也存在区别。以算子“correlation(n,x,y)”为例,其接受x和y两个参数,其计算了变量x和变量y在过去n天的相关系数;其中正整数n为算子调用过程中自动生成的随机数,x和y为基础特征或经算子操作得到的基因表达式。本文所使用的算子集合如下表所示。
2.3 适应度评估
我们将因子表达式作为个体基因,通过因子表达式可计算具体因子值。因子挖掘的目标是寻找具有显著alpha的选股因子,因此我们通过因子的选股绩效度量个体适应度,进而让因子种群朝着“alpha”的方向进化。
高频因子绩效刻画首先要处理的是高频模型对于撮合价格的敏感性。相较于以往低频选股因子我们简化地以收盘价或者开盘价计算因子收益,但是日间alpha对成交价格非常敏感,实际交易时难以在收盘或开盘的一个时间点完成全部成交,因此本文以股票每日开盘前30分钟均价作为股票的撮合价格。
信息系数IC一般被作为选股因子alpha强弱的度量指标,IC在整体上刻画了因子值与股票未来收益的线性相关性。由于做空机制问题,实际操作中我们更关注因子在多头端的表现,因此我们将因子多头收益也作为适应度评估的一个维度。此外,由于我们以线性模型复合因子,因子分组单调性也将对模型表现产生影响。
综上,我们将个体基因翻译成因子取值,进而综合因子IC、多头收益、分组单调性三个绩效维度评估个体适应度。
2.4 自然选择
3
挖掘分时K线中的alpha
本章我们将以股票的分时K线信息为基础,利用遗传编程算法挖掘分时量价信息中所蕴涵的高频alpha信息。
首先,我们将遗传编程算法看作一个黑箱,模型输出完全依赖于其被投喂的数据,训练数据对结果的影响至关重要。高频因子一般具有较短的迭代周期,如果输入数据的时间跨度过长,所生成因子表达式可能已经不适应最新的市场情境。因此,在每个时间点,我们以最近2年数据作为输入,至于生成因子的迭代周期则需要在算力和需求间综合权衡。
此外,以往券商研报中所涉及的遗传编程一般是基于股票的日频K线进行,日频K线来自于个股逐笔交易信息的日级别降频,其信息损耗非常明显。模型的输入信息量应该在机器算力以及信息损耗之间取最优权衡,本文的输入为股票的30分钟K线数据,其信息量是日频K线的8倍。
最后,为避免模型过度拟合,两年的输入数据被均分成训练集和测试集,我们根据训练集生成因子表达式的同时将在测试集上检验表达式的有效性。最终生成的选股因子在本文中均默认进行行业和市值中性化处理。
以2019-01-01时间点为例,本文展现了基于遗传编程算法的因子挖掘流程以及模型生成的选股因子介绍和列表。以2017年和2018年的股票30分钟K线作为输入,其中2017年数据用于训练生成因子表达式,2018年数据用于测试因子绩效。根据适应度的三个评估维度信息系数IC、多头超额和分组单调性,我们设定筛选阈值为0.03、0.15、0.8后,模型按照如下流程进行迭代 :
根据随机数种子生成符合种群数目的随机数表达式;
从IC、多头收益、分组单调性三维度评估个体适应度;记录各维度都达到阈值个体至因子池;
根据适应度按照轮盘赌法筛选下一代个体,并对个体进行基因交叉互换以及变异等操作,而后转到步骤2;
循环步骤2、3至给定深度后,在因子池中按两两相关性系数阈值剔除高度相关指标得到选股因子集合;
3.1 因子介绍
按照上述流程本文挖掘了100个基于30分钟K线的选股因子,按照相关系数阈值0.7的上限我们在挖掘过程中保证了因子间两两相关系数均在设定的阈值以下。下面展示了部分因子2017年至2019年间的绩效表现,其中前两年为样本内数据,2019年为样本外,因子按次日开盘前30分钟均价买卖股票以计算收益。
3.1.1 covariance(12,amount,high)
covariance(12,amount,high)利用最近12根30分钟k线度量了量、价的协方差。该指标是个反向指标,即量价负相关且波动越大股票在次日拥有更高的相对收益。
因子从2017年以来IC均值为-4.9%,ICIR为10.98,多头超额收益15.6%,多空IR为6.74,信号表现出稳健的选股能力。
covariance(12,amount,high)指标的分组收益以及IC累计值如下图所示,因子单调性良好,IC在样本外仍然保持稳健增长。
3.1.2 sub(close,ts_Mean(8,low))
sub(close,ts_Mean(8,low))是个反转指标,其刻画了日收盘价与最近8根30分钟K线最低价均值间的价差。因子从2017年以来IC均值为-4.9%,ICIR为10.98,多头超额收益15.6%,多空IR为6.74,信号表现出稳健的选股能力。
sub(close,ts_Mean(8,low))指标的分组收益以及IC累计值如下图所示,因子单调性良好,IC在样本外仍然保持稳健增长。
3.1.3 stddev(6,delta(11,log(volume)))
stddev(6,delta(11,log(volume)))指标刻画了成交量变化的波动率,因子从2017年以来IC均值为-3.6%,ICIR为13.16,多头超额收益15.0%,多空IR为8.40。
指标的分组收益以及IC累计值如下图所示,因子单调性良好,IC增长稳健。
3.2 因子分析
根据遗传算法我们挖掘了100个有效的选股指标,样本内区间为2017年和2018年,样本外检验区间为2019。
我们所挖掘的100个因子间整体保持较高独立性。相关系数热力图以及分布图如下所示,因子间两两相关性较低,相关系数绝对均值为0.28。
此外,我们对比本中的高频因子与常见低频选股因子间的相关系数,如下图所示。左图中横轴是高频因子,纵轴是低频因子,可以看出二者间相关性基本在0附近波动。高、低频因子之间相关系数绝对值均值如右图所示,各低频因子与高频因子的平均相关性均在20%以下。
由于2017至2018年为样本内数据,因此我们以2019年为样本外对比因子在样本内外的绩效表现。因子ICIR前后变化如下所示,在样本外ICIR出现一定程度下滑,ICIR均值从8.67下降到7.30,中位数从8.34下降到6.59。但从ICIR维度评估,因子在样本外仍然保持着显著的选股能力。
类似的,因子在样本内外多空收益IR对比图如下所示。因子多空IR整体在样本外出现一定程度下滑,平均值从7.14下降到5.56,中位数从7.02下降到5.65。但从多空IR维度评估,因子在样本外仍然保持着显著的选股能力。
本文所挖掘的100个基于30分时K线的高频因子表达式如下表所示,其中open、high、low、close、和vwap分别为股票K线的开高低收和均价,volume、amount为成交数量和金额,算子定义如前文。
4
总结
高频选股因子与低频因子具有较大的差异。以月、季为持仓周期的低频选股因子主要来自于财务指标,其从盈利、成长、估值等维度综合评估上市公司;而以日为持仓周期的高频因子主要从股票量价信息中衍生而得。
高频因子挖掘与低频因子相比更显复杂和神秘。相比于低频基本面因子的挖掘由主动管理的投资逻辑所驱动,高频因子的挖掘更倾向于由数据所驱动。而股票交易产生的量价数据频率远高于财务信息,通过遍历量价衍生指标以筛选因子并非易事。
本文中,我们介绍了如何利用遗传编程算法高效地挖掘高频选股因子。遗传编程通过模拟“物竞天择,适者生存”的进化思想,基于个体对于环境适应度,通过“自然选择”和“基因变异”方式从父代中迭代生成新的子代种群。我们构建因子表达到个体基因之间的映射,以因子绩效为进化目标让种群迭代繁衍以搜索有效的选股指标。
因子表达方面,本文基于树结构构建了因子表达到个体基因之间的映射,并以树结构为基准实现了基因间的交叉互换以及变异;数据输入方面,本文以股票30分钟K线数据作为模型输入,其信息量是日频K线的8倍,有效地降低了降频所带来的交易信息损失;适应度方面,我们从信息系数IC、多头超额、分组收益单调评估因子基因的适应度。
基于遗传编程算法,本文以2017至2018年数据作为输入挖掘了100个有效的高频因子。利用2019年数据作为样本外测试集合,我们以指标covariance(12,amount,high)、sub(close,ts_Mean(8,low))和stddev(6,delta(11,log(volume)))为例展示了因子绩效,各因子分组收益单调,ICIR分别达到了-10.98、-7.77和-13.16,在样本外测试中仍然保持稳健选股能力。
100个因子间保持较高独立性,两两相关系数绝对值均低于0.70,平均值为0.28。对比因子在样本内至样本外绩效,因子集合ICIR均值从8.67下降到7.30,多空IR均值从7.14下降到5.56,因子alpha随时间出现衰减,但仍然保持了显著的选股能力。
相关报告
《市场微观结构探析系列之二:订单簿上的alpha》2019-09-05
多因子选股系列报告