休市提醒日股将于 2026-11-03 休市(文化日),距今天还有 5 天。全部公告
文章

Level 2 深度数据:什么时候真的需要它,什么时候是过度采购

Level 1 告诉你「价格是多少」,Level 2 告诉你「这个价格能吃下多少量」。本文给出五问决策清单,说明三类不需要 Level 2 的场景、被低估的工程复杂度成本,以及用 Level 1 数据做需求验证的 Python 实现。

「要不要上 Level 2?」是行情选型里最常见的纠结之一。它通常不是成本问题,而是能力焦虑——担心没有深度数据会「错过什么」。但 Level 2 的数据量、存储成本与工程复杂度都远高于 Level 1,买错方向的代价很实在。

这篇文章给一个判断框架:Level 2 到底解决什么问题,以及什么时候你其实不需要它。

Level 1 与 Level 2 的本质区别

维度Level 1Level 2
内容最优买价、最优卖价、最新成交价、成交量多档买卖盘口,含各档价格与挂单量
能回答的问题现在成交在什么价格这个价格的成交能承接多大规模
数据量级基准显著更高,随档位数量与更新频率放大
更新频率较低盘口每次变动都可能触发更新
典型用途行情展示、估值、信号生成流动性评估、大单拆分、微观结构研究

核心差异可以概括成一句话:Level 1 告诉你「价格是多少」,Level 2 告诉你「这个价格能吃下多少量」。

Level 2 真正解决的问题

只有三类问题必须用 Level 2 才能回答:

问题一:这笔单子会不会显著推动价格

Level 1 只能看到最优价上的挂单量。如果你要成交的规模超过最优档的挂单量,价格会向下一档滑动,但 Level 1 无法告诉你滑到哪里、总成本是多少。这是 Level 2 最不可替代的用途。

问题二:盘口是否真实

盘口挂单可能包含虚假流动性(挂单后快速撤单)。只看最优档无法判断这个报价是否稳固;多档盘口的挂单分布能提供更多线索。

问题三:微观结构研究

订单流不平衡、盘口压力、价差动态等研究需要多档数据。这类需求本身就要求 Level 2。

三类不需要 Level 2 的场景

反过来看,以下场景买 Level 2 通常是浪费:

  1. 行情展示与看板:用户需要看价格与涨跌幅,不需要看五档盘口。绝大多数面向普通用户的行情界面用 Level 1 就够了。
  2. 中低频策略:按日或按小时决策的策略,最优价的信息量已经足够,盘口深度不会改变信号。
  3. 估值与风控快照:组合估值、风险敞口计算用最新成交价即可,不需要盘口结构。

这三类的共同点是:决策不依赖「能成交多少」,只依赖「成交在什么价格」。 只要满足这一条,Level 2 就是过度采购。

成本不止是订阅费

Level 2 的真实成本包含四块,后三块经常被忽略:

成本项说明
订阅费用通常只在最高档套餐开放
传输与处理盘口更新频率高,消息量远大于 Level 1
存储多档盘口的历史数据体积显著更大
工程复杂度需要盘口重建、档位对齐、异常盘口过滤等额外逻辑

其中工程复杂度最容易被低估。多档盘口不是「多几个字段」——它是状态型的:你需要按序应用增量更新来重建盘口,处理乱序、缺口和快照对齐。这套逻辑的开发和维护成本往往超过订阅费本身。

决策清单

回答以下问题,如果全部为「否」,就不需要 Level 2:

  1. 你的策略是否会下超过最优档挂单量的单?
  2. 你是否需要评估「以当前价格能成交多少」而不只是「当前价格是多少」?
  3. 你是否需要判断盘口报价的真实性(虚假流动性)?
  4. 你是否在做订单流或微观结构相关的研究?
  5. 你是否有团队能维护盘口重建与异常过滤这套工程逻辑?

第 5 条是很多团队的盲点:有能力消费 Level 2 数据,不等于有能力正确使用它。 如果没人维护盘口重建逻辑,拿到多档数据也只能当摆设。

Python:先用 Level 1 数据做一次需求验证

在升级之前,可以用 Level 1 数据做一次粗略验证:如果按最优价挂单量估算,你的目标单量已经频繁超过最优档,那 Level 2 才有意义。

