
3.3 高频因子
高频因子指基于分笔数据的因子,国内是指基于500毫秒截面数据的因子,这类因子一般会用到买卖价格和挂单量,即盘口信息。一般来说,可以分为三种因子:基于买卖挂单量的因子、基于成交量和基于价格变化的因子。另外,如果有5档行情,还可以开发基于深度行情的因子。
我们拿螺纹钢2016年11月17日至2017年6月30日一共150个交易日的日内分笔数据作为例子来分析。高频因子分析的一个特点是计算量和存储量都特别巨大,耗时比较长。简单起见,我们只选取了少数几个因子来分析。
我们先选取前面40天的数据,一共11个因子,加上因变量y,一共12个。

足足有160多万个样本,由此可见分笔数据的训练量是非常大的。我们可以挑选其中几个因子来看。
3.3.1 基于买卖挂单量的因子
这是高频数据比较独特的地方,它对买卖盘口比较依赖,因此很多时候可以考虑用挂单量来构造因子。比如:

由于数据庞大,我们按照每10万数据量一组,计算各组的指标与因变量的相关系数,如图3-8所示。


图3-8 挂单量因子相关性
由图3-8可见,相关系数在5%~11%,基本保持正相关性,还是非常稳定的。
3.3.2 基于成交量的因子
第二类是基于成交量的因子,我们也选取了其中一个:

这是衡量主动买量与主动卖量对比的因子,我们可以看看它的表现,如图3-9所示。


图3-9 成交量因子相关性
由图3-9可知该因子在最近的行情中略有上升,整体也是正相关,但没有基于挂单量的因子表现好。一般来说基于挂单量的因子有最强的预测力,但预测出来的波动并不大。
3.3.3 基于价格变化的因子
对于中低频来说最常见的因子都是基于价格变化的,高频也可以用这类因子,比如最简单的基于指数加权平均线的因子。

可以看看这个因子的效果,如图3-10所示。


图3-10 价格因子相关性
由图3-10可见这是一个负相关的因子,其实无论是正相关还是负相关对结果并没有什么影响,加入一个负号即可改变。
3.3.4 多因子预测模型
现在,我们给出一个多因子的预测模型。我们用40天的数据进行交叉验证来建模——即每10天的数据为一组,一共4组,每次预留一组作为验证集,然后其他3组作为训练集,这样一来我们可以获得40天的交叉验证结果,如图3-11所示。

图3-11 高频模型拟合优度

由图3-11可以看出,最佳的是第66个模型。下面我们用这个模型来预测第41~100天:

系数的数目还是11个,由此可见所有因子都得以保留,我们可以考查一下样本内外的拟合优度:

可见样本内是0.017左右,样本外是0.011左右,样本外会比样本内差一些。事实上,很多时候并不一定选样本内交叉验证最好的模型,也可以选一些次优模型,这样的话在样本外或许会有更佳的表现,比如我们随机抽取一个次优的模型best=40:

这时样本内降低为0.015 1,但样本外提高至0.013 8,这样就比较接近了,而注意到此时模型因子的数目为9,比之前少了一些,同时起到了筛选因子的作用。进一步地,如果我们选择best=35的模型,则有:

这时样本内数据是0.0139,样本外数据是0.0141(平均值),样本外数据甚至比样本内数据还好,这说明降低模型复杂度之后,模型在样本内的拟合程度下降了,但是在样本外的预测能力提升了。
3.3.5 对R2的理解
如果是这类分笔数据建模,预测时间也只有未来几十个tick的话,那么R2一般都会是正数。R2取值较低的原因一般是行情急剧暴涨暴跌,其实也不难理解,这种情况下人工也无法判断,或者是由于“乌龙指”使然,完全在模型预料之外,因此预测值会很低。
其它情况下,对于价格低位震荡时,R2会比较高,因为此时价格波动一跳都比较困难,整体y的取值变化不大,因此也更容易预测。但要注意的是哪怕预测得十分准确也无法赚钱,因为价格波动实在太小,无法覆盖手续费和滑点等成本。对于价格波动幅度稍大的情况,R2会略低一些,但是由于波动幅度可以覆盖手续费和滑点,因此这时候盈利也是可能的。
由此可见,现实中R2高不一定就盈利高,只能说在同一段行情下,样本外的R2是越高越好。