![中国期货市场量化交易(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=1739671847-7DcUeGjUbqeCMfGTNkUUVsqMGDtuYdlW-0-6eb9d7b28bb3bedc9e9deea9bbff93ea)
足足有160多万个样本,由此可见分笔数据的训练量是非常大的。我们可以挑选其中几个因子来看。
3.3.1 基于买卖挂单量的因子
这是高频数据比较独特的地方,它对买卖盘口比较依赖,因此很多时候可以考虑用挂单量来构造因子。比如:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32375.jpg?sign=1739671847-vmhlnnBdDUUNlMYnB759KrV82Stxg43O-0-5ccea1216d0649b586711f87e7a737dd)
由于数据庞大,我们按照每10万数据量一组,计算各组的指标与因变量的相关系数,如图3-8所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32377.jpg?sign=1739671847-8Xty3LlkRQw1XSNXoETz0CtM0NNcpEBn-0-794c1958865a32cf07f82a9820cc1bd9)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P71_32378.jpg?sign=1739671847-nquy7xVnRIhXSy3VdTEBL6E7JI1ienrO-0-713f9ebe4610d195df76a9c96de82073)
图3-8 挂单量因子相关性
由图3-8可见,相关系数在5%~11%,基本保持正相关性,还是非常稳定的。
3.3.2 基于成交量的因子
第二类是基于成交量的因子,我们也选取了其中一个:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_146927.jpg?sign=1739671847-rPbfjdd5oKMAYiMEnUJDFjz8Syzy8sse-0-7d038145a43a33530b9809c46a25be22)
这是衡量主动买量与主动卖量对比的因子,我们可以看看它的表现,如图3-9所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_146958.jpg?sign=1739671847-3NKJ9MCL7jK7v3FmbO9Aw7242Nnpkt21-0-3a2956ef64764455d49c57697269f440)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P72_32835.jpg?sign=1739671847-Re5ZDxmJqmU2XUJlB0u3CN5Wk3iWbWYS-0-26b5741d8abedd5fb07ddf4c0a8a41c2)
图3-9 成交量因子相关性
由图3-9可知该因子在最近的行情中略有上升,整体也是正相关,但没有基于挂单量的因子表现好。一般来说基于挂单量的因子有最强的预测力,但预测出来的波动并不大。
3.3.3 基于价格变化的因子
对于中低频来说最常见的因子都是基于价格变化的,高频也可以用这类因子,比如最简单的基于指数加权平均线的因子。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33281.jpg?sign=1739671847-aTzIL8YN5ixVH8fP7z5K7cYbIbMJebnr-0-948dd50b37fecd2b7e08792e3c20329c)
可以看看这个因子的效果,如图3-10所示。
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33283.jpg?sign=1739671847-NPASKUqjCIfPCDm56t05LvPur4qRM1Pj-0-80134bdbc5930ac57cd9e67afda5ef9e)
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P73_33284.jpg?sign=1739671847-FdICR5qbejqZg1yTKIwGbrH2MZM4YGSt-0-473c60a331979f626e5f31b35b0eed06)
图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=1739671847-vpRzpkgMa7MBxapxV3YXJfiaxSXjehtW-0-20bdfe0eb662c2d312a8a83e6f4faf1a)
图3-11 高频模型拟合优度
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146959.jpg?sign=1739671847-lQ8ArLTRDwWMDmNGdWbFpA9Y3vB4SUmJ-0-a143a2f4b9c544a3dfcc80cd818c1e3f)
由图3-11可以看出,最佳的是第66个模型。下面我们用这个模型来预测第41~100天:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146930.jpg?sign=1739671847-HfEqRca1O1TdxfzNw7BFyEJHZRdsiWvU-0-e1911159da13aa0f4f6d3b6f610c0cf4)
系数的数目还是11个,由此可见所有因子都得以保留,我们可以考查一下样本内外的拟合优度:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146960.jpg?sign=1739671847-w537GfwOCauw2TN7xj15XQniLgvdsPMk-0-7f98eb1e75206814f2930401d690ab9b)
可见样本内是0.017左右,样本外是0.011左右,样本外会比样本内差一些。事实上,很多时候并不一定选样本内交叉验证最好的模型,也可以选一些次优模型,这样的话在样本外或许会有更佳的表现,比如我们随机抽取一个次优的模型best=40:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P74_146961.jpg?sign=1739671847-5EKQnRWDLEixi15Caewvv43dlDOcjK0W-0-7d2c24c6fb8aa62f9d0baeeadb094236)
这时样本内降低为0.015 1,但样本外提高至0.013 8,这样就比较接近了,而注意到此时模型因子的数目为9,比之前少了一些,同时起到了筛选因子的作用。进一步地,如果我们选择best=35的模型,则有:
![](https://epubservercos.yuewen.com/AF9953/15253384704104806/epubprivate/OEBPS/Images/Figure-P75_34306.jpg?sign=1739671847-Ri1hivduK96VD00VcLb7SMCYUeRW9Vwo-0-1a5fdff4d5e8e07a60b3c4a17dc17310)
这时样本内数据是0.0139,样本外数据是0.0141(平均值),样本外数据甚至比样本内数据还好,这说明降低模型复杂度之后,模型在样本内的拟合程度下降了,但是在样本外的预测能力提升了。
3.3.5 对R2的理解
如果是这类分笔数据建模,预测时间也只有未来几十个tick的话,那么R2一般都会是正数。R2取值较低的原因一般是行情急剧暴涨暴跌,其实也不难理解,这种情况下人工也无法判断,或者是由于“乌龙指”使然,完全在模型预料之外,因此预测值会很低。
其它情况下,对于价格低位震荡时,R2会比较高,因为此时价格波动一跳都比较困难,整体y的取值变化不大,因此也更容易预测。但要注意的是哪怕预测得十分准确也无法赚钱,因为价格波动实在太小,无法覆盖手续费和滑点等成本。对于价格波动幅度稍大的情况,R2会略低一些,但是由于波动幅度可以覆盖手续费和滑点,因此这时候盈利也是可能的。
由此可见,现实中R2高不一定就盈利高,只能说在同一段行情下,样本外的R2是越高越好。