订单簿基础:限价订单与市价订单、订单簿的构建与可视化、买卖盘口深度分析

做市商这行,说白了就是跟订单簿打交道。你每天盯着的那个买卖挂单界面,就是你的战场。我刚开始做量化的时候,觉得订单簿不就是一堆价格和数量嘛,有什么好看的?后来被市场狠狠教育了几次,才明白这里面门道深着呢。

今天咱们就把订单簿这块地基打牢。你想想看,如果连订单簿都看不懂,那后面的微观结构分析根本无从谈起。

限价订单 vs 市价订单:两种最基本的武器

先说说最基础的两个概念。限价订单和市价订单,就像你手里的两把刀,用法完全不同。

限价订单,就是你指定一个价格,挂在那里等。比如你觉得某只股票只值10块钱,你就挂个10块的买单。价格到了就成交,到不了就挂着。我习惯把限价单叫做「耐心单」——你得等,等市场来找你。

市价订单,就是不管三七二十一,按当前市场上最好的价格立刻成交。你想买,就按卖一的价格吃进去;想卖,就按买一的价格砸出去。这种单子我管它叫「急脾气单」——不挑价格,只求速度。

这里有个坑,我踩过。有一次做回测,我用了大量市价单,结果发现滑点吃掉了我一半的利润。为什么?因为市价单在流动性差的时候,会一路吃穿好几个价位,成交均价远高于你看到的卖一价。

核心区别一句话总结:

  • 限价单:你控制价格,但不确定能否成交
  • 市价单:你确定成交,但控制不了价格

做市商主要用限价单。我们赚的就是买卖价差,所以必须挂单等别人来吃。但有时候也会用市价单来调整库存——比如手上货太多了,怕价格跌,就市价砸出去一部分。

订单簿的构建:从零开始搭一个

订单簿长什么样?说白了就是两个列表:买单列表和卖单列表。买单从高到低排,卖单从低到高排。

我给大家写个简单的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 get_top_of_book(self):
        best_bid = max(self.bids.keys()) if self.bids else None
        best_ask = min(self.asks.keys()) if self.asks else None
        return best_bid, best_ask
    
    def get_spread(self):
        bid, ask = self.get_top_of_book()
        if bid and ask:
            return ask - bid
        return None

这段代码虽然简单,但已经能跑起来了。实际交易所的订单簿比这个复杂得多——要考虑订单撤销、部分成交、冰山订单等等。但核心逻辑就是这个:价格优先、时间优先。

我记得有一次帮一家小交易所做系统,他们的订单簿是用Redis的Sorted Set实现的。当时我就想,这玩意儿能扛住高频交易吗?后来发现,在低并发场景下其实够用。但你要是做纳斯达克级别的,还是得用C++自己撸一个。

订单簿可视化:把数据变成画面

光看数字太枯燥了。我习惯把订单簿画出来,一眼就能看出市场在哪个价位有支撑、哪个价位有压力。

最常见的可视化方式就是深度图。横轴是价格,纵轴是累计挂单量。买单从左边往右累加,卖单从右边往左累加。两条线一交叉,中间那个缺口就是买卖价差。

下面我用SVG画一个简单的订单簿深度图,展示买卖盘口的分布情况。

订单簿深度图示例 累计挂单量 低价 高价 价格 价差 买一 卖一 买单深度 卖单深度

这张图里,绿色是买单深度,红色是卖单深度。中间那个缺口就是价差。你看买单那边,价格越低累计量越大,说明下方有支撑。卖单那边,价格越高累计量越大,说明上方有压力。

我每天开盘前都会扫一眼深度图。如果买单深度明显大于卖单深度,说明市场情绪偏多,我会倾向于多挂一些买单。反过来,如果卖单深度压过买单,那就要小心了。

买卖盘口深度分析:看穿市场的底牌

盘口深度,说白了就是看各个价位上到底有多少单子。这玩意儿能告诉你很多信息。

我给大家列几个常用的深度指标:

指标 计算公式 含义
买卖深度比 总买单量 / 总卖单量 大于1说明买方力量强,小于1说明卖方力量强
加权深度 ∑(价格 × 数量) / ∑数量 反映挂单的加权平均价格,比单纯看买卖一更有参考价值
深度斜率 相邻价位挂单量的变化率 斜率陡峭说明该价位有强支撑/压力,斜率平缓说明流动性分散
价差深度比 价差 / 买卖一平均挂单量 衡量市场流动性效率,值越小说明流动性越好

这些指标怎么用?我举个例子。有一次我发现某只股票的买卖深度比突然从1.2掉到0.6,但价格没怎么动。这说明有人在悄悄挂卖单,但还没开始砸盘。我赶紧把库存减了一半,果然半小时后价格跳水了。

我的一个小技巧:

别只看买卖一那几档。有时候大单藏在后面几档,你看买卖一觉得风平浪静,其实暗流涌动。我习惯看前10档的累计深度,这样能更早发现大资金的动向。

还有一个东西叫「订单簿不平衡度」。简单说就是看买单和卖单在某个价格区间内的力量对比。公式是:

不平衡度 = (买单总量 - 卖单总量) / (买单总量 + 卖单总量)

这个值在-1到1之间。正数说明买方占优,负数说明卖方占优。绝对值越大,力量越悬殊。我一般设个阈值,比如超过0.6就认为市场有强烈的方向性倾向,会相应调整我的做市策略。

注意:

订单簿数据是快照,不是流。你看到的那一瞬间的深度,下一秒可能就变了。尤其是高频交易环境下,订单簿的变化速度远超你的想象。我曾经因为依赖过时的深度数据,在股指期货上吃了大亏。所以,做深度分析一定要结合订单簿的更新频率来看。

嗯,说到这,订单簿的基础内容差不多就这些了。这些东西看着简单,但真正用好需要大量实践。我建议你找个交易所的实时数据,自己搭个订单簿可视化工具,每天盯着看几个小时。慢慢地,你就能从那些跳动的数字里读出市场的语言了。

专注资料整理