第一章:订单簿基础概念
1.1 什么是订单簿
订单簿,说白了就是交易所的「记账本」。
我刚开始做量化的时候,以为订单簿就是个简单的价格列表。后来才发现,它记录了所有交易者挂出的买单和卖单。每一笔挂单,都代表着一个交易意愿——有人想在这个价格买,有人想在这个价格卖。
举个例子:
卖单(Ask):
价格 1.0020 数量 1000
价格 1.0019 数量 500
价格 1.0018 数量 200
买单(Bid):
价格 1.0017 数量 300
价格 1.0016 数量 800
价格 1.0015 数量 1500
你看,买单和卖单像两堵墙,中间就是成交价。这个结构,就是订单簿的核心。
关键点:订单簿不是静态的。每一秒都在变化。有人撤单,有人加单,有人成交。实时性就是它的生命线。
1.2 买卖盘口
买卖盘口,英文叫 Order Book Depth。我习惯叫它「深度盘口」。
盘口分两部分:
- 买盘(Bid Side):所有想买入的人,按价格从高到低排列
- 卖盘(Ask Side):所有想卖出的人,按价格从低到高排列
这里有个细节——买盘最高价和卖盘最低价之间的差距,叫「价差」(Spread)。
我在项目中遇到过一个问题:某个小币种的价差特别大,动不动就跳几个点。你想想看,这种盘口根本没法做高频交易。一进去就被滑点吃掉利润。
个人经验:我一般会看盘口前五档的挂单量。如果买一和卖一挂单量都很大,说明流动性好。如果只有薄薄一层,嗯,小心点。
1.3 深度图
深度图就是把订单簿可视化。横轴是价格,纵轴是累计挂单量。
为什么会有人看深度图?因为一眼就能看出市场的「支撑位」和「压力位」。
我画了一张图,帮你理解:
这张图里,绿色是买盘,红色是卖盘。中间那条虚线就是价差。你想想看,如果买盘曲线很陡,说明这个价位支撑很强。反之,卖盘曲线陡峭,说明抛压大。
1.4 市场微观结构
市场微观结构,这个词听起来高大上。其实说白了,就是研究「订单是怎么成交的」。
我举个例子:
你挂了一个买单,价格1.0017。这时候来了一个卖单,价格也是1.0017。谁先成交?
答案是:先到先得。这就是价格优先、时间优先原则。
但实际比这个复杂得多。我在做回测系统时发现:
- 市价单:立即成交,但价格不确定
- 限价单:价格确定,但可能不成交
- 冰山订单:只显示一部分,隐藏真实意图
避坑指南:我曾经在实盘中被冰山订单坑过。看到买一只有100手,以为抛压不大。结果一卖,下面还藏着2000手。嗯,从那以后我学会了看「累计挂单量」而不是只看第一档。
1.5 为什么增量更新很重要
传统的订单簿更新方式,是全量推送。每次变化,交易所把整个订单簿发给你。
你想想看,如果每秒变化100次,每次推送几万个订单条目。带宽和CPU都扛不住。
增量更新就不一样了——只推送变化的部分:
// 全量更新(每次推送全部数据)
{
"bids": [[1.0017, 300], [1.0016, 800], ...],
"asks": [[1.0018, 200], [1.0019, 500], ...]
}
// 增量更新(只推送变化)
{
"type": "update",
"side": "bid",
"price": 1.0017,
"size": 500 // 新的挂单量
}
我在做高频交易系统时,增量更新是必须的。全量更新?延迟太高,根本没法用。
个人建议:设计增量更新算法时,一定要考虑「乱序」问题。网络传输中,先发的更新可能后到。我吃过这个亏,后来加了序列号校验才解决。
1.6 本章小结
订单簿是市场的「心电图」。买卖盘口告诉你当前供需,深度图让你看到支撑和压力,市场微观结构则揭示了成交的底层逻辑。
增量更新,就是在这张心电图上只捕捉「异常波动」。高效、精准、低延迟。
下一章,我会带你手写一个增量更新引擎。准备好了吗?
公众号:蓝海资料掘金营,微信deep3321