订单簿基础:限价单与市价单、订单簿的构建与维护、买卖盘口与深度
做量化交易这些年,我越来越觉得订单簿这东西,就像市场的「心电图」。你盯着它看久了,能感受到买卖双方的呼吸节奏。今天咱们就把它拆开揉碎了讲清楚。
一、两种最基础的订单类型
先聊聊订单类型。说白了,交易所里就两种核心玩法:限价单和市价单。其他的什么冰山单、止损单,都是在这俩基础上变出来的花样。
1. 限价单(Limit Order)
限价单就是你告诉交易所:「我只愿意在这个价格买(或卖),高了我不买,低了我不卖。」它像个固执的猎人,蹲在某个价位等着猎物撞上来。
特点:
- 价格确定,成交时间不确定
- 提供市场流动性(你挂单,别人来吃)
- 可能永远无法成交(价格没到)
举个例子,BTC当前价格30000,你觉得它跌到29800是个好买点。于是你挂一个限价买单,价格29800,数量1个BTC。这时候你的单子就进了订单簿的买盘队列里等着。
2. 市价单(Market Order)
市价单就简单粗暴了:「不管什么价格,我现在就要成交!」它像个急性子的买家,冲进市场直接扫货。
特点:
- 成交时间确定,价格不确定
- 消耗市场流动性(你吃掉别人的挂单)
- 可能产生较大的滑点(流动性不足时)
你想想看,如果你用市价单买入1个BTC,而卖一档只有0.5个BTC,那剩下的0.5个就得去卖二档甚至卖三档成交。这就是滑点的来源。
二、订单簿的构建与维护
订单簿,说白了就是一个「价格-数量」的映射表。买盘按价格从高到低排,卖盘按价格从低到高排。但真正实现起来,有几个细节你得注意。
1. 数据结构的选择
我建议用红黑树或跳表来实现订单簿。为什么?因为订单簿的核心操作是:插入、删除、查询最优价格。这些操作在红黑树里都是O(log n)的复杂度。
给你看个简单的Python实现思路:
class OrderBook:
def __init__(self):
self.bids = {} # 买盘,价格->数量
self.asks = {} # 卖盘,价格->数量
self.bid_prices = [] # 维护有序价格列表
self.ask_prices = []
def add_order(self, side, price, quantity):
if side == 'buy':
self.bids[price] = self.bids.get(price, 0) + quantity
# 插入到有序列表
else:
self.asks[price] = self.asks.get(price, 0) + quantity
def remove_order(self, side, price, quantity):
# 扣减数量,如果归零则删除该价格档位
pass
def get_top(self, side, n=5):
# 返回前n档最优价格
pass
嗯,这里要注意:实际生产环境里,我一般用C++实现,Python只用来做原型验证。因为订单簿的更新频率太高了,Python的GIL会成瓶颈。
2. 事件驱动的更新机制
订单簿不是静态的。每秒钟可能有成百上千次变化。你得处理好三种事件:
- 新增订单:新的限价单进入队列
- 撤销订单:挂单的人撤单了
- 成交:市价单吃掉了限价单
我见过不少新手,每次收到行情快照就全量重建订单簿。这太慢了。正确的做法是:维护一个「增量更新」的机制,只处理变化的部分。
三、买卖盘口与深度
盘口,就是订单簿里最显眼的那几档价格。深度,则是这些价格背后堆积的「弹药量」。
1. 盘口结构
一个典型的盘口长这样:
| 卖五 | 卖四 | 卖三 | 卖二 | 卖一 | 买一 | 买二 | 买三 | 买四 | 买五 |
|---|---|---|---|---|---|---|---|---|---|
| 30010 | 30008 | 30006 | 30004 | 30002 | 29998 | 29996 | 29994 | 29992 | 29990 |
| 1.2 | 0.8 | 2.1 | 1.5 | 3.0 | 2.5 | 1.8 | 0.6 | 2.3 | 1.1 |
卖一和买一之间的价差,叫「买卖价差」(Spread)。这是市场流动性的核心指标。价差越小,流动性越好。
2. 深度分析
深度不只是看某一档有多少量,更要看「累积深度」。比如你想买入10个BTC,不能只看卖一档的3个BTC,得看卖一到卖五加起来够不够。
我常用一个指标叫「深度斜率」——计算从最优价格往外,每变动一个最小价格单位,累积数量的变化率。斜率陡峭,说明深度集中在当前价格附近;斜率平缓,说明深度分布均匀。
四、核心知识体系
下面这张图,是我自己总结的订单簿知识框架。你看一眼就能明白各个模块之间的关系。
做量化交易,订单簿就是你的「战场地图」。你得知道哪里兵力密集,哪里有空档,哪里是陷阱。我刚开始做的时候,光研究订单簿的微观结构就花了三个月。但说实话,这三个月是我量化生涯里最值的一笔投资。