高频因子--tick级别订单流因子计算(附代码)

文章来源于公众号:Logan投资

往期精选文章:

RSRS择时指标的150倍计算加速(有代码)

因子计算的1000倍加速

二级:手搓的择时指增

二级:最近思考的量化指标再挖掘

一级:轮胎行业的研究

一级:新能源汽车部件--CCS集成母排投研

有兴趣的朋友可以在公众号回复“OFI”获取因子计算的代码来自己改进再进行测试(附一个月单只股票的tick数据)

我国证券市场是订单驱动市场,在该市场中投资者通过发送订单将买卖委托命令发送到交易所进行撮合,而这一行为会被完整记录于限价订单薄(Limit Order Book,LOB)之中。限价订单薄包含了当前时刻一至五档的委买价、委卖价、委买量和委卖量,这些数据的变化可以识别为订单委托的增加、成交或者取消,价格的上升和下降,一定程度上反映了市场的买卖意图和价值信息。

目前在学术界基于订单薄构建的高频因子有许多,其有一种是研究交易不平衡(Trade Imbalance)来对价格的影响,如Chorida等(2002),也有一种是基于Cont等(2014)所提出的订单流不平衡(Order Flow Imbalance)框架进一步展开研究。

交易不平衡是使用已成交的订单成交量来进行计算,目前国内外大多数研究都基于Lee和Ready(1991)提出的分类算法来计算交易不平衡,主要是通过将某一时间段内的成交量通过 Lee-Ready(1991)判别法判断出是买方订单还是卖方订单,然后通过将一段时间内的买方订单和卖方订单相减进而计算得出。以下为LeeReady计算的不平衡因子代码。

G_data = {}
    cal_footpoint_model = 'quota_method'
    last_row = []
    for index, row in data.iterrows():
        if not last_row:
            last_row = row

        G_data[index] = {}

        bOF, aOF = multi_imb_En_t(row, last_row, count=5)
        
        G_data[index].update(bOF)
        G_data[index].update(aOF)
        
        midpoint = (row['a1'] + row['b1']) / 2  # 计算中间价
        G_data[index].update({'midprice': midpoint})

        last_price = row['last']
        sub_data = {}
        if cal_footpoint_model == 'quota_method':  #LeeReady分类算法
            if last_price > midpoint:
                pre_along = 1
            elif last_price < midpoint:
                pre_along = -1
            else:
                pre_along = pre_along

        sub_data['dirc'] = pre_along

        if cal_footpoint_model == 'quota_method':
            sub_data['OIBSH'] = pre_along * (max(0, row['volume'] - last_row['volume']))  # 股票时用的

        # sub_data['OIBNUM'] = pre_along * (row['num_trades'] - last_row['num_trades']) # 米筐的期货数据没有num_trades
        sub_data['OIBNUM'] = pre_along  # 没有num_trades时只能用每个tick当作一笔交易

        sub_data['spread'] = row['a1'] - row['b1']
        sub_data['S_B_share'] = max(0, row['volume'] - last_row['volume'])

        G_data[index].update(sub_data)
        G_data[index].update({'OIBDOL': pre_along * (max(0, row['total_turnover'] - last_row['total_turnover']))})

在上面的代码中,基于LeeReady的方法计算了OIBSH(交易量不平衡)、OIBNUM(交易次数不平衡)和OIBDOL(交易额不平衡)

但是基于这种方法计算的高频不平衡因子存在显著的局限性。因为在于交易量的标量性质无法捕捉交易方向的细微差别,而交易方向本身蕴含着关于股票价格行为的重要信息。所以Cont(2014)提出的订单流不平衡(Order Flow Imbalance,OFI)开始被纳入微观市场结构的研究范畴。

OFI根据市场订单到达的量、限价单到达的量和订单取消的量,以及对最优买价和最优卖价进行量化。

我自己通过翻阅文献,也对这个OFI 因子做了一些改进,大致的思想就利用主成分分析PCA和机器学习算法进行信息提取和预测。

总共对90个股票进行了高频因子的计算,使用2年历史的1分钟级别数据进行滚动预测,上图为其中三只股票的预测结果。准确率平均在60%左右,原来的因子准确率为57%,这一点提升在高频领域算是不错了。

虽是如此,但是想要将这个因子直接拿来实盘用还需要很多的改进和测试,上文的测试并没有从因子分析的框架进行分组回测来分析,主要是考虑到了数据量过于庞大,自己电脑没办法跑的原因。有兴趣的朋友可以在公众号回复“OFI”获取因子计算的代码来自己改进再进行测试。

参考文献:

[1]Cont R, Kukanov A, Stoikov S. The Price Impact of Order Book Events[J]. Journal of Financial Econometrics, 2014, 12(1): 47-88.

[2]Lee C M C, Ready M J. Inferring Trade Direction from Intraday Data[J]. The Journal of Finance, 1991, 46(2): 733-746.

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值