在日内策略、网格交易或算法执行(例如 TWAP / VWAP)中,单纯的日K线数据已经无法满足高频决策的诉求[8]。交易员需要捕捉更细颗粒度的盘口深度信息(Level 2 五档或十档)以判断短期的资金博弈。
本文将介绍如何使用 QuantDash Python SDK,批量获取实时行情、提取五档盘口深度数据[9][10],并计算一个经典的短线技术指标——盘口不平衡率 (Order Book Imbalance, OBI),从而展示如何在生产环境进行实时行情监控。
在短线交易中,买盘挂单与卖盘挂单的相对力量常常暗示了价格在未来数秒或数分钟内的潜在走势。 盘口不平衡率 (OBI) 就是基于此逻辑设计的指标,其最基础的计算公式如下:

首先确保安装了 quantdash SDK,并向官方申请好 API 密钥(可在 QuantDash 官网 获取)[1]。
pip install quantdash pandas以下示例演示如何获取单只标的(例如 AAPL.US 或港股 00700.HK)的五档深度,并实时计算其 OBI 指标[9][11]:
import os
import time
from quantdash import QuantDash
# 初始化客户端
api_key = os.getenv("QUANTDASH_API_KEY", "your_api_key_here")
qd = QuantDash(api_key=api_key)
def calculate_obi_5(symbol: str):
"""
获取指定标的的五档盘口数据,并计算 OBI
"""
try:
# 获取深度盘口数据
depth = qd.depth.get(symbol)
if not depth:
print(f"未能获取 {symbol} 深度数据")
return None
# 提取买五和卖五的挂单量
# QuantDash 返回的 depth 数据通常包含 bid_sizes 和 ask_sizes 列表
bid_sizes = depth.get("bid_sizes", [])
ask_sizes = depth.get("ask_sizes", [])
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 0.0
# 计算 OBI
obi = (total_bid_volume - total_ask_volume) / (total_bid_volume + total_ask_volume)
# 提取买一价与卖一价
bid_prices = depth.get("bid_prices", [])
ask_prices = depth.get("ask_prices", [])
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
# 模拟一个每 5 秒轮询一次的监控循环
if __name__ == "__main__":
monitor_symbol = "AAPL.US"
print(f"开始监控 {monitor_symbol} 盘口不平衡度...")
try:
for _ in range(5): # 示例仅运行5次
metrics = calculate_obi_5(monitor_symbol)
if metrics:
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] "
f"标的: {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(5)
except KeyboardInterrupt:
print("监控已手动终止。")除了深度盘口,如果我们想对自选股池或全市场进行快速扫描(比如检测全市场哪些股票正在异动),需要用到批量实时行情接口[9][10]。
以下代码展示如何使用 universes 机制批量拉取实时快照:
from quantdash import QuantDash
qd = QuantDash(api_key="your_api_key_here")
# 批量获取 A 股(或者指定股票池)的最新实时价格
try:
# 传入 universes 参数(支持 A 股市场 'CN_Stock')
quotes_df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
# 过滤出你关心的列进行展示
if not quotes_df.empty:
# 假设我们筛选出涨幅最大的前 5 只标的
# 实际开发时可以利用这一步实现自选股监控或动态预警
print("批量全市场快照获取成功,样本数据预览:")
print(quotes_df[["symbol", "last_price", "change_percent", "volume"]].head())
except Exception as e:
print(f"批量拉取行情失败: {e}")如果你打算将上述实时监控系统投入实战,建议将其部署在云端服务器(如腾讯云 Lighthouse),以保证 24 小时不间断稳定运行:
参考文档:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。