第四章:订单簿基础——限价单与市价单、订单簿结构、买卖盘口、深度与宽度

做市商这行,说白了就是跟订单簿打交道。你每天盯着屏幕,看到的那些跳动的数字,背后就是一张巨大的订单簿。我刚开始做量化的时候,觉得订单簿不就是一堆买单卖单嘛,有什么好看的?后来被市场狠狠教育了几次,才明白这里面门道深着呢。

4.1 限价单与市价单:两种最基本的武器

先聊聊订单类型。做市商最常用的就两种:限价单和市价单。嗯,这里要注意,别小看这两种单子,用不好可是要亏钱的。

限价单(Limit Order),说白了就是你指定一个价格,只有市场达到这个价格才成交。比如你在100块挂买单,那只有价格跌到100或以下才会成交。我在项目中遇到过,有些新手做市商喜欢挂很远的限价单,觉得能捡便宜。结果呢?行情一来,单子被吃掉,自己反而成了接盘侠。

市价单(Market Order),就是不管价格,直接按当前最优价成交。速度快,但成本高。我记得有一次做回测,发现市价单的滑点比想象中大得多,尤其是在流动性差的时候。

核心区别:

  • 限价单:提供流动性,赚取买卖价差,但可能不成交
  • 市价单:消耗流动性,快速成交,但承担滑点成本

做市商的核心策略,就是用限价单挂买卖双边,赚取价差。但什么时候挂、挂多深、怎么调整,这就是学问了。

4.2 订单簿结构:一张看不见的战场地图

订单簿,其实就是所有未成交订单的集合。交易所会把所有买单和卖单按价格排序,展示出来。你想想看,这就像一张战场地图,你能看到敌人在哪里布防。

一个典型的订单簿结构是这样的:

价格 卖单数量 买单数量 价格
101.0 500
100.5 300
100.0 200
99.5 150
99.0 400
98.5 600

中间那条线就是当前价格。上面是卖单(Ask),下面是买单(Bid)。做市商就活在这个中间地带,靠吃价差为生。

我的习惯:每次上线新策略前,我都会先拉一份完整的订单簿快照,看看各个价位的挂单密度。这能帮你判断市场深度够不够,别一进去就把自己埋了。

4.3 买卖盘口:做市商的命门

买卖盘口,就是最优买价(Bid)和最优卖价(Ask)。这两个价格之间的差距,就是价差(Spread)。做市商赚的就是这个。

举个例子:

  • 最优买价:99.5,挂单150手
  • 最优卖价:100.0,挂单200手
  • 价差:0.5

如果你在99.5挂买单,在100.0挂卖单,一旦成交,你就赚了0.5的价差。但问题是,市场会波动。我曾经遇到过一次,价差突然从0.5扩大到2.0,我的单子全被套住了。嗯,那次教训挺深刻的。

避坑指南:我曾经因为没注意盘口变化,在价差扩大的时候还按老策略挂单,结果被市场来回打脸。记住,盘口是动态的,你的策略也得动态调整。

4.4 深度与宽度:市场的真实面貌

深度,指的是在某个价格附近有多少挂单。宽度,指的是订单簿覆盖的价格范围。这两个指标,能告诉你市场的真实流动性。

我习惯用一张图来理解:

订单簿深度与宽度示意图 价格 挂单数量 当前价格 价差 深度 深度 宽度 买单 卖单

你看这张图,买单在左边,卖单在右边。深度越大,说明这个价位愿意接盘的人越多。宽度越大,说明订单覆盖的价格范围越广。做市商最怕的就是深度不够,一单下去直接把价格打穿。

实战要点:

  • 深度大:可以放心挂单,流动性好
  • 深度小:要小心,可能一单就把盘口打穿
  • 宽度大:说明市场分歧大,波动可能加剧
  • 宽度小:市场一致性强,趋势可能延续

4.5 实战中的订单簿分析

说了这么多理论,来点实际的。我一般会这样分析订单簿:

  1. 看价差:价差越小,市场越活跃。如果价差突然扩大,说明有大事发生。
  2. 看深度分布:买单集中在哪个价位?卖单集中在哪个价位?这能告诉你支撑和阻力在哪。
  3. 看挂单变化:大单撤了?新单进来了?这些信号往往预示着方向。

举个例子,有一次我发现买单深度突然增加,但价格没动。我判断有人在偷偷吸筹,果断跟着挂单。结果半小时后价格拉升,我赚了一波。嗯,这就是看订单簿的好处。

一个小技巧:别只看最优盘口,要看整个订单簿的分布。有时候最优盘口只有几十手,但下面几百手等着,那才是真正的支撑。

4.6 代码示例:获取并分析订单簿

最后,给一段简单的Python代码,帮你理解怎么获取和分析订单簿:

import requests
import json

def get_order_book(symbol, depth=10):
    """获取订单簿数据"""
    url = f"https://api.example.com/orderbook?symbol={symbol}&depth={depth}"
    response = requests.get(url)
    return response.json()

def analyze_order_book(order_book):
    """分析订单簿"""
    bids = order_book['bids']  # 买单
    asks = order_book['asks']  # 卖单
    
    # 计算价差
    best_bid = float(bids[0][0])
    best_ask = float(asks[0][0])
    spread = best_ask - best_bid
    
    # 计算深度
    bid_depth = sum(float(b[1]) for b in bids)
    ask_depth = sum(float(a[1]) for a in asks)
    
    return {
        'spread': spread,
        'bid_depth': bid_depth,
        'ask_depth': ask_depth,
        'bid_ask_ratio': bid_depth / ask_depth
    }

# 使用示例
order_book = get_order_book('BTCUSDT')
analysis = analyze_order_book(order_book)
print(f"价差: {analysis['spread']}")
print(f"买卖深度比: {analysis['bid_ask_ratio']:.2f}")

这段代码很简单,但能帮你快速了解市场状态。我个人习惯在策略启动前先跑一遍,看看当前市场适不适合做市。

注意:API返回的订单簿数据可能有延迟,尤其是高频交易场景。我曾经因为用了延迟数据,导致策略判断失误。建议用WebSocket实时订阅。

好了,订单簿的基础就聊到这儿。记住,订单簿是市场的脉搏,读懂了它,你就读懂了市场。做市商的核心,就是在这个动态的订单簿中找到自己的位置。

专注资料整理