休市提醒日股將於 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 對比;各套餐的市場權限與深度數據開放情況見 套餐定價;如果你在做流動性評估或大單拆分,可參考 交易平臺方案;盤口相關的字段定義見 多市場行情接口文檔。