市场微观结构基础:订单簿深度解析
做量化交易这些年,我越来越觉得——订单簿才是市场最真实的语言。K线可以造假,成交量可以对倒,但订单簿里每一笔挂单,都是真金白银的态度。今天咱们就把订单簿拆开揉碎了讲清楚。
一、订单簿长什么样?
说白了,订单簿就是一个「买方想买、卖方想卖」的实时清单。交易所把它按价格排列,买价从高到低,卖价从低到高。
我习惯把它想象成一场拍卖会:
- 买方举牌喊价:「我出100块买!」
- 卖方举牌喊价:「我105块才卖!」
- 中间那个成交价,就是双方妥协的结果
举个例子,某股票当前订单簿可能是这样的:
| 卖价 | 卖量 | 买价 | 买量 |
|---|---|---|---|
| 10.05 | 2000 | 9.98 | 1500 |
| 10.04 | 1000 | 9.97 | 3000 |
| 10.03 | 500 | 9.96 | 800 |
| 10.02 | 3000 | 9.95 | 1200 |
| 10.01 | 100 | 9.94 | 600 |
看到没?买一是9.98,卖一是10.01。中间差了3分钱,这就是价差。
核心概念速记:
- 买一/卖一:最接近成交的挂单
- 价差:卖一价 - 买一价
- 深度:某个价位上的挂单总量
- 盘口:通常指买一到买五、卖一到卖五
二、买卖盘口与价差——市场的呼吸
盘口数据,其实就是市场的「心电图」。我刚开始做高频策略时,每天盯着盘口看,慢慢就看出门道了。
2.1 价差意味着什么?
价差小,说明流动性好。比如茅台,价差经常只有1分钱。价差大,说明流动性差,或者市场情绪不稳定。
我记得有一次做回测,发现某个小盘股的价差在开盘前5分钟能到5%以上。嗯,这种票你要是用市价单进去,光滑点就能吃掉你一半利润。
我的经验:价差超过0.5%的品种,尽量别用市价单。限价单慢慢磨,反而更划算。
2.2 深度怎么看?
深度不只是看某个价位的挂单量,更要看累计深度。比如你想买10万股,不能只看卖一有多少,得看卖一到卖五加起来够不够。
我常用一个指标叫「深度斜率」——把价格和累计挂单量画个曲线,斜率越陡,说明越容易把价格打穿。
# 计算累计深度
def calc_cumulative_depth(order_book, side='ask', levels=5):
"""
order_book: 订单簿数据
side: 'ask' 或 'bid'
levels: 看几档
"""
prices = []
cum_volumes = []
total = 0
for i in range(levels):
price = order_book[f'{side}_{i+1}_price']
volume = order_book[f'{side}_{i+1}_volume']
total += volume
prices.append(price)
cum_volumes.append(total)
return prices, cum_volumes
三、订单类型——你的武器库
做交易这么多年,我见过太多人只会用市价单。其实每种订单都有它的脾气。
3.1 市价单:简单粗暴
市价单就是「不管多少钱,我现在就要成交」。优点是快,缺点是贵。
我曾经在流动性不好的时候用市价单买一个ETF,结果成交均价比预期高了0.3%。那笔交易亏的钱,够我吃一个月火锅了。
警告:市价单在极端行情下可能成交在非常离谱的价格。2010年美股闪崩时,有些市价单成交在了1美分。
3.2 限价单:精打细算
限价单是「我只愿意出这个价,多了我不买」。优点是成本可控,缺点是不一定能成交。
我个人的习惯是:做短线用限价单,做长线用市价单。短线对成本敏感,长线对时间敏感。
3.3 冰山订单:大资金的隐身衣
这个我要重点说说。冰山订单,顾名思义——只露出水面一小块,大部分藏在下面。
比如你想买100万股,直接挂上去,别人一看就知道有大资金进场,肯定抬价。用冰山订单,每次只显示1万股,成交了再补上。
我见过最夸张的一次,某机构用冰山订单拆了200次,愣是没人发现他在吸筹。
# 冰山订单模拟
class IcebergOrder:
def __init__(self, total_volume, display_volume, price, side):
self.total = total_volume # 总数量
self.display = display_volume # 每次显示的数量
self.price = price
self.side = side
self.remaining = total_volume # 剩余未成交
def get_visible_order(self):
"""返回当前应该显示在订单簿上的数量"""
if self.remaining <= 0:
return 0
return min(self.display, self.remaining)
def fill(self, volume):
"""成交后更新状态"""
self.remaining -= volume
if self.remaining > 0:
# 重新挂单,显示新的冰山一角
return self.get_visible_order()
return 0
四、知识体系总览
说了这么多,咱们用一张图把核心逻辑串起来:
五、实战中的避坑指南
最后分享几个我踩过的坑:
- 别只看买一卖一——我曾经被买一挂的大单骗过,以为支撑很强,结果那是人家撤单前的障眼法
- 冰山订单不是万能的——在成交量极小的品种上,冰山订单反而会暴露你的意图
- 价差会骗人——有些做市商会在盘口挂很窄的价差,但深度只有几百股,一碰就碎
我的小技巧:每天开盘前花5分钟看订单簿,连续看一周,你就能感受到市场的「呼吸节奏」。这比任何指标都管用。
好了,订单簿这块就讲这么多。记住一句话:订单簿是市场的X光片,能让你看到K线背后的骨骼。下一章咱们聊聊如何用这些知识做拆单算法。
公众号:蓝海资料掘金营,微信deep3321