1. 订单簿基础概念:限价订单与市价订单

做量化交易这些年,我越来越觉得订单簿这东西,就像市场的「心电图」。你盯着它看久了,能感受到买卖双方的情绪波动。今天咱们就从最基础的东西聊起——限价订单和市价订单到底是怎么回事。

1.1 限价订单:我说了算

限价订单,说白了就是你告诉交易所:「我只愿意在这个价格买/卖,高了我不买,低了我不卖。」

举个例子。假设现在比特币价格是 30000 USDT,你觉得它还会跌,于是挂了一笔限价买单:买入 1 BTC,价格 29500 USDT。这笔订单不会立刻成交,它会进入订单簿,等着有人愿意以 29500 卖给你。

我个人习惯把限价订单叫做「耐心订单」——你愿意等,就挂限价。我在项目中遇到过不少新手,一上来就挂限价单,结果行情一路狂奔,订单根本没成交。嗯,这里要注意:限价单不保证成交,只保证价格。

核心要点:限价订单 = 指定价格 + 不保证成交 + 进入订单簿等待

1.2 市价订单:我要立刻成交

市价订单就简单粗暴了——「不管什么价格,我现在就要买/卖!」

你想想看,如果你看到一条重大利好消息,价格正在往上冲,这时候挂限价单可能永远成交不了。市价单就是你的选择:它会立刻吃掉订单簿上最优的对手盘。

比如你下了一笔市价买单买入 1 BTC,系统会立刻找到当前卖一价(最低的卖单)成交。如果卖一的数量不够,就继续吃卖二、卖三……直到买够为止。

避坑指南:我曾经吃过市价单的亏。有一次在流动性不足的币对上用市价单买入,结果滑点高达 2%。市价单虽然成交快,但价格可能远不如预期。记住:市价单 = 保证成交 + 价格不确定。

1.3 订单簿数据结构:价格-数量映射

订单簿本质上就是一个「价格 → 数量」的映射表。交易所会把所有未成交的限价订单按价格排序,形成两个队列:

  • 买单队列(Bids):从高到低排列,最高价在最前面
  • 卖单队列(Asks):从低到高排列,最低价在最前面

用 Python 表示的话,我一般用字典或者有序字典:

# 订单簿的简化表示
order_book = {
    'bids': {  # 买单:价格 -> 数量
        29500: 2.5,
        29400: 1.2,
        29300: 3.0
    },
    'asks': {  # 卖单:价格 -> 数量
        30500: 1.8,
        30600: 2.0,
        30700: 1.5
    }
}

实际生产环境中,订单簿的数据结构要复杂得多。我建议用 sortedcontainers 库或者 Redis 的有序集合来维护,性能会好很多。

1.4 买卖盘口与价差

盘口(Order Book Depth)就是订单簿的「快照」。最关键的几个概念:

术语 含义 我的理解
Bid(买一价) 最高的未成交买单价格 买方愿意出的最高价
Ask(卖一价) 最低的未成交卖单价格 卖方愿意接受的最低价
Spread(价差) Ask - Bid 市场的「摩擦力」
Mid Price(中间价) (Bid + Ask) / 2 公允价格的近似值

价差这东西,我越做越觉得它重要。价差越小,说明市场流动性越好,交易成本越低。像 BTC/USDT 这种主流交易对,价差通常只有 0.01% 左右。但一些小币种,价差可能高达 1% 甚至更多。

实战技巧:我个人习惯用价差来判断市场情绪。价差突然扩大,往往意味着有大单在砸盘或者拉盘,或者市场出现了不确定性。这时候我会暂停策略,等市场稳定再说。

1.5 知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了:

订单簿基础概念体系 限价订单 指定价格 不保证成交 进入订单簿等待 市价订单 立即成交 价格不确定 吃掉对手盘 订单簿数据结构 价格 → 数量 映射 买单队列(Bids)高→低 卖单队列(Asks)低→高 Bid / Ask / Spread 限价订单构成订单簿,市价订单消耗订单簿

这张图其实把本章的逻辑说清楚了:限价订单和市价订单是两种最基本的订单类型,它们共同作用于订单簿这个数据结构上。限价订单「构建」了订单簿,市价订单「消耗」了订单簿。而买卖盘口和价差,就是订单簿的「快照指标」。

做量化交易,理解这些基础概念是第一步。我见过太多人一上来就研究各种复杂策略,结果连订单簿都看不懂,最后亏得一塌糊涂。嗯,基础打牢了,后面的路才走得稳。

本章小结:
  • 限价订单 = 指定价格 + 等待成交
  • 市价订单 = 立即成交 + 价格不确定
  • 订单簿 = 价格-数量映射表,分买单队列和卖单队列
  • 价差 = 卖一价 - 买一价,衡量市场流动性的关键指标

专注资料整理