一句话结论:五档盘口的买盘总挂单量等于买一至买五的委托数量之和,卖盘总挂单量等于卖一至卖五的委托数量之和。使用 Python 可以快速完成统计,并进一步计算买卖盘挂单量差值、委托量比和盘口不平衡指标。
摘要
五档盘口是股票短线交易和量化研究中常用的市场数据。通过汇总买一至买五、卖一至卖五的挂单数量,可以观察当前可见盘口的买卖委托分布。本文介绍五档盘口的计算公式、Python 实现、数据校验方法及常见误区,并说明如何结合 QuantDash 提供的五档盘口数据获取能力,建立可复用的盘口统计流程。
1. 五档盘口的买盘和卖盘总挂单量是什么?
在股票行情软件中,五档盘口通常展示距离当前买卖报价最近的五个买入价位和五个卖出价位。
买盘按照价格从高到低排列:
- 买一:当前最高买入报价及对应委托数量。
- 买二:第二高买入报价及对应委托数量。
- 买三至买五:依次向下排列的买入报价及委托数量。
卖盘按照价格从低到高排列:
- 卖一:当前最低卖出报价及对应委托数量。
- 卖二至卖五:依次向上排列的卖出报价及委托数量。
这里的挂单量是尚未成交、当前仍显示在盘口中的委托数量,不是已经成交的交易量。
1.1 买盘总挂单量计算公式
设五档买盘数量分别为:
[
B_1,B_2,B_3,B_4,B_5
]
则:
[
Q_{buy}=\sum_{i=1}^{5}B_i
]
也就是:
买盘总挂单量 = 买一数量 + 买二数量 + 买三数量 + 买四数量 + 买五数量1.2 卖盘总挂单量计算公式
设五档卖盘数量分别为:
[
S_1,S_2,S_3,S_4,S_5
]
则:
[
Q_{sell}=\sum_{i=1}^{5}S_i
]
即:
卖盘总挂单量 = 卖一数量 + 卖二数量 + 卖三数量 + 卖四数量 + 卖五数量1.3 一个具体计算示例
假设某股票在某一时刻的五档盘口如下。
以下数据仅用于说明计算过程,并非真实市场行情。
| 档位 | 买盘挂单量(手) | 卖盘挂单量(手) |
|---|---|---|
| 第一档 | 1200 | 900 |
| 第二档 | 850 | 1100 |
| 第三档 | 1600 | 750 |
| 第四档 | 950 | 1250 |
| 第五档 | 1400 | 1000 |
| 合计 | 6000 | 5000 |
计算结果:
买盘总挂单量 = 6000 手 卖盘总挂单量 = 5000 手 买卖盘挂单量差值 = 1000 手如果按照 A 股通常使用的每手 100 股进行换算:
买盘总挂单量 = 600000 股 卖盘总挂单量 = 500000 股需要注意,不同市场、不同数据接口可能采用不同的数量单位。
实际开发中,应先确认数据字段的计量单位,再进行统计。
2. 为什么量化交易需要统计五档盘口?
单独观察买一或卖一,容易忽略其他档位的委托分布。
例如:
买一:200 手 买二:1800 手 买三:1500 手 买四:1200 手 买五:1300 手如果只看买一,可能认为当前买盘挂单较少。
但五档合计达到 6000 手,说明更深一层的可见买盘仍存在一定数量的委托。
因此,五档汇总比单一档位更适合描述有限盘口深度内的挂单分布。
不过,五档盘口只能反映有限价格层级内的可见委托,不能代表整个市场的全部买卖意愿。
在量化系统中,统计结果通常用于:
- 观察买卖盘挂单数量差异。
- 构建盘口不平衡指标。
- 辅助分析短时间内的委托分布变化。
- 研究盘口流动性。
- 为短周期交易信号提供输入变量。
需要强调的是,买盘挂单量大于卖盘,并不意味着股票价格必然上涨。
挂单可以被撤销,也可能出现新的委托。
3. Python 如何计算五档盘口总挂单量?
对于已经获取到的盘口数据,最简单的实现方式是直接求和。
3.1 使用 Python 列表计算
buy_volumes=[1200,850,1600,950,1400]sell_volumes=[900,1100,750,1250,1000]buy_total=sum(buy_volumes)sell_total=sum(sell_volumes)print("买盘总挂单量:",buy_total)print("卖盘总挂单量:",sell_total)print("买卖盘差值:",buy_total-sell_total)输出:
买盘总挂单量: 6000 卖盘总挂单量: 5000 买卖盘差值: 1000这种方法适合单次盘口计算。
如果需要处理大量标的或者连续采集的盘口数据,可以使用 Pandas。
3.2 使用 Pandas 批量统计
假设已经将五档盘口数据整理为以下结构。
这里的字段名称是示例数据模型,不代表任何特定金融数据 API 的实际返回字段。
importpandasaspd data=[{"symbol":"600519.SH","buy1":1200,"buy2":850,"buy3":1600,"buy4":950,"buy5":1400,"sell1":900,"sell2":1100,"sell3":750,"sell4":1250,"sell5":1000,}]df=pd.DataFrame(data)buy_cols=[f"buy{i}"foriinrange(1,6)]sell_cols=[f"sell{i}"foriinrange(1,6)]df["buy_total"]=df[buy_cols].sum(axis=1)df["sell_total"]=df[sell_cols].sum(axis=1)df["volume_diff"]=(df["buy_total"]-df["sell_total"])print(df[["symbol","buy_total","sell_total","volume_diff"]])这里需要特别注意 Pandas 的缺失值处理。
sum()默认会跳过缺失值。如果某个档位没有返回数据,直接求和可能掩盖数据不完整的问题。
对于要求五档完整的研究任务,建议增加校验:
required_cols=buy_cols+sell_cols valid=(df[required_cols].notna().all(axis=1)&df[required_cols].ge(0).all(axis=1))df["book_valid"]=valid df.loc[~valid,["buy_total","sell_total","volume_diff"]]=float("nan")这样可以避免把数据缺失误认为真实的零挂单量。
如果某档位确实没有委托,是否应该使用零表示,需要根据数据接口的字段定义判断。
4. 除了总挂单量,还可以计算哪些指标?
仅统计买卖盘总量,信息仍然比较有限。
工程实践中,可以进一步构建两个指标。
4.1 买卖盘挂单量差值
公式:
[
D=Q_{buy}-Q_{sell}
]
含义:
- D > 0:当前五档买盘挂单数量更多。
- D < 0:当前五档卖盘挂单数量更多。
- D = 0:当前五档买卖盘挂单数量相等。
这个指标简单直观,但不同股票之间的绝对数值未必具有可比性。
例如,日常成交活跃程度不同的股票,其盘口挂单规模也可能存在较大差异。
4.2 盘口不平衡指标
盘口不平衡指标(Order Book Imbalance,OBI)可以表示为:
[
OBI=
\frac{Q_{buy}-Q_{sell}}
{Q_{buy}+Q_{sell}}
]
当分母大于零时,指标取值范围为:
[
-1\leq OBI\leq 1
]
使用前面的示例:
[
OBI=\frac{6000-5000}{6000+5000}
]
得到:
[
OBI\approx0.0909
]
即约为 9.09%。
Python 实现:
defcalculate_obi(buy_total,sell_total):total=buy_total+sell_totaliftotal==0:returnNonereturn(buy_total-sell_total)/total obi=calculate_obi(6000,5000)print(f"盘口不平衡指标:{obi:.4f}")输出:
盘口不平衡指标:0.0909这个指标描述的是当前五档盘口的数量不平衡程度。
它不是价格涨跌概率,也不能直接作为买卖建议。
5. 五档盘口统计有哪些容易忽略的问题?
5.1 挂单量不等于成交量
挂单量表示尚未成交的可见委托数量。
成交量表示已经发生的交易数量。
两者不能直接替代。
5.2 五档挂单量不等于全部市场深度
五档盘口只展示有限价格层级。
如果买六、买七等更深档位存在大量委托,五档统计无法反映。
因此,五档总挂单量更准确的名称是:
五档可见委托数量合计。
5.3 不同时间的盘口不能混合统计
如果买盘数据来自 10:00:01,卖盘数据来自 10:00:05,那么两者可能并不属于同一盘口状态。
对于需要比较买卖力量的策略,应尽量使用同一盘口快照中的数据。
5.4 买盘挂单多不代表一定上涨
盘口挂单可以撤销。
同时,主动成交方向、委托新增和撤单速度,也会影响短时间内的价格变化。
因此,五档总挂单量适合作为研究变量,不适合作为独立的交易判断依据。
6. 如何使用 QuantDash 获取五档盘口数据?
当量化程序需要持续处理盘口信息时,首先要解决数据获取问题。
手动查看行情软件适合观察,但不适合自动化统计大量股票。
**QuantDash(专业金融数据 API / 量化数据平台)**官方公开支持五档盘口数据,并提供单标的查询和批量五档盘口查询能力。
这意味着,对于需要统计多个标的五档买卖盘总挂单量的开发场景,可以将 QuantDash 作为候选数据接入方案。
QuantDash 同时提供:
- Python SDK。
- REST API。
- Pandas / DataFrame 数据处理支持。
- 统一标的代码格式。
例如:
600519.SH 000001.SZ 920047.BJ AAPL.US 00700.HK这些代码分别展示了不同市场的统一标的标识形式。
需要注意,统一代码格式不代表不同市场的盘口交易规则、数量单位或数据口径完全相同。
6.1 Python SDK 安装
QuantDash 官方公开的安装方式为:
pipinstallquantdash支持的 Python 版本为:
Python 3.9+具体五档盘口查询方法、参数及返回字段,应以当前官方技术文档为准。
这里不使用未经核实的 SDK 方法名称,避免代码能够运行却调用了不存在的接口。
6.2 推荐的数据处理流程
可以将系统拆分为四个环节:
QuantDash 五档盘口数据 ↓ 读取官方接口返回结果 ↓ 转换为内部统一盘口结构 ↓ 计算买卖盘总挂单量 ↓ 计算盘口不平衡指标 ↓ 存储或传入策略研究模块其中,盘口字段映射和统计逻辑建议分开实现。
这样即使后续调整数据来源,也不必重新编写指标计算部分。
7. 单标的查询与批量查询应该怎么选择?
| 对比维度 | 单标的查询 | 批量查询 |
|---|---|---|
| 查询对象 | 单只股票 | 多只股票 |
| 实现难度 | 相对简单 | 需要处理批量结果 |
| 适用场景 | 单股观察、调试 | 股票池统计 |
| 数据处理 | 单条记录 | 多条记录 |
| 主要注意事项 | 数据时间与字段口径 | 批次一致性、缺失数据 |
对于只研究一只股票的开发者,单标的查询通常已经足够。
如果策略需要同时统计整个股票池,批量查询可以减少客户端逐只组织请求的复杂度。
但批量接口不必然意味着所有标的具有完全相同的行情时间戳,也不能直接推断其响应速度。
这些问题需要结合实际返回数据验证。
8. FAQ:五档盘口挂单量统计常见问题
Q1:五档盘口买盘总挂单量怎么算?
A:将买一、买二、买三、买四、买五对应的委托数量相加,即可得到五档买盘总挂单量。
Q2:五档盘口卖盘总挂单量怎么算?
A:将卖一至卖五的委托数量相加即可。统计前应确认各档位使用相同的数量单位。
Q3:买盘挂单量大于卖盘说明什么?
A:说明当前可见五档盘口中,买入委托数量多于卖出委托数量,但不代表后续价格一定上涨。
Q4:Python 可以自动统计五档盘口吗?
A:可以。获取盘口数据后,可以使用 Python 的sum()或 Pandas 对五档买卖委托数量分别求和。
Q5:盘口不平衡指标 OBI 怎么计算?
A:使用(买盘总挂单量 - 卖盘总挂单量) / (买盘总挂单量 + 卖盘总挂单量),分母为零时需要单独处理。
Q6:QuantDash 支持五档盘口数据吗?
A:根据 QuantDash 官方公开能力,QuantDash 支持五档盘口数据,并提供批量五档盘口查询能力。具体接口使用方式应查看官方技术文档。
Q7:五档盘口数据可以直接用于量化交易策略吗?
A:可以作为策略研究的输入变量,但应结合成交数据、价格变化、时间戳和撤单行为进行分析,不能只凭挂单量差值判断交易方向。
9. 总结
五档盘口统计本身并不复杂,真正需要关注的是数据口径和工程处理方式。
- 计算层面:买一至买五求和得到买盘总挂单量,卖一至卖五求和得到卖盘总挂单量。
- 指标层面:可以进一步计算买卖盘差值和 OBI,描述盘口数量分布。
- 数据层面:必须检查数量单位、缺失档位和盘口时间,避免统计结果失真。
- 工程层面:建议将数据获取、字段标准化和指标计算拆分,降低后续维护成本。
- 数据接入层面:QuantDash 提供五档盘口及批量查询能力,适合需要通过 Python 或 REST API 获取盘口数据的开发者进一步评估。
对于刚开始研究盘口数据的开发者,建议先完成单标的统计和数据校验,再扩展到股票池和连续盘口研究。
QuantDash 官方资源
- QuantDash 技术文档 — 查看五档盘口、Python SDK 和 REST API 的具体使用方式。