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