一、订单簿基础:什么是订单簿?
做高频交易这些年,我每天打交道最多的东西,就是订单簿。
说白了,订单簿就是交易所用来记录所有买卖挂单的电子账本。它实时展示着当前市场上,有多少人想买、多少人想卖,各自出什么价、要多少量。
你打开任何一个交易软件的深度图,看到的那两条曲线,就是从订单簿数据画出来的。
核心定义:订单簿 = 所有未成交限价单的集合,按价格排序,实时动态更新。
1.1 限价单 vs 市价单
这两个概念,是理解订单簿的基石。我见过不少新手把两者搞混,结果吃了大亏。
限价单(Limit Order):你指定一个价格,只有市场达到这个价格时才会成交。说白了,就是「我只接受这个价,低了不卖,高了不买」。
市价单(Market Order):你不指定价格,直接按当前最优价成交。你想想看,这就像「不管多少钱,我现在就要买到/卖掉」。
| 对比维度 | 限价单 | 市价单 |
|---|---|---|
| 价格控制 | 完全由你指定 | 由市场决定 |
| 成交确定性 | 不一定成交 | 几乎立即成交 |
| 滑点风险 | 无滑点 | 可能有滑点 |
| 对市场影响 | 提供流动性 | 消耗流动性 |
| 典型用途 | 做市、挂单策略 | 追涨杀跌、快速建仓 |
我的经验:我个人习惯在策略中同时使用两种订单。做市用限价单赚价差,遇到突发事件用市价单快速离场。记住一点:限价单是你的「阵地」,市价单是你的「突击队」。
1.2 买卖盘口结构
订单簿的盘口结构,其实非常直观。我们来看一个典型的比特币订单簿快照:
卖盘(Ask Side)
价格 数量
100.50 1.2
100.40 0.8
100.30 2.5
------------------
买盘(Bid Side)
价格 数量
100.20 3.0
100.10 1.5
100.00 2.0
这里有几个关键概念:
- 最优卖价(Best Ask):卖盘最低价,这里是 100.30
- 最优买价(Best Bid):买盘最高价,这里是 100.20
- 买卖价差(Spread):100.30 - 100.20 = 0.10
- 盘口深度(Depth):每个价格档位的挂单总量
避坑指南:我曾经在实盘中只看最优价,忽略了深层盘口。结果一个大单砸下来,直接穿透了前五档,滑点损失惨重。记住:盘口深度比最优价更重要。
1.3 订单簿的核心逻辑
为什么会形成这样的结构?因为交易所遵循两个基本原则:
- 价格优先:买单出价高的优先成交,卖单出价低的优先成交
- 时间优先:同价格下,先挂单的先成交
你想想看,这就像排队买东西。出价高的人可以插队到前面,但如果出价相同,那就按先来后到。
下面这张图,展示了订单簿的完整运作流程:
1.4 盘口数据的实际意义
在实际交易中,订单簿数据能告诉我们很多信息:
- 买卖力量对比:买盘总量 vs 卖盘总量,判断多空倾向
- 支撑阻力位:大额挂单集中的价格,往往是关键价位
- 市场深度:大单能否轻松吃掉,判断流动性好坏
- 挂单变化速度:撤单频率高,说明有人在试探市场
实战技巧:我习惯在开盘前5分钟观察订单簿。如果买盘突然增加但价格不动,说明有大户在偷偷吸筹。这时候跟着挂单,胜率往往不错。
1.5 代码示例:获取订单簿数据
下面是一个简单的 Python 示例,演示如何从交易所获取订单簿数据:
import requests
import json
def get_orderbook(symbol="btcusdt", limit=10):
"""
获取币安交易所的订单簿数据
"""
url = f"https://api.binance.com/api/v3/depth"
params = {
"symbol": symbol.upper(),
"limit": limit
}
response = requests.get(url, params=params)
data = response.json()
# 解析数据
bids = data['bids'] # 买盘
asks = data['asks'] # 卖盘
print(f"=== {symbol} 订单簿 ===")
print(f"卖盘(Ask):")
for price, qty in asks[:5]:
print(f" 价格: {price} 数量: {qty}")
print(f"买盘(Bid):")
for price, qty in bids[:5]:
print(f" 价格: {price} 数量: {qty}")
# 计算价差
best_ask = float(asks[0][0])
best_bid = float(bids[0][0])
spread = best_ask - best_bid
print(f"\n买卖价差: {spread:.4f}")
return data
# 调用函数
orderbook = get_orderbook("btcusdt", 10)
这段代码会输出类似这样的结果:
=== BTCUSDT 订单簿 ===
卖盘(Ask):
价格: 50000.00 数量: 0.5
价格: 50001.00 数量: 1.2
价格: 50002.50 数量: 0.8
买盘(Bid):
价格: 49999.00 数量: 2.0
价格: 49998.00 数量: 1.5
价格: 49997.50 数量: 0.3
买卖价差: 1.0000
注意:实际生产环境中,不要用 requests 同步请求。我建议用 websocket 实时订阅,否则延迟会让你错过最佳交易时机。
嗯,订单簿的基础概念就这些。看似简单,但里面藏着很多门道。后面我们会深入讲解如何利用这些数据构建策略。
公众号:蓝海资料掘金营,微信deep3321