![中国期货市场量化交易(R与C++版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/517/26793517/b_26793517.jpg)
3.3 高频因子
高频因子指基于分笔数据的因子,国内是指基于500毫秒截面数据的因子,这类因子一般会用到买卖价格和挂单量,即盘口信息。一般来说,可以分为三种因子:基于买卖挂单量的因子、基于成交量和基于价格变化的因子。另外,如果有5档行情,还可以开发基于深度行情的因子。
我们拿螺纹钢2016年11月17日至2017年6月30日一共150个交易日的日内分笔数据作为例子来分析。高频因子分析的一个特点是计算量和存储量都特别巨大,耗时比较长。简单起见,我们只选取了少数几个因子来分析。
我们先选取前面40天的数据,一共11个因子,加上因变量y,一共12个。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_146926.jpg?sign=1739687563-iu0zeUsRZhfvW6EZ3a7wvIOOsfwqkA9D-0-7ec240d65fe669fe9e5c160ea73b60b6)
足足有160多万个样本,由此可见分笔数据的训练量是非常大的。我们可以挑选其中几个因子来看。
3.3.1 基于买卖挂单量的因子
这是高频数据比较独特的地方,它对买卖盘口比较依赖,因此很多时候可以考虑用挂单量来构造因子。比如:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32375.jpg?sign=1739687563-6dvVWGiaMKEASGYWfD6oLaGTjzpU6Y7T-0-2955d177824ee6d6041a0a0e49c7e6de)
由于数据庞大,我们按照每10万数据量一组,计算各组的指标与因变量的相关系数,如图3-8所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32377.jpg?sign=1739687563-2JqJa7TY6Lq5TSUvTp4IA2UpxwoPEhbL-0-f14d9143a4900bbf08f138c30da3164a)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32378.jpg?sign=1739687563-rtXb20SfqkeVYUk8jjo1SbFXhEXTzMbT-0-a2e287dec6fa475bff20eacd3a4cb4a6)
图3-8 挂单量因子相关性
由图3-8可见,相关系数在5%~11%,基本保持正相关性,还是非常稳定的。
3.3.2 基于成交量的因子
第二类是基于成交量的因子,我们也选取了其中一个:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_146927.jpg?sign=1739687563-5IDMykAq0R7vGOCscxCBxpmCRZOnASeA-0-bec21275c177afe1e35bf18ae0c35710)
这是衡量主动买量与主动卖量对比的因子,我们可以看看它的表现,如图3-9所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_146958.jpg?sign=1739687563-kgzoGWGHUZ0Z2K2pxgokerkN7T6sLYT4-0-6b483934fea34956c4c8f55088aec6e4)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_32835.jpg?sign=1739687563-OzhZg8KUTso8LmiRJXdxBjQdqApfhq8h-0-0ef0d666c0451d5e75b306b84d941ade)
图3-9 成交量因子相关性
由图3-9可知该因子在最近的行情中略有上升,整体也是正相关,但没有基于挂单量的因子表现好。一般来说基于挂单量的因子有最强的预测力,但预测出来的波动并不大。
3.3.3 基于价格变化的因子
对于中低频来说最常见的因子都是基于价格变化的,高频也可以用这类因子,比如最简单的基于指数加权平均线的因子。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33281.jpg?sign=1739687563-2fhzm3DoUdsXK3VkpcMn1d4NnKsezZZj-0-8cb4731dd4bba1d6b612799aa141d504)
可以看看这个因子的效果,如图3-10所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33283.jpg?sign=1739687563-Hi428dbey8ZefL7aVdqdNb2juBwbAbxf-0-1e73d1328ec74d084cb48e0ecd4bf4d3)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33284.jpg?sign=1739687563-kMcMgg2TcDEES4ry7JUoPUpGvGzB1lyc-0-0d793a530d367925b337afad4868e418)
图3-10 价格因子相关性
由图3-10可见这是一个负相关的因子,其实无论是正相关还是负相关对结果并没有什么影响,加入一个负号即可改变。
3.3.4 多因子预测模型
现在,我们给出一个多因子的预测模型。我们用40天的数据进行交叉验证来建模——即每10天的数据为一组,一共4组,每次预留一组作为验证集,然后其他3组作为训练集,这样一来我们可以获得40天的交叉验证结果,如图3-11所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33290.jpg?sign=1739687563-Mu6npiJm4jyRQYmUyk5HTIAY4Jrv2jjt-0-7ce1fec4d68103062197f522558864d4)
图3-11 高频模型拟合优度
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146959.jpg?sign=1739687563-gYrla4JhsRZV8AXSxcF9RHBYBMObxH3n-0-dc90954b0ed141236d21e12d362ff22a)
由图3-11可以看出,最佳的是第66个模型。下面我们用这个模型来预测第41~100天:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146930.jpg?sign=1739687563-1STbGnpYLy0PryQRQViRdusozsdShV2y-0-754f71c76a61432b30c58f98bb833c3a)
系数的数目还是11个,由此可见所有因子都得以保留,我们可以考查一下样本内外的拟合优度:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146960.jpg?sign=1739687563-lCODmnmXXkAG7IQLw3JhUKTpwvEknNZs-0-5a99db6b003bc272fb1ce5bd87002280)
可见样本内是0.017左右,样本外是0.011左右,样本外会比样本内差一些。事实上,很多时候并不一定选样本内交叉验证最好的模型,也可以选一些次优模型,这样的话在样本外或许会有更佳的表现,比如我们随机抽取一个次优的模型best=40:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146961.jpg?sign=1739687563-uY46ul9sUHfdxpQgbBVi9m2XFqphc8ny-0-001ebc82653052c04b83625750f0928e)
这时样本内降低为0.015 1,但样本外提高至0.013 8,这样就比较接近了,而注意到此时模型因子的数目为9,比之前少了一些,同时起到了筛选因子的作用。进一步地,如果我们选择best=35的模型,则有:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P75_34306.jpg?sign=1739687563-3ldxeX0cOsZvmM0UICAlgQGldERZDAOU-0-abaaaffe51771fba01a8e84e6ee3f73d)
这时样本内数据是0.0139,样本外数据是0.0141(平均值),样本外数据甚至比样本内数据还好,这说明降低模型复杂度之后,模型在样本内的拟合程度下降了,但是在样本外的预测能力提升了。
3.3.5 对R2的理解
如果是这类分笔数据建模,预测时间也只有未来几十个tick的话,那么R2一般都会是正数。R2取值较低的原因一般是行情急剧暴涨暴跌,其实也不难理解,这种情况下人工也无法判断,或者是由于“乌龙指”使然,完全在模型预料之外,因此预测值会很低。
其它情况下,对于价格低位震荡时,R2会比较高,因为此时价格波动一跳都比较困难,整体y的取值变化不大,因此也更容易预测。但要注意的是哪怕预测得十分准确也无法赚钱,因为价格波动实在太小,无法覆盖手续费和滑点等成本。对于价格波动幅度稍大的情况,R2会略低一些,但是由于波动幅度可以覆盖手续费和滑点,因此这时候盈利也是可能的。
由此可见,现实中R2高不一定就盈利高,只能说在同一段行情下,样本外的R2是越高越好。