3. 订单簿基础:订单簿的结构、限价单与市价单、订单簿的深度与流动性
做市商这行,说白了就是跟订单簿打交道。你每天盯着的那个不断跳动的买卖挂单列表,就是你的战场。我刚开始做市的时候,总觉得订单簿就是个简单的价格排队表,后来被市场狠狠教育了几次,才真正理解它的门道。
3.1 订单簿的结构
订单簿长什么样?其实就是一个电子化的报价板。左边是买单(Bid),右边是卖单(Ask),中间是价差。每一档都记录着价格和对应的挂单数量。
我个人习惯把订单簿想象成一个多层级的拍卖场。最上面的几层是「热区」,成交最活跃。越往下走,挂单越稀疏,流动性也越差。
核心结构:
- 买盘(Bid Side):从最高买价向下排列
- 卖盘(Ask Side):从最低卖价向上排列
- 价差(Spread):最高买价与最低卖价之间的差值
- 中间价(Mid Price):(最高买价 + 最低卖价) / 2
举个例子,假设某币种当前的订单簿是这样的:
| 卖价 | 卖量 | 买价 | 买量 |
|---|---|---|---|
| 100.05 | 1,200 | 100.00 | 800 |
| 100.10 | 2,500 | 99.95 | 1,500 |
| 100.15 | 3,000 | 99.90 | 2,000 |
| 100.20 | 4,000 | 99.85 | 3,500 |
这里价差是 100.05 - 100.00 = 0.05。中间价是 (100.00 + 100.05) / 2 = 100.025。
嗯,这里要注意:订单簿是动态的。每一秒都在变化。做市商要做的,就是在这个动态结构中找到盈利空间。
3.2 限价单与市价单
这两种订单类型,是订单簿的「阴阳两面」。理解它们的区别,是做市的基础。
限价单(Limit Order)
限价单就是你指定一个价格,挂在那里等成交。比如你挂一个「买入 100.00」,那只有价格跌到 100.00 或以下才会成交。
限价单的特点:
- 提供流动性:你挂单,别人来吃。你是在「做市」。
- 成交价格可控:不会出现滑点。
- 可能不成交:价格没到,单子就挂在那里。
我的经验:做市商主要用限价单。我们赚的就是买卖价差。我曾经犯过一个错误,在波动剧烈时挂了一个很厚的限价单,结果被一波大单直接吃掉,亏了不少。后来我学会了根据波动率动态调整挂单厚度。
市价单(Market Order)
市价单就是「不管价格,立即成交」。你输入数量,系统按当前最优价格帮你吃掉对手盘。
市价单的特点:
- 消耗流动性:你吃掉别人的挂单。你是在「交易」。
- 成交速度快:几乎瞬间成交。
- 有滑点风险:如果订单簿深度不够,成交价格可能远低于预期。
避坑指南:我曾经在流动性不足的币对上用市价单下了一笔大单,结果成交价格比预期差了 0.5%。那笔交易直接把我一天的利润吃掉了。记住:市价单是「价格换速度」,深度不够时慎用。
3.3 订单簿的深度与流动性
深度和流动性,这两个词经常被混用。但在我眼里,它们有本质区别。
流动性,说白了就是「你能不能快速成交而不影响价格」。流动性好的市场,你下个市价单,价格几乎不动。
深度,指的是订单簿上各档位的挂单总量。深度越厚,市场越能吸收大单。
我习惯用「深度图」来直观感受流动性。下面是我用 SVG 画的一个典型订单簿深度图:
这张图里,绿色是买盘深度,红色是卖盘深度。中间价附近深度最厚,越往两边越薄。你想想看,如果深度曲线很陡峭,说明流动性集中在少数几个价位,大单进来很容易造成价格跳跃。
如何衡量流动性?
我常用的几个指标:
- 价差宽度:价差越小,流动性越好。做市商赚的就是这个价差。
- 订单簿斜率:各档位挂单量的变化速度。斜率越平缓,深度越好。
- 市场深度(Market Depth):某个价格区间内的总挂单量。比如「买一到买五的总量」。
实战技巧:我个人习惯用「深度比」来判断市场状态。深度比 = 买盘总深度 / 卖盘总深度。如果深度比远大于 1,说明买盘厚,市场偏多。反之亦然。但这个指标要结合成交量看,不能只看挂单。
代码示例:计算订单簿深度
下面是我写的一个简单函数,用来计算某个价格区间的市场深度:
def calculate_market_depth(order_book, price_range=0.01):
"""
计算订单簿在中间价附近的深度
:param order_book: 订单簿数据,格式为 {'bids': [[price, qty], ...], 'asks': [[price, qty], ...]}
:param price_range: 价格范围(百分比)
:return: 买盘深度、卖盘深度、总深度
"""
mid_price = (order_book['bids'][0][0] + order_book['asks'][0][0]) / 2
lower_bound = mid_price * (1 - price_range)
upper_bound = mid_price * (1 + price_range)
bid_depth = sum(qty for price, qty in order_book['bids'] if price >= lower_bound)
ask_depth = sum(qty for price, qty in order_book['asks'] if price <= upper_bound)
return bid_depth, ask_depth, bid_depth + ask_depth
# 使用示例
order_book = {
'bids': [[100.00, 800], [99.95, 1500], [99.90, 2000]],
'asks': [[100.05, 1200], [100.10, 2500], [100.15, 3000]]
}
bid_d, ask_d, total_d = calculate_market_depth(order_book, 0.005)
print(f"买盘深度: {bid_d}, 卖盘深度: {ask_d}, 总深度: {total_d}")
这个函数很简单,但很实用。我在做实时监控系统时,就是用这个函数来评估每个交易对的流动性状况。如果某个币对的总深度突然下降,我会立刻降低挂单量,防止被大单吃掉。
3.4 订单簿的动态博弈
订单簿不是静态的。每一笔成交、每一次挂单撤单,都在改变市场结构。做市商要做的,就是在这个动态博弈中找到自己的位置。
我记得有一次,某个币种突然出现一个巨大的卖单挂在买一价附近。很多散户以为是「砸盘」,纷纷跟着卖出。但我仔细一看,那个卖单一直在撤单重挂,价格始终不往下走。这明显是某个大机构在「压价吸筹」。我反其道而行之,在买盘加厚了挂单,结果那波行情我吃到了不少利润。
核心认知:订单簿是「信息」的载体。每一笔挂单背后都有人在操作。读懂订单簿,就是读懂市场参与者的意图。做市商赚的,就是这份「读懂」的能力。
好了,订单簿的基础就讲到这里。记住:限价单是工具,市价单是武器,深度是你的护城河。这三者结合,才能构建出稳定的做市盈利模型。