🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

为什么 JoinQuant 中 get_bars 获取 09:30 的成交量为 0?如何正确获取开盘成交量?

joinquant | 发布时间: 2026/6/5
以下内容由 EasyQuant 生成。

问题描述

get_bars取不到开盘成交量(09:30)

array = get_bars(stock, 1, unit='1m',fields=['open','close','volume'],include_now=True)

print(array )

输出为:
(xx.xx,xx.xx,0)

怎样才能获取开盘时的成交量?谢谢!

解决方案

您好!在 JoinQuant 平台中,使用 get_bars 获取 09:30 的数据时成交量为 0 是平台 API 的默认设定。根据官方文档说明:“get_bars 开盘时取的 bar 高开低收都是当天的开盘价,成交量成交额为 0”

这是因为在 A 股市场中,一分钟 K 线实际上是没有 09:30 这一根的。第一根 1 分钟 K 线的时间标识是 09:31,它包含了 09:25:00 到 09:30:59 的所有交易数据(即集合竞价加上开盘第一分钟的成交)。

要获取开盘时的成交量,您可以通过以下两种方法来实现:

方法一:获取 09:31 的 1 分钟 Bar(包含集合竞价和开盘第一分钟)

如果您想获取开盘第一根 K 线的完整成交量,应该获取时间标识为 09:31 的 bar。在策略中,您可以将运行时间设置在 09:31 或之后来获取。

# 获取 09:31 的 1 分钟 K 线数据
array = get_bars(stock, 1, unit='1m', fields=['date', 'open', 'close', 'volume'], include_now=False, end_dt='2023-10-10 09:31:00')
print(array)

注:这根 K 线的 volume 就是 09:25 集合竞价成交量加上 09:30:00-09:30:59 的连续竞价成交量之和。

方法二:使用 get_call_auction 获取纯集合竞价成交量

如果您仅仅是想获取 09:25 集合竞价产生的成交量,应该使用专门的集合竞价 API get_call_auction

from jqdata import *

# 获取指定日期的集合竞价数据
# 注意:当日的集合竞价数据最晚于 09:28 分返回
auction_data = get_call_auction(stock, start_date='2023-10-10', end_date='2023-10-10', fields=['time', 'current', 'volume'])

if not auction_data.empty:
    open_volume = auction_data['volume'].iloc[0]
    print(f"集合竞价成交量为: {open_volume}")

总结建议

  • 如果您的策略依赖于开盘第一分钟的完整 K 线(包含开盘价和初始成交量),请在 09:31 触发逻辑并获取上一分钟的 bar。
  • 如果您的策略需要利用集合竞价的成交量来做开盘前的决策,请在 09:28 到 09:30 之间使用 get_call_auction 函数获取。