这篇文章的名字叫高频因子没有秘密,一是因为orderbook上每个因子的逻辑都很清晰,解释性很强,二是因为在很短的时间窗口内,影响价格变动的因素是有限的。
我们拿到的高频数据主要有两种形式,一是像商品期货上固定时间间隔的切片数据,这种数据是对行情的抓拍,你看不到交易明细,只能看到每隔500ms的快照数据:二是像数字货币这种逐笔数据,这种数据记录了每一笔成交,每一次orderbook上的报价变动,是最为细致的高频数据:和其他因子的开发流程一样,高频因子的开发也分三步走:3.评估品种的特性,判断这个因子适不适合用在这个品种上今天写2个经典的高频因子。第一个是订单簿不平衡,这是个最常见的高频因子,它的逻辑是找到订单簿哪一侧的阻力更小,价格会朝着阻力更小的那一侧运动。一般来说某一侧的挂单量越多,这一侧就越能承载市场的冲击,也就是说越不容易被打穿。而挂单量显著少的那一侧,会有更大的可能性被吃掉,然后推动价格的变化。现在我们来设计这个因子,记得前面说过因子的设计要秉承一个原则,就是这个因子一定要和未来收益率挂钩🪝,所以我们不能只计算一侧的挂单厚度,要考虑ask和bid力量的强弱对比。我们考虑盘口一档的挂单量,计算bid挂单量减ask挂单量占总挂单量的比重,这个比重越大,说明bid挂单量越多,价格越容易上涨:a = (df['bid_volume_1'] - df['ask_volume_1'])
b = (df['bid_volume_1'] + df['ask_volume_1'])
imb = a/b
在下面这个orderbook中,只考虑一档挂单量,计算订单薄不平衡因子:(38.7828–19.1463)/(38.7828+19.1463) ≈ 0.33.但是一档数据的信息量太有限了。在medium这篇文章中:https://towardsdatascience.com/price-impact-of-order-book-imbalance-in-cryptocurrency-markets-bf39695246f6作者分析了ETH的订单薄数据,他得出了很合乎直觉的结论,那就是考虑的订单薄层数越多,订单薄不平衡和未来的收益率相关性越高。很多orderbook上的因子,虽然它们的构造各异,但是它们都描述了一个东西:订单簿的不平衡。比如计算两侧bid和ask的挂单总金额对比,计算两档的挂单价格重心位置,计算加权平均价离mid price的距离等等等等,异曲而同工。第二个因子定义了成交量和收益率的相关性,这个因子定义了单位收益率需要多少成交量来推动,这不是一个严格意义上的OrderBook因子,但确实是一个非常有用的因子。
很多主观盘手会结合量价来看盘面,成交量上升,价格上涨是一种常见的形态。但「温和的放量」和「过大的放量」是非常不同的,「过大的放量」说明单位涨幅需要更多的成交量来推动,原来上涨1%只需要50手,现在要100手,背后说明持有筹码的卖方有强烈的卖出意愿,买方需要用更大的资金去推动上涨。同样的涨幅下,右图中单位成交量对价格的推动力度更大,未来股价更倾向于上涨:高频上的因子总结起来不外乎几类:订单薄不平衡(哪一侧的订单薄更容易被打穿)、成交单子的特征(主买主卖和大小单)、订单薄上的价格压力和支撑位、收益率和量价的联动关系等,每一个因子背后的逻辑都很清晰。高频因子没有秘密,这一点是我做高频因子的设计和回测以来的最大感受。几乎每一个订单簿上的因子,都是可以通过直觉理解透彻的,找到它们不难,重点是怎样利用这些因子,或者对它们做降频处理,用到更低频的策略上,或者用它们来降低开平仓成本,或者直接做成高频交易的信号等,怎么利用和怎么用在策略上,是最关键的部分。