第二章:订单簿基础

订单簿这东西,说白了就是市场的「实时记账本」。我刚开始做量化的时候,总觉得订单簿就是个简单的买卖挂单列表。直到有一次我在回测里发现策略表现很好,实盘却亏得一塌糊涂——后来才发现,我根本没理解订单簿的动态变化规律。

今天咱们就把订单簿的底裤扒干净。从最基础的订单类型开始,到订单簿怎么构建、怎么更新,最后聊聊买卖价差和市场深度这些实战中天天打交道的概念。

2.1 限价订单与市价订单

这两种订单类型,是订单簿的「原子操作」。你想想看,所有复杂的交易策略,最终拆解下来无非就是这两种订单的组合。

限价订单(Limit Order)

限价订单,就是你指定一个价格,告诉交易所:「低于这个价我不卖,高于这个价我不买」。它提供了流动性,但也承担了「成交不了」的风险。

我个人习惯把限价订单分成两类:

  • 被动型限价单:挂在当前最优买卖价之外,等着别人来吃。比如当前买一价是10.00,你挂10.01卖,这就是被动提供流动性。
  • 激进型限价单:直接挂在最优价之内,比如买一价10.00,你挂10.00买,这其实已经接近市价单的效果了。
实战小技巧:我在做高频策略时,经常用限价单来「钓鱼」。比如在关键价位挂大单,等市场自己撞上来。但要注意——别挂得太明显,否则会被其他做市商盯上。

市价订单(Market Order)

市价单就是「不管价格,立即成交」。它消耗流动性,但保证成交。说白了,你着急用钱或者着急建仓的时候,就用市价单。

嗯,这里要注意一个坑:市价单的成交价格并不一定是当前显示的价格。我曾经在流动性差的合约上吃过亏——市价单进去,滑点直接吃掉了我一个月的利润。

避坑指南:我曾经在ETH/USDT的凌晨时段用市价单平仓,结果因为深度不足,成交均价比预期差了0.3%。从那以后,我给自己定了个规矩:非交易活跃时段,尽量用限价单,或者拆成小单分批成交。

2.2 订单簿的构建与动态更新

订单簿本质上就是一个价格-数量的映射表。买方一侧按价格从高到低排列,卖方一侧按价格从低到高排列。中间那个空隙,就是买卖价差。

咱们用个简单的Python代码来模拟一下订单簿的构建:

class OrderBook:
    def __init__(self):
        self.bids = {}  # 买盘:价格 -> 数量
        self.asks = {}  # 卖盘:价格 -> 数量
    
    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):
        if side == 'buy' and price in self.bids:
            self.bids[price] -= quantity
            if self.bids[price] <= 0:
                del self.bids[price]
        # 卖盘同理
    
    def get_best_bid(self):
        return max(self.bids.keys()) if self.bids else None
    
    def get_best_ask(self):
        return min(self.asks.keys()) if self.asks else None

这段代码虽然简单,但已经包含了订单簿的核心逻辑。实际交易所的订单簿比这复杂得多——还要处理订单ID、时间戳、冰山订单等等。但原理是一样的。

动态更新的三种触发方式

  1. 新订单到达:限价单进入订单簿,更新对应价格档位的数量。
  2. 订单成交:市价单吃掉限价单,对应档位的数量减少或消失。
  3. 订单撤销:交易者取消未成交的限价单,数量归零。

我记得有一次做回测,我忽略了订单撤销这个因素,结果策略在模拟环境里赚得盆满钵满,实盘却频繁撤单导致手续费爆炸。嗯,从那以后我每次回测都会加上「撤单率」这个参数。

2.3 买卖价差与市场深度

这两个指标,是衡量市场流动性的「体温计」。我每天开盘前第一件事,就是扫一眼这两个数据。

买卖价差(Bid-Ask Spread)

价差 = 最优卖价 - 最优买价。说白了,就是你立刻买卖一手需要付出的「过路费」。

市场类型 典型价差 说明
主流币种(BTC/ETH) 0.01% - 0.05% 流动性极好,做市商竞争激烈
小市值币种 0.5% - 2% 流动性差,小心滑点
期货主力合约 0.02% - 0.1% 受交割日影响,价差会波动
核心观点:价差越小,说明市场越「厚实」,交易成本越低。但价差也会在极端行情下瞬间扩大——比如2020年3月12日,比特币价差一度扩大到5%以上。

市场深度(Market Depth)

市场深度,就是看不同价格档位上挂了多少单。深度越厚,大单对价格的冲击就越小。

我习惯用「深度斜率」来判断市场的承接能力:

  • 陡峭的深度曲线:说明流动性集中在最优价附近,大单容易造成价格跳跃。
  • 平缓的深度曲线:说明各价位都有挂单,大单可以慢慢消化。

你想想看,如果你要买入100个BTC,深度不够的话,可能买完价格就涨了2%。这就是为什么机构交易员都喜欢用「时间加权平均价格(TWAP)」算法——把大单拆成小单,减少对市场的冲击。

个人经验:我在做套利策略时,会同时监控三个交易所的深度数据。如果发现某个交易所的深度突然变薄,往往意味着有大户在「埋伏」或者即将有行情异动。这时候我会暂时降低该交易所的交易频率。

知识体系总览

下面这张图,把本章的核心逻辑串起来了:

订单簿核心知识体系 订单类型 限价订单(提供流动性) 市价订单(消耗流动性) → 决定订单簿的输入 订单簿构建 买盘:价格降序排列 卖盘:价格升序排列 → 动态更新(增/删/改) 核心指标 买卖价差(交易成本) 市场深度(承接能力) → 衡量流动性质量 实战应用 策略设计 → 回测验证 → 实盘监控 → 动态调整 核心:理解订单簿的「博弈均衡」本质

这张图把订单簿的「输入-处理-输出-应用」串起来了。你想想看,订单类型决定了订单簿的输入,订单簿的构建和更新是处理过程,买卖价差和深度是输出指标,最终服务于我们的交易策略。

我个人觉得,理解订单簿的关键不在于记住那些公式,而在于培养一种「盘感」——看到价差变化能联想到流动性变化,看到深度变化能预判价格冲击。这种能力,需要大量的实盘观察和复盘。

一句话总结:订单簿是市场的「心电图」,限价单和市价单是「心跳」,价差和深度是「血压」。读懂它,你就能在博弈中占据先机。

公众号:蓝海资料掘金营,微信deep3321