股价日内模式中蕴藏的选股因子
研究目的
本文参考方正证券研报《凤鸣朝阳:股价日内模式中蕴藏的选股因子》,根据研报分析,由于隔夜时段的交易暂停,每个交易日开盘后,市场累积的大量私有信息,将通过交易迅速得到释放,知情交易概率在日内呈现快速下降的态势。上午知情交易的成分较高,因而个股的价格行为个性较足,相关性较低;下午知情交易逐渐退去,因而个股的价格行为更多呈现了随波逐流的状态,越发向市场平均靠拢。
根据此结论,本文对研报里面的结果进行了分析,并对股票价格日内模式进行了研究,从其中提取出 alpha 因子,从而实现对股票未来收益的预测,为 alpha 因子在日内高频数据中的挖掘提供了一定思路。
研究内容
(1)研究在日内高频数据中挖掘 alpha 因子,通过研究发现日内上午的价格比下午的价格行为隐藏着更丰富的信息,通过测算股价行为上午与下午的差异,构建统计量 stat。
(2)考虑到构建的统计量 stat 与股票过去 20 日收益率具有强相关性,为了避免其影响,采用回归的方法,计算残差,并将其命名为 APM 因子,并通过分层回测、多空组合等多种方式分析因子的有效性。
(3)进一步分析 APM 因子与市值之间的关系,然后计算市值行业中性化处理后的因子数据,并根据其进行分层回测、多空组合,从而分析因子的有效性。
研究结论
(1)在股价日内模式的研究中发现:交易日上午的价格行为,较之于下午的价格行为,蕴藏了更多可用于选股的信息量。知情交易者更加倾向于在每日上午进行交易,因此上午的股价涨跌更加能够反映知情交易者的多空态度。
(2)本文以全市场股票池为标的,剔除停牌股、ST 股以及上市不足 3 个月的股票,通过测算股价行为上午与下午的差异,构建了用于选股的 APM 因子。因子值越小,表示知情交易者越倾向于做多; 因子值越大,则表示知情交易者越倾向于做空。
(3)根据 APM 因子对所有 A 股进行排序并等分五组,多空对冲组合的多空对冲净值的收益指标值,年化收益为 9.89%,期间最大回撤为 5.34%,夏普比率为 0.98,年化收益波动率为 5.98%,显示出较强的选股能力。
(4)考虑到 APM 因子与市值因子具有较强的相关性,因此考虑通过多元线性回归的方式,进行行业市值中性化处理,通过处理后的数据进行选股,对所有 A 股进行排序并等分五组,多空对冲组合的年化收益为 10.99%,期间最大回撤为 4.26%,夏普比率为 1.52,年化收益波动率为 4.59%,与原始 APM 因子相比不仅收益能力更强,且对风险的控制做的更好。
研究耗时
(1)数据准备部分:大约需要 1.5h,主要出现在数据采集部分,为了避免程序耗时过长,已将数据提前运行出来,下载地址:https://pan.baidu.com/s/1zuyqM_PABP4M5AvkOF1hfQ
(2)模型测试部分:包含 APM 因子的 5 层分层回测及多空组合,经过市值行业中性化后的因子的 5 层分层回测及多空组合,大约需要 30min,主要回测组合较多,且每个组合每次调仓股票数量较多,导致运行速度较慢。
数据准备
1.1 日期列表获取
在每个月的月末对因子数据进行提取,因此需要对每个月的月末日期进行统计。
输入参数分别为 peroid、start_date 和 end_date,其中peroid进行周期选择,可选周期为周(W)、月(M)和季(Q),start_date和end_date分别为开始日期和结束日期。
函数返回值为对应的月末日期。本文选取开始日期为 2013.1.1,结束日期为 2017.1.1。
1.2 股票列表获取
股票池: 全 A 股
股票筛选:剔除 ST 股票,剔除上市 3 个月内的股票,每只股票视作一个样本
以 HS300 为例,取 2016-08-31 当天的股票成分股
1.3 数据获取
对于特定的股票、最近的 N 个交易日,记逐日上午的股票收益率为r(上标am,下标t),指数收益率为R(上标am,下标t); 逐日下午的股票收益率为r(上标pm,下标t),指数收益R(上标pm,下标t)。其中,N=20, t=1,2,...,20。
获取 2013.1.1-2017.1.1 每个交易日的上午收益率及下午收益率数据,并保存在文件 factor_pchg.pkl 中。
特征数据经过预处理后,为了方便后续对数据进行处理,将数据保存为 pkl 文件。读取文件,文件格式如下所示:数据类型为 dict,key 为日期,value为每一期对应的数据,格式为 dataframe,index 为日期时间列表,其中 11:30 表示上午的收益率,15:00 表示为下午的收益率,columns 为股票列表。
注:可直接将pkl文件上传至研究环境,进行数据读取。
数据分析
2.1 统计量 stat 与动量因子
统计量 stat
为了将股票上午收益率数据与下午收益率数据结合,本文采用研报的方法构建统计量,具体计算方式如下所示:
(1)将上午与下午的数据汇总,共有 40 组(r,R)的收益率数据, 按照以下式子进行回归:
其中,α 为常数项,β 为斜率项,ϵi为残差,i=1,2,...,40。
(2)以上得到的 40 个残差 ϵi中,属于上午的记为ϵ(上标am,下标t),属于下午的记为ϵ(上标pm,下标t),其中 t=1,2,...,20。计算每日上午与下午残差的差值:
(3)为了衡量上午与下午残差的差异程度,我们设计了统计量 stat,计算公式如下:
其中,μ 为均值,σ 为标准差,N=20。总的来说,统计量 stat 反映了剔除市场影响后股价行为上午与下午的差异度。stat 数值小 (大)于 0 越多,则股票在上午的表现越好(差)于下午。
动量因子
本文取股票过去 20 日的收益率作为动量因子,旨在分析统计量与动量因子之间的关系。
2.1.1 散点图
上图以 2016 年 8 月底计算的因子为例,给出了所有股票的统计量 stat 与动量因子(20 日收益)的散点图,横轴为 stat 值,纵轴为股票过去20日的收益率。由图可以看出,散点比较集中,可近似得拟合出一条直线,可见统计量 stat 与动量因子存在强相关的关系。为了进一步分析统计量stat与动量因子的相关性,下文对其进行具体分析。
2.1.2 统计量 stat 与动量因子的相关系数
上图给出了统计量 stat 与动量因子的逐月的相关系数,在 2013-2017 这 48 个月中,所有月份的相关系数超过 0.1,有 42 个月的相关系数超过 0.2,由此可见,统计量 stat 与动量因子之间相关性在大部分的时间都比较高,两个因子之间具有强相关性。
2.2 APM 因子的数值分布
2.2.1 APM 因子构建
为了消除与动量因子的纠缠,我们将统计量 stat 对动量因子进行横截面回归:
其中,Ret20 为股票过去 20 日的收益率,代表动量因子。我们将回归得到的残差值 ε 作为最终的选股因子,命名为 APM 因子。
2.2.2 APM 因子 RankIC 的月度序列
在每个月的最后一个交易日,我们取所有股票最近20个交易日的行情数据,计算每只股票的 APM 因子。下图给出了每个月因子值与次月收益的秩相关系数 (RankIC),因子的 IC 值一般是指个股第 T 期在因子上的暴露度与 T+1 期的收益率的相关系数,RankIC 指因子的排序结果与 T+1 期的排序结果的相关系数。
由上图可以看出,在 2013-2018 年共 5 年 60 个月中,显著为正的有 18 个月,显著为负的有 42 个月。总体上倾向于负相关,即: 当月因子值越小,次月收益的期望值越高。形象地讲,APM 因子的数值越小,意味着知情交易者越倾向于做多; 反之,APM 因子的数值越大,则表示知情交易者越倾向于做空。
为了在策略环境中更方便地调用数据,在每个截面期对 APM 因子按照从小到大的顺序进行排序,将结果保存在 apm.pkl 文件中。
策略构建
本节重点考察 APM 因子的选股能力,即通过计算股票 APM 因子值,实现对股票的筛选。
全市场成份股:剔除 ST、停牌、上市时间 <3 个月的股票
回测时间:2013-01-01 至 2017-01-01
调仓期:每月第一个交易日
选股:
(1)每个月第一个交易日计算 APM 因子值
(2)对 APM 因子值根据从小到大的顺序进行排序,并将其等分为 5 组
(3)每个调仓日对每组股票池进行调仓交易,从而获得 5 组股票组合的收益曲线
评价方法:回测年化收益率、夏普比率、最大回撤、胜率等。
回测年化收益率: 年化收益率通常指投资一年后能够获得的收益率,由于回测时间的长短,往往会由于复利的影响导致长时间的总收益率更大,此时可通过年化收益率衡量模型的收益能力。
夏普比率: 目的是计算投资组合每承受一单位总风险,会产生多少的超额报酬。
最大回撤: 最大回撤是指模型在过去的某一段时间可能出现的最大亏损程度,通常用来衡量模型的风险。在实际投资中,若是出现最大回撤较大的情况,往往会导致投资者对模型丧失信心,因此合理控制模型的最大回撤显得尤为重要。
3.1 分层回测策略模型收益指标
3.2 分层回测净值
为了进一步更直观的对 5 个组合进行分析,绘制了 5 个组合及 HS300 基准的净值收益曲线,具体下图所示。
由图可以看出,组合1能够明显跑赢组合5,且每个组合都能够跑赢HS300指数,且组合 1 能够吗明显获得更高的收益。可见符合单因子有效性的检验,即证明 APM 因子是有效的。
3.3 模型策略组合回测分析表
上面几张表分析了每个投资组合的评价指标,根据年化收益、年化波动率、夏普比率及最大回撤分析,组合 1 的效果要远远好于组合 5,且基本上满足随着组合数的递增,收益能力下降且风险控制能力下降的趋势,由此符合单因子有效性的检验。
3.4 多空组合净值
从分层组合回测净值曲线图来看,每个组合波动性较大,策略存在较大的风险,因此考虑建立多空组合。多空组合是买入组合 1、卖空组合 5 (月度调仓)的一个资产组合,为了方便统计,多空组合每日收益率为(组合 1 每日收益率 - 组合 5 每日收益率)/2,然后获得多空组合的净值收益曲线,如图所示,多空组合净值收益曲线明显比任何一个组合的波动性更低,能够获得更为稳定的收益,风险控制效果较好。
下面给出了多空对冲净值的收益指标值,年化收益为 9.89%,期间最大回撤为 5.34%,夏普比率为 0.98,年化收益波动率为 5.98%。以上结果表明,APM 因子本身具有较强的选股能力。
APM 因子的风险特征
本小节我们重点关注 APM 因子与常见因子的关联性。根据前文的定义方式,APM 因子与动量因子之间不相关。下面给出了按照 APM 因子排序分组后各组的市值百分位分布特征。
由上图可以看出,组合 1 所筛选出来的股票组合市值百分位的均值及中位数均要小于其他组合,且从组合 1 到组合 5 来看,市值百分位均值及中位数均呈现“逐渐降低”的特点,由此可见该因子与市值密切相关。
4.1 策略构建
为了考察 APM 因子自身的收益特征,我们通过横截面回归取残差的方式,对市值、行业等因子进行剔除。横截面回归模型如下:
其中,LogMktVal 为股票的对数流通市值,Ind 为申万一级行业哑变量,ε 为残差因子。
策略步骤:
(1)根据公式,将 APM 因子值作为因变量,对数流通市值以及申万一级行业因子作为自变量,进行多元线性回归,将计算得到的残差数据作为新的因子
(2)将新的因子按照从小到大的顺序排序,并将其等分为 5 组
(3)每个调仓日对每组股票池进行调仓交易,从而获得 5 组股票组合的收益曲线
评价方法: 回测年化收益率、夏普比率、最大回撤、胜率等。
4.2 分层回测策略模型收益指标
4.3 分层回测净值
为了进一步更直观的对 5 个组合进行分析,绘制了 5 个组合及 HS300 基准的净值收益曲线,具体下图所示。
由图可以看出,组合 1 能够明显跑赢组合 5,且每个组合都能够跑赢 HS300 指数,且组合 1 能够吗明显获得更高的收益。可见符合单因子有效性的检验,即证明经过对数流通市值以及申万一级行业调整后的 APM 因子是有效的。
4.4 剔除市值因子、行业因子后的多空对冲收益
下面给出了按照残差因子排序分五组的多空对冲净值,年化收益为 10.99%,期间最大回撤为 4.26%,夏普比率为 1.52,年化收益波动率为 4.59%。以上结果表明,经过对数流通市值以及申万一级行业调整后的 APM 因子本身具有较强的选股能力。
总结
以上我们对 APM 因子进行了有效性分析的具体测试,初步得到以下几个结论:
(1)通过对日内上午收益率、下午收益率的分析,构建统计量 stat,分析发现该统计量与动量因子具有较强相关性,因此通过回归取残差的方法构建 APM 因子。
(2)以 2013-2017 年为分析周期,研究了 APM 因子的有效性,通过 5 层分层回测及多空组合分析,其分层回测结果表明 5 个组合的收益曲线层次分明,组合 1 很明显能够跑赢其他组合及大盘,多空组合的年化收益为 9.89%,期间最大回撤为 5.34%,夏普比率为 0.98,年化收益波动率为 5.98%,可见 APM 因子在选股中具有较强的有效性。
(3)分析发现 APM 因子与市值具有较强的相关性,因子对 APM 因子进行市值行业中性化处理,根据处理后的记过进行分层回测及多空组合,多空对冲组合的年化收益为 10.99%,期间最大回撤为 4.26%,夏普比率为 1.52,年化收益波动率为 4.59%,与原始 APM 因子相比不仅收益能力更强,且对风险的控制做的更好。
(4)本文思路为因子有效性分析提供了一个很好地思路,也为日内高频数据分析提供了方向。