量化进阶:基于 L2 限价订单簿 (LOB) 的微观结构特征工程与深度学习预测
量化进阶基于 L2 限价订单簿 (LOB) 的微观结构特征工程与深度学习预测在量化交易的江湖里有一个公开的秘密价格不是平滑移动的而是由一笔笔限价单Limit Orders的挂单、撤单和市价单Market Orders的成交强行“推”出来的。当你能获取到交易所的Level 2 逐笔数据包含买卖十档行情、逐笔成交、逐笔委托时你就拥有了观察市场“内脏”的显微镜。本文将探讨如何从这些杂乱的微观数据中提取具有预测威力的特征并利用深度学习捕捉瞬时的 Alpha。1. 什么是 LOB限价订单簿限价订单簿是买卖盘力量对比的实时快照。它通常由买入侧Bids和卖出侧Asks组成每一档包含价格和该价格上的挂单量。微观结构的核心逻辑如果买一档Bid 1的挂单量远大于卖一档Ask 1说明买方力量雄厚价格大概率向上跳动。如果成交笔数中主动买入外盘远多于主动卖出内盘说明场外资金在疯狂扫货。2. 硬核特征工程量化因子的“微观化”处理 LOB 数据时我们不再看 RSI 或 MACD。我们需要构造反映即时供需失衡的因子。以下是量化私募中最常用的三类微观特征2.1 订单簿失衡因子 (Order Book Imbalance, OBI)这是最经典、最有效的因子。它衡量买卖一档或前五档深度的相对强弱。IVbid−VaskVbidVask I \frac{V_{bid} - V_{ask}}{V_{bid} V_{ask}}IVbidVaskVbid−Vask其中VbidV_{bid}Vbid是买盘量VaskV_{ask}Vask是卖盘量。III趋近 1 表示买压极强趋近 -1 表示卖压极强。2.2 订单流失衡因子 (Order Flow Imbalance, OFI)OBI 只看状态而 OFI 看的是变化。它捕捉在极短时间内挂单量的增加、撤单和成交导致的档位净变化。2.3 宽度与深度 (Spread Depth)买卖价差 (Bid-Ask Spread)衡量流动性成本。价差骤然扩大往往预示着波动即将来临。订单簿斜率 (Slope)衡量价格变动一个单位所需的资金量斜率越陡说明流动性越好价格越难被“砸动”。3. Python 实战极速处理逐笔数据处理 L2 数据最大的挑战是数据量。一天的 A 股全市场逐笔数据可能高达数 GB。我们必须使用向量化操作来提取特征。importpandasaspdimportnumpyasnpdefextract_lob_features(df_lob): df_lob: 包含 BidPrice1-10, BidSize1-10, AskPrice1-10, AskSize1-10 的 DataFrame # 1. 计算买卖一档失衡度 (OBI)df_lob[obi_l1](df_lob[BidSize1]-df_lob[AskSize1])/\(df_lob[BidSize1]df_lob[AskSize1])# 2. 计算加权平均中间价 (WAP - Weighted Average Price)# 相比普通中间价WAP 考虑了深度更能反映真实价值df_lob[wap](df_lob[BidPrice1]*df_lob[AskSize1]df_lob[AskPrice1]*df_lob[BidSize1])/\(df_lob[BidSize1]df_lob[AskSize1])# 3. 计算价格波动 (Volatility) - 滚动 100 行微观时间尺度df_lob[micro_vol]df_lob[wap].pct_change().rolling(100).std()# 4. 计算多档位综合失衡度 (前5档)bid_vsumdf_lob[[fBidSize{i}foriinrange(1,6)]].sum(axis1)ask_vsumdf_lob[[fAskSize{i}foriinrange(1,6)]].sum(axis1)df_lob[obi_all](bid_vsum-ask_vsum)/(bid_vsumask_vsum)returndf_lob.dropna()4. 深度学习预测为何选择 CNN LSTM微观数据具有极强的空间属性不同档位的分布和时间属性历史成交的影响。因此目前工业界流行的架构是CNN (卷积神经网络)将十档买卖盘看作一幅“图像”利用 1D 卷积捕捉档位之间的空间关联。LSTM / Transformer捕捉时间序列上的动态演变。实战模型设计思路输入一个形状为(Sequence_Length, 40)的张量40 代表 10 档的价格和量预测未来 10 个 Tick 内的价格变动方向上涨、平盘、下跌。importtorch.nnasnnclassLOBPredictor(nn.Module):def__init__(self):super(LOBPredictor,self).__init__()# 卷积层提取空间特征档位间的关系self.convnn.Sequential(nn.Conv1d(in_channels40,out_channels64,kernel_size3,padding1),nn.ReLU(),nn.BatchNorm1d(64))# 循环层提取时间特征趋势演变self.lstmnn.LSTM(input_size64,hidden_size128,num_layers2,batch_firstTrue)# 输出层3分类下、平、上self.fcnn.Linear(128,3)defforward(self,x):# x: [batch, seq_len, 40] - 转置以适配 Conv1dxx.transpose(1,2)xself.conv(x).transpose(1,2)_,(hn,_)self.lstm(x)outself.fc(hn[-1])# 取最后一层最后一个时间步returnout5. 总结与进阶警告基于 LOB 的微观结构研究是通往高频交易的必经之路。但请注意这个领域的**“信噪比”**极低。撤单陷阱 (Spoofing)大单可能只是诱饵瞬间撤单。你的特征工程必须能够识别出哪些是“真动作”哪些是“假挂单”。执行算法 (Execution)预测对方向只是第一步如何以最低的冲击成本进场才是关键。你需要配合VWAP或TWAP拆单算法来执行。算力竞赛当你还在用 Python 处理特征时你的竞争对手可能已经用FPGA把逻辑固化在硬件里了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2580758.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!