第一章:订单簿基础——限价单与市价单的定义、订单簿结构、买卖盘口深度解析
1.1 限价单与市价单:交易世界的两种基本语言
做量化交易这些年,我见过太多新手一上来就盯着K线图猛看,却忽略了最底层的东西——订单簿。说白了,订单簿才是市场最真实的脉搏。K线是加工过的信息,而订单簿是原材料。
先聊聊两种最基础的订单类型:限价单和市价单。
限价单,就是你指定一个价格,告诉交易所:“我只愿意在这个价格或者更好的价格成交。” 比如你想买BTC,当前卖一价是50000,你挂个49900的买单。那你就得等,等有人愿意以49900卖给你。限价单不保证成交,但保证价格。
市价单,就是你不管价格,直接说:“我要立刻成交,按当前最优价给我买!” 市价单保证成交,但不保证价格。你想想看,如果市场流动性差,一个市价单下去可能直接吃掉好几档价格,滑点会让你肉疼。
我个人习惯,做高频策略时几乎只用限价单。为什么?因为市价单的成本不可控。我在项目中遇到过一回,一个市价单下去,因为盘口太薄,直接打穿了三个价位,多花了0.3%的成本。嗯,从那以后我对市价单就格外谨慎了。
1.2 订单簿结构:市场的实时快照
订单簿,英文叫Order Book,就是交易所里所有未成交的限价单的集合。它分两边:买单(Bids)和卖单(Asks)。
买单按价格从高到低排列,卖单按价格从低到高排列。中间那个空隙,就是买卖双方的价格博弈区。
我画了一张图,帮你理解订单簿的结构:
这张图里,左边是买单,右边是卖单。最上面那行是离当前价格最近的订单。你看,最佳买价是49980,最佳卖价是50000,中间差了20 USDT。这20 USDT就是价差(Spread)。
价差是衡量流动性的重要指标。价差越小,说明市场越活跃,交易成本越低。我在做套利策略时,价差是我第一个看的指标。如果价差太大,策略根本跑不起来。
1.3 买卖盘口深度:你能吃下多少单子?
盘口深度,说白了就是看各个价位上到底有多少单子在等着。深度越厚,市场越能扛得住大单冲击。
举个例子,你想用市价单买10个BTC。看看上面的订单簿:
- 卖一价50000,只有1.8个BTC。吃掉它。
- 卖二价50010,有3.2个BTC。再吃掉。
- 卖三价50020,有6.5个BTC。但你已经买了1.8+3.2=5个,还需要5个,所以从卖三再吃5个。
最终成交价:1.8个@50000 + 3.2个@50010 + 5个@50020。平均成交价是多少?算一下:(1.8*50000 + 3.2*50010 + 5*50020) / 10 = 50013.2。比最佳卖价50000高了13.2 USDT。这就是滑点。
1.4 用Python快速分析订单簿
光说不练假把式。我写了个简单的Python函数,帮你快速分析订单簿深度:
def analyze_orderbook(bids, asks, order_size):
"""
分析订单簿深度和滑点
bids: 买单列表 [(price, volume), ...]
asks: 卖单列表 [(price, volume), ...]
order_size: 要买入的数量
"""
remaining = order_size
total_cost = 0.0
filled_volume = 0.0
for price, volume in asks:
if remaining <= 0:
break
take = min(volume, remaining)
total_cost += take * price
filled_volume += take
remaining -= take
if remaining > 0:
print("警告:订单簿深度不足,无法完全成交!")
return None
avg_price = total_cost / filled_volume
best_ask = asks[0][0]
slippage = (avg_price - best_ask) / best_ask * 100
print(f"目标数量: {order_size} BTC")
print(f"平均成交价: {avg_price:.2f}")
print(f"滑点: {slippage:.3f}%")
return avg_price, slippage
# 示例数据
bids = [(49980, 2.5), (49970, 5.0), (49960, 8.1)]
asks = [(50000, 1.8), (50010, 3.2), (50020, 6.5), (50030, 10.0)]
analyze_orderbook(bids, asks, 10.0)
这段代码会遍历卖单列表,逐档吃单,直到凑够你要的数量。最后算出平均成交价和滑点百分比。我每次跑新策略前,都会用这个函数先测一下市场深度够不够。
1.5 订单簿的动态变化:你看到的只是冰山一角
订单簿不是静止的。每一秒都有新订单进来,也有订单被撤掉。高频交易者会利用这一点做文章。
我记得有一次,我看到某个币的买一单突然增加了500个BTC,但价格没变。直觉告诉我,这可能是某个大资金在挂假单,想托住价格。果然,几秒后这500个BTC就撤单了。这种手法叫虚假挂单(Spoofing),是监管明令禁止的,但在一些监管不严的市场里依然存在。
订单簿的深度数据,一般交易所API都会提供。常用的字段有:
| 字段 | 含义 | 我的用法 |
|---|---|---|
| price | 价格 | 确定买卖档位 |
| volume | 该价位的挂单量 | 计算深度和滑点 |
| timestamp | 更新时间 | 判断数据是否过期 |
| side | 买单还是卖单 | 区分买卖方向 |
我个人习惯,拿到订单簿数据后,先算几个关键指标:
- 价差:最佳卖价 - 最佳买价。越小越好。
- 深度比:前5档买单总量 / 前5档卖单总量。大于1说明买盘强,小于1说明卖盘强。
- 订单密度:每个价位上的挂单量分布。如果某个价位挂单量特别大,可能是支撑位或阻力位。
这些指标能帮你快速判断市场的真实状态。别只看K线,订单簿才是第一手信息。
好了,这一章就聊到这儿。记住,订单簿是你和市场的直接对话窗口。多花点时间研究它,比看一百个技术指标都管用。
公众号:蓝海资料掘金营,微信deep3321