第一章:订单簿与市场微观结构

做高频价差交易,说白了就是在跟市场微观结构打交道。我刚开始接触这个领域时,觉得订单簿就是个简单的买卖挂单列表,后来踩了不少坑才明白——这里面门道深着呢。

订单簿的构成:Level1 / Level2 / Level3

先说说订单簿的三个层级。很多新手分不清,我当年也迷糊过一阵子。

层级 数据内容 典型用途
Level 1 最优买卖价、最新成交价、成交量 简单行情展示
Level 2 多档买卖盘口(通常5-10档) 盘口深度分析
Level 3 逐笔委托、逐笔成交、完整订单簿 高频策略、订单簿重建

Level 1 就是最基础的行情。你打开任何一个交易软件,看到的买一卖一价格和成交量,就是 Level 1。说实话,做高频价差交易,光靠 Level 1 远远不够。

Level 2 就丰富多了。能看到买卖各档位的挂单量和价格。我个人习惯把 Level 2 数据当成市场的「心电图」——它能告诉你资金在哪个价位集结。

Level 3 是最高权限的数据。能看到每一笔委托的完整信息,包括委托ID、委托类型、时间戳等。嗯,这里要注意:不是所有交易所都提供 Level 3 数据,而且费用通常不低。

核心观点:做高频价差交易,至少需要 Level 2 数据。Level 3 是加分项,但不是必需品。

买卖盘口深度分析

盘口深度,说白了就是看「钱堆在哪」。我曾在项目中遇到过这样的情况:某个价位的挂单量突然暴增,但价格却没怎么动——这往往是机构在偷偷建仓。

分析盘口深度,我一般关注这几个指标:

  • 价差宽度:买卖最优价之间的差距。价差越小,流动性越好。
  • 深度斜率:从最优价往外,挂单量的变化速度。斜率陡峭说明市场深度不足。
  • 挂单集中度:前几档挂单量占总挂单量的比例。集中度高,说明关键价位有支撑或阻力。

举个例子。假设某股票当前买一价10.00元,挂单1000手;买二价9.99元,挂单500手;买三价9.98元,挂单200手。深度斜率就是(1000-500)/(10.00-9.99) = 50000手/分。这个值越大,说明市场越愿意在这个价位附近接盘。

实战技巧:当盘口深度出现「断层」时——比如买一有大量挂单,买二却突然很少——这往往是价格即将突破的信号。我曾经靠这个信号抓过好几次短线机会。

订单簿不平衡指标

订单簿不平衡(Order Book Imbalance)是我做高频策略时最常用的指标之一。它衡量的是买卖双方的力量对比。

最简单的计算公式:

Imbalance = (买盘总量 - 卖盘总量) / (买盘总量 + 卖盘总量)

取值范围在 -1 到 1 之间。正值表示买方强势,负值表示卖方强势。

但说实话,这个简单公式在实际交易中效果一般。我习惯用加权版本:

def weighted_imbalance(bids, asks, depth=5):
    """
    bids: [(price, volume), ...] 买盘列表
    asks: [(price, volume), ...] 卖盘列表
    depth: 考虑的档位数
    """
    bid_weight = sum(v / (i+1) for i, (p, v) in enumerate(bids[:depth]))
    ask_weight = sum(v / (i+1) for i, (p, v) in enumerate(asks[:depth]))
    
    if bid_weight + ask_weight == 0:
        return 0
    
    return (bid_weight - ask_weight) / (bid_weight + ask_weight)

为什么要加权?因为离最优价越近的挂单,对价格的影响越大。你想想看,买一挂1000手和买五挂1000手,意义能一样吗?

避坑指南:我曾经犯过一个错误——只看订单簿不平衡就开仓。后来发现,有些大资金会故意在某个价位挂大量单子制造假象,然后瞬间撤单。所以一定要结合成交数据一起看。

逐笔成交数据解析

逐笔成交数据(Tick-by-Tick Data)是高频交易的「原材料」。每一笔成交记录都包含:

  • 成交时间(精确到微秒甚至纳秒)
  • 成交价格
  • 成交量
  • 成交方向(买方主动还是卖方主动)
  • 成交编号

解析逐笔数据,我重点关注这几个维度:

  1. 成交方向:买方主动成交多,说明买方急迫;卖方主动成交多,说明卖方急迫。
  2. 大单识别:单笔成交量超过平均量3倍以上的,视为大单。大单往往意味着机构行为。
  3. 成交速度:单位时间内的成交笔数。速度突然加快,说明有资金在抢筹或出货。

举个例子,这是我常用的一个简单分析函数:

def analyze_tick_data(ticks, window_ms=100):
    """
    ticks: 逐笔成交数据列表
    window_ms: 时间窗口(毫秒)
    """
    # 按时间窗口分组
    windows = group_by_time(ticks, window_ms)
    
    for w in windows:
        buy_volume = sum(t.volume for t in w if t.side == 'buy')
        sell_volume = sum(t.volume for t in w if t.side == 'sell')
        trade_count = len(w)
        
        # 计算买卖压力比
        pressure_ratio = buy_volume / (buy_volume + sell_volume) if (buy_volume + sell_volume) > 0 else 0.5
        
        # 识别异常
        if pressure_ratio > 0.8:
            print(f"强买方压力,时间窗口内买方成交量占比{pressure_ratio:.2%}")
        elif pressure_ratio < 0.2:
            print(f"强卖方压力,时间窗口内卖方成交量占比{1-pressure_ratio:.2%}")

关键认知:订单簿是「静态快照」,逐笔成交是「动态过程」。两者结合,才能看清市场的真实面貌。

知识体系总览

下面这张图是我自己梳理的订单簿与市场微观结构的知识框架,你可以对照着理解:

订单簿与市场微观结构知识体系 订单簿构成 Level 1:最优买卖价 Level 2:多档盘口 Level 3:逐笔委托 核心分析方法 盘口深度分析 订单簿不平衡 逐笔成交解析 实战应用场景 价差套利策略 流动性预测 订单流分析

这张图把整个知识体系分成了三层:底层是订单簿的数据构成,中间层是分析方法,顶层是实战应用。每一层都依赖下一层提供的基础能力。

我的建议:刚开始学的时候,先把 Level 2 数据玩熟。别急着上 Level 3,数据量太大,容易迷失。我当年就是太贪心,结果被海量数据淹没了。

好了,这一章的内容就到这里。订单簿是高频交易的「眼睛」,把这块吃透了,后面的策略开发才能站得稳。


专注资料整理