订单簿基础:限价订单与市价订单

大家好,我是老张。今天咱们聊聊订单簿,这是市场微观结构的核心。说白了,订单簿就是市场的「记账本」,记录着所有买卖意愿的排队情况。

我刚开始做量化的时候,总觉得订单簿就是个简单的价格列表。后来在实盘中吃过亏,才明白这里面的门道有多深。嗯,咱们一步步来拆解。

限价订单 vs 市价订单

这两种订单类型,是交易系统最基础的指令。我习惯把它们比作「耐心猎人」和「急性子买家」。

  • 限价订单:指定一个价格,只有市场达到这个价格才成交。你挂一个买入限价单,价格没到,就乖乖排队等着。
  • 市价订单:不指定价格,直接按当前最优价格成交。你想买,系统立刻帮你吃掉最便宜的卖单。

我在项目中遇到过不少新手,上来就狂砸市价单,结果把价格打飞了。你想想看,本来想买1000股,结果因为流动性不足,成交均价高了一大截。这就是典型的「冲击成本」。

核心区别:限价单保证价格,不保证成交;市价单保证成交,不保证价格。

订单簿的构建与动态变化

订单簿怎么构建?其实就是一个排序问题。买单按价格从高到低排,卖单按价格从低到高排。价格相同的,按时间先后排。

我给大家画个图,看看订单簿的结构:

订单簿结构示意图 买单 (Bid) 卖单 (Ask) 价格: 10.00 数量: 500 价格: 9.99 数量: 300 价格: 9.98 数量: 800 价格: 9.97 数量: 200 价格: 9.96 数量: 600 价格: 9.95 数量: 400 价格: 10.01 数量: 400 价格: 10.02 数量: 600 价格: 10.03 数量: 300 价格: 10.04 数量: 700 价格: 10.05 数量: 500 价格: 10.06 数量: 200 价差 = 0.01 最佳买价: 10.00 最佳卖价: 10.01 买一深度: 500股 卖一深度: 400股 ← 价格上升方向 →

这张图展示了典型的订单簿结构。左边是买单队列,右边是卖单队列。中间那个缝隙,就是买卖价差。

订单簿是动态变化的。每一秒都有新订单进来,也有订单被撤掉。我做过一个统计,A股市场每秒大约有几百笔订单变动。高频交易场景下,这个数字能到上万。

个人经验:我建议初学者先观察订单簿的「厚度」。如果某个价位突然出现大单,往往意味着有机构在布局。但要注意,也可能是「幌单」——挂上去又撤掉,专门骗人的。

买卖价差与市场深度

买卖价差,就是最佳卖价减去最佳买价。这个数字越小,说明市场越活跃,流动性越好。

市场类型 典型价差 流动性评价
大盘蓝筹股 0.01 - 0.02元 高流动性
中小盘股 0.05 - 0.10元 中等流动性
冷门股 0.20元以上 低流动性

市场深度,指的是在某个价格水平上能成交多少量。深度越大,大单对价格的冲击就越小。

我曾经踩过一个坑:看到一个股票价差只有0.01元,以为流动性很好。结果一算深度,买一只有100股,卖一只有200股。我挂了个500股的市价单,直接把价格打穿了两个档位。嗯,从那以后我养成了习惯,下单前必看深度。

避坑指南:我曾经在流动性差的品种上吃过亏。记住,价差小不等于深度大。有些做市商故意把价差做得很小,但深度极浅,专门引诱你进场。

订单簿的动态变化过程

咱们用代码模拟一下订单簿的变化。我习惯用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 match_order(self):
        # 检查是否有交叉
        best_bid = max(self.bids.keys())
        best_ask = min(self.asks.keys())
        
        if best_bid >= best_ask:
            # 有成交
            trade_price = best_ask
            trade_qty = min(self.bids[best_bid], self.asks[best_ask])
            print(f"成交: {trade_qty}股 @ {trade_price}")
            
            # 更新订单簿
            self.bids[best_bid] -= trade_qty
            self.asks[best_ask] -= trade_qty
            
            # 清理空价位
            if self.bids[best_bid] == 0:
                del self.bids[best_bid]
            if self.asks[best_ask] == 0:
                del self.asks[best_ask]

这段代码虽然简单,但核心逻辑都在了。实际生产环境中,订单簿的更新速度是微秒级的,数据结构也要用红黑树或者跳表来优化。

实战中的订单簿观察

我个人习惯在交易时段盯着订单簿看。你会发现很多有意思的现象:

  • 大单压顶:卖一突然出现巨量挂单,价格往往会被压制
  • 撤单潮:某个价位的订单突然全部撤掉,可能是机构在试盘
  • 价差收窄:开盘和收盘时段,价差通常最小

你想想看,如果有人在10.00元挂了100万股买单,又在10.01元挂了100万股卖单,这是什么意思?对,他在做市,赚的就是那0.01元的价差。

核心要点:订单簿是市场的「心电图」。读懂它,你就能感知到资金的流向和意图。但记住,看到的未必是真相——大单可能是幌子,撤单可能是陷阱。

好了,这一章的内容就到这里。订单簿的基础打牢了,后面讲限价订单簿的博弈策略、冰山订单、闪电交易这些高级话题时,你才能跟得上。

专注资料整理