别用1D线调参了!Python计算五档盘口OBI捕捉资金信号

用户头像mx_****zqklr
2026-07-17 发布

在日线(1d)甚至小时线(1h)上折腾指标,是绝大多数个人量化开发者亏损的根源。无论你怎么优化 MACD、RSI 还是布林带,它们本质上都是对已发生价格的平滑滞后反应**。**

对于日内短线、动量突破或做市策略来说,真正的“圣杯”隐藏在未成交的委托单中。本文将带大家跳出 K 线的低频思维,用 Python 接入原生五档盘口(Level 2 简版深度),通过计算**盘口不平衡度(Order Book Imbalance, OBI)**指标,实时捕捉多空双方在微秒级的筹码博弈信号。

什么是五档盘口?它是买一到买五、卖一到卖五的实时挂单价格和挂单数量。
大部分开源库(如 AkShare、efinance)对于这种高频数据的支持极差:要么是爬虫抓取延迟高(达秒级),要么是频繁被源站封 IP,根本无法支撑实盘监控。

而我们今天使用的 QuantDash SDK,提供了原生的高吞吐深度盘口接口 qd.depth.get() [2],直接返回毫秒级对齐的五档报价和委托量 [2]。

OBI 是高频交易中最经典的微观结构指标,其计算公式非常直观:

897eedde906430ff7da560d39e92682a.png

  • OBI 接近 1 时:说明买方挂单量远大于卖方,下方支撑极强,价格短期向上概率大。
  • OBI 接近 -1 时:说明上方抛压极重,买盘稀薄,价格短期大概率下行。

下面我们编写一段标准的、非阻塞的盘口实时监控脚本。我们会拉取美股特斯拉(TSLA.US)或 A股贵州茅台(600519.SH)的最新五档盘口 [2],动态计算并打印其 OBI 指标。

import time
from quantdash import QuantDash

# 初始化 QuantDash 客户端(可前往 quantdash.net 免费获取免信用的 API Key)
qd = QuantDash(api_key="your_api_key_here")

def calculate_obi_indicator(symbol: str) -> dict:
    """
    获取指定标的的五档盘口并计算 OBI 指标
    """
    try:
        # 获取毫秒级五档深度数据
        depth = qd.depth.get(symbol)
        if not depth:
            print(f"[-] 无法获取 {symbol} 的深度数据")
            return None
          
        # 提取买五/卖五挂单量
        bid_sizes = depth.get("bid_sizes", [])
        ask_sizes = depth.get("ask_sizes", [])
        bid_prices = depth.get("bid_prices", [])
        ask_prices = depth.get("ask_prices", [])
      
        if not bid_sizes or not ask_sizes:
            print(f"[-] {symbol} 盘口挂单为空,可能处于非交易时段")
            return None
          
        # 统计前五档委托总量
        total_bid_volume = sum(bid_sizes[:5])
        total_ask_volume = sum(ask_sizes[:5])
      
        if (total_bid_volume + total_ask_volume) == 0:
            return None
          
        # 计算 OBI
        obi = (total_bid_volume - total_ask_volume) / (total_bid_volume + total_ask_volume)
      
        # 获取当前的买一价和卖一价
        bid_1 = bid_prices[0] if bid_prices else 0.0
        ask_1 = ask_prices[0] if ask_prices else 0.0
      
        return {
            "symbol": symbol,
            "bid_1": bid_1,
            "ask_1": ask_1,
            "total_bid_vol": total_bid_volume,
            "total_ask_vol": total_ask_volume,
            "obi": round(obi, 4)
        }
    except Exception as e:
        print(f"[-] 计算 OBI 异常: {e}")
        return None

if __name__ == "__main__":
    target_stock = "TSLA.US"  # 可切换为 "600519.SH" 或 "00700.HK"
    print(f"[+] 开始实时监控 {target_stock} 的盘口博弈信号...")
  
    # 模拟盘中高频轮询(每 3 秒获取一次快照)
    for _ in range(10):
        metrics = calculate_obi_indicator(target_stock)
        if metrics:
            timestamp = time.strftime('%H:%M:%S', time.localtime())
            print(
                f"[{timestamp}] 标的: {metrics['symbol']} | "
                f"买一/卖一: {metrics['bid_1']}/{metrics['ask_1']} | "
                f"买五量: {metrics['total_bid_vol']} | "
                f"卖五量: {metrics['total_ask_vol']} | "
                f"OBI 指标: {metrics['obi']}"
            )
        time.sleep(3)

在利用五档盘口构建实盘策略时,请务必注意以下工程细节:

  • 虚假挂单(Spoofing):主力资金常常在买四、买五或卖四、卖五挂出巨量单,但一临近成交便迅速撤单。因此,不能仅看绝对的 OBI 数值,更要观察其连续变化率。如果 OBI 突然从 +0.8 骤降至 0 附近,大概率发生了诱多后的撤单。
  • 多线程并发:在全市场扫描异动股时,请避免串行循环获取。QuantDash 提供了 universes=["CN_Stock"] 的整包批量获取机制 [1],可以用极少的请求带宽拉取全 A 股行情,避免触发流控。

如果你已经厌倦了日复一日去调参那些失效的 K 线指标,不如从底层盘口数据切入,看看市场真正的“挂单肌肉”。前往 pip install quantdash,通过极简的几行 Python,给自己的高频或日内策略装上一双“显微镜”。

相关链接 :

评论