3. 市场微观结构:订单簿深度解析、买卖盘口动态、Tick级数据特征
做高频交易,说白了就是在跟市场微观结构打交道。很多人一上来就研究各种复杂的策略模型,却忽略了最底层的东西——订单簿。我个人习惯,先把这个东西吃透,再谈别的。
3.1 订单簿:市场的“心电图”
订单簿是什么?你可以把它想象成一个实时更新的买卖挂单清单。每一笔挂单,都代表着一个交易者的意图。买一、买二、卖一、卖二……这些价格和数量,构成了市场的“骨架”。
我在项目中遇到过一个问题:策略回测时表现完美,一上实盘就亏钱。后来发现,是订单簿的更新频率没处理好。回测用的是撮合后的快照数据,而实盘是逐笔的Tick流。这完全是两码事。
核心要点:订单簿的深度,决定了市场的流动性。深度越厚,大单对价格的冲击就越小。反之,一个薄薄的订单簿,几手单子就能把价格打飞。
3.2 买卖盘口动态:谁在主导市场?
光看静态的订单簿还不够。你得看它的变化。买卖盘口的动态,说白了就是多空双方的力量博弈。
- 盘口厚度变化:买盘突然加厚,说明有人在托底。卖盘突然变薄,说明抛压减轻。
- 价格档位跳跃:如果卖一价格突然跳空上移,可能是大单撤单了。这往往是价格即将变动的信号。
- 挂单速度:高频做市商会在毫秒级内反复挂单、撤单。你想想看,这种“虚假挂单”就是为了试探市场反应。
我曾经踩过一个坑:看到卖一有大单压着,以为价格上不去,就做空了。结果那个大单瞬间撤掉,价格直接拉穿。嗯,这就是典型的“冰山订单”陷阱。你以为看到了全部,其实只是冰山一角。
避坑指南:我曾经因为只看盘口深度而忽略了撤单率,导致策略被假突破反复打脸。后来我加了一个指标:撤单率 = 撤单量 / 总挂单量。当撤单率异常升高时,我会主动降低仓位。
3.3 Tick级数据特征:毫秒间的博弈
Tick级数据,就是每一笔成交的原始记录。它包含了时间戳、价格、成交量、买卖方向。这是高频交易最原始的“原料”。
为什么Tick数据这么重要?因为很多微观结构特征,只有在Tick级别才能看到。
| 特征 | 描述 | 实战意义 |
|---|---|---|
| 成交间隔 | 两笔Tick之间的时间差 | 间隔越短,交易越活跃。突然变长,可能是流动性枯竭。 |
| 买卖方向序列 | 连续多笔成交的方向 | 连续买盘(买方主动成交)说明多头强势。 |
| 成交量分布 | 大单还是小单在成交 | 大单密集成交,往往是机构在行动。 |
| 价格跳跃 | 相邻Tick的价格差 | 跳跃过大,说明市场深度不足或消息驱动。 |
我个人习惯,会把Tick数据先做一次“清洗”。因为交易所的数据偶尔会有延迟或乱序。比如,一个时间戳为10:00:00.001的Tick,可能比10:00:00.002的Tick更晚到达。如果不处理,你的策略会做出错误判断。
# 一个简单的Tick数据清洗示例
def clean_ticks(ticks):
# 按时间戳排序,处理乱序
ticks.sort(key=lambda x: x['timestamp'])
# 去除重复的Tick(交易所偶尔会重发)
unique_ticks = []
seen = set()
for t in ticks:
key = (t['timestamp'], t['price'], t['volume'])
if key not in seen:
seen.add(key)
unique_ticks.append(t)
return unique_ticks
注意:不要直接使用交易所的原始Tick数据做策略决策。一定要做时间对齐和去重处理。否则,你的策略会基于错误的时间序列做出反应,这在高频交易中是致命的。
3.4 知识体系结构图
下面这张图,是我自己梳理的市场微观结构知识体系。你可以把它当作一个“地图”,方便你理解各个概念之间的关系。
这张图里,我把市场微观结构拆成了三个核心模块。你想想看,订单簿深度是静态的“底牌”,买卖盘口动态是“出牌过程”,而Tick级数据则是“每一张牌的结果”。三者缺一不可。
嗯,这里要注意:很多初学者只盯着Tick数据看,忽略了订单簿的深度变化。这就像只看结果不看过程,很容易被误导。我个人习惯,是把这三类数据放在一起做特征工程,效果会好很多。
实战技巧:我建议你在做策略回测时,至少使用Level 2数据(包含5档或10档订单簿)。如果只用Tick数据,很多微观结构特征(如撤单率、盘口厚度变化)是提取不出来的。这会让你的策略“失明”。