Python
import httpx

API_KEY = "your_api_key"
BASE = "https://api.tiqex.io/api/v1/market"

# 你的典型单量(以股数或合约数为单位)
TARGET_ORDER_SIZE = 5_000


def assess_depth_need(codes: list[str], order_size: int) -> None:
    """用 Level 1 的 bid/ask 量做一次粗筛,判断是否需要 Level 2。"""
    resp = httpx.get(
        f"{BASE}/quote",
        params={"codes": ",".join(codes)},      # 单次最多 50 个 codes
        headers={"X-API-Key": API_KEY},
        timeout=10,
    )
    rows = resp.json().get("data", [])

    over = 0
    for r in rows:
        if r.get("unavailable"):
            print(f"{r.get('code'):<12} 数据不可用,跳过")
            continue
        # Level 1 只给出最优档量,用较小的一侧作为保守估计
        top_size = min(v for v in (r.get("bidSize"), r.get("askSize")) if v is not None)             if (r.get("bidSize") or r.get("askSize")) else None

        if top_size is None:
            print(f"{r.get('code'):<12} 无盘口量字段,需人工确认")
            continue

        if order_size > top_size:
            over += 1
            print(f"{r.get('code'):<12} 单量 {order_size} > 最优档 {top_size}  → 需要深度")
        else:
            print(f"{r.get('code'):<12} 单量 {order_size} ≤ 最优档 {top_size}  → Level 1 足够")

    print(f"\n{over}/{len(rows)} 个标的会击穿最优档")
    if over == 0:
        print("结论:当前单量下 Level 2 不是必需品")
    else:
        print("结论:存在价格滑点风险,值得评估 Level 2")


assess_depth_need(["AAPL", "MSFT", "NVDA"], TARGET_ORDER_SIZE)

这段代码的逻辑是:用「单量是否超过最优档挂单量」作为是否需要深度的第一层筛选。 如果所有标的的最优档都远大于你的单量,Level 2 带来的额外信息对你的决策没有影响。

需要说明的是,盘口量字段的可用性取决于套餐权限与市场,如果返回为空说明当前权限下拿不到该字段,需要先确认接口的实际返回结构。

务实的结论

  1. 先用 Level 1 验证需求:如果单量从未超过最优档,Level 2 不解决问题。
  2. 明确触发条件:把「单量超过最优档」或「需要评估流动性」设为升级 Level 2 的明确触发条件,而不是凭感觉升级。
  3. 先评估工程能力:盘口重建、档位对齐与异常过滤的开发维护成本往往高于订阅费。
  4. 混合使用:对少数需要深度的标的启用 Level 2,其余继续用 Level 1。

常见问题

Level 2 数据一定比 Level 1 好吗?

不是。Level 2 提供更多信息,但成本更高、工程复杂度更大。如果决策不依赖「能成交多少」,Level 1 的最优价信息已经足够。

做高频交易是不是必须用 Level 2?

高频策略通常确实需要盘口深度,但前提是团队有能力处理盘口重建、增量更新与异常过滤。如果缺少这套工程能力,拿到数据也无法正确使用。

Level 2 的盘口数据可以直接拿来用吗?

不能直接使用。多档盘口是状态型数据,需要按序应用增量更新来重建,并处理乱序、缺口与快照对齐。这是 Level 2 最大的工程成本来源。

怎么判断我的单量是否真的需要深度?

用 Level 1 的最优档挂单量做粗筛:如果你的典型单量频繁超过最优档挂单量,价格滑点风险显著,才值得评估 Level 2。

可以只对部分标的启用 Level 2 吗?

可以,而且推荐。对流动性较差或单量较大的少数标的启用深度数据,其余标的继续用 Level 1,是成本与效果的合理平衡。

下一步

先回答决策清单里的五个问题,再决定是否升级。Level 1 与 Level 2 的概念差异见 Level 1 与 Level 2 对比;各套餐的市场权限与深度数据开放情况见 套餐定价;如果你在做流动性评估或大单拆分,可参考 交易平台方案;盘口相关的字段定义见 多市场行情接口文档。