问题描述
解决方案
在 JoinQuant(聚宽)平台中,获取股票早上 9:25 的集合竞价数据,主要使用 get_call_auction 函数。
该函数专门用于获取指定时间区间内交易日 09:25 的集合竞价快照数据。
核心函数说明
get_call_auction(security, start_date=None, end_date=None, fields=None)
- security: 标的代码(字符串)或标的代码列表(如
['000001.XSHE', '600000.XSHG'])。支持股票、指数、50ETF期权。 - start_date: 开始日期(字符串,如
'2023-01-01')。 - end_date: 结束日期(字符串,如
'2023-01-31')。 - fields: (可选) 需要获取的字段列表。如果不填,默认获取全部字段。
代码示例
以下代码展示了如何获取“平安银行”在指定日期范围内的集合竞价数据:
# -*- coding: utf-8 -*-
from jqdata import *
# 获取平安银行(000001.XSHE) 在 2023-06-01 到 2023-06-05 期间的集合竞价数据
# 默认获取所有字段
df = get_call_auction('000001.XSHE', start_date='2023-06-01', end_date='2023-06-05')
# 打印结果
print(df)
# 如果只需要特定字段(例如:时间、当前价、成交量、买一量、卖一量)
df_specific = get_call_auction(
['000001.XSHE', '600519.XSHG'],
start_date='2023-06-01',
end_date='2023-06-05',
fields=['time', 'current', 'volume', 'b1_v', 'a1_v']
)
print(df_specific)
返回数据字段说明
返回的数据格式为 pandas.DataFrame,包含以下字段:
| 字段名 | 说明 | 类型 |
|---|---|---|
| time | 时间(通常显示为当日 09:25:xx) | datetime |
| current | 集合竞价撮合后的当前价 | float |
| volume | 累计成交量(股) | float |
| money | 累计成交额 | float |
| b1_v ~ b5_v | 五档买量 | float |
| b1_p ~ b5_p | 五档买价 | float |
| a1_v ~ a5_v | 五档卖量 | float |
| a1_p ~ a5_p | 五档卖价 | float |
注意事项
- 数据更新时间:在回测和模拟交易中,当日的集合竞价数据通常最晚于 09:28 返回。因此,建议在
09:30开盘后的逻辑中调用,或者在run_daily设置time='9:30'时调用。 - 历史数据范围:
- 股票:支持 2010 年至今。
- 场内基金:支持 2019 年至今。
- 指数:支持 2017 年至今。
- 未来函数:在回测模式下,如果在
before_trading_start(通常是 9:00 运行)中调用当天的get_call_auction,会因为时间未到 9:25 而获取不到数据(或视作未来函数)。请确保调用时间点在 9:25 之后。
Q&A
Q: get_call_auction 可以获取到 9:15 到 9:24 之间的逐笔挂单详情吗?
A: 不可以。get_call_auction 仅返回 9:25 这一时刻集合竞价撮合完成后的快照数据(开盘价、成交量及当时的五档盘口)。如果需要更细颗粒度的 Tick 数据,需要使用 Tick 级回测并订阅 Tick 事件,但历史 Tick 数据量巨大且通常不包含未撮合的挂单明细。
Q: 如果我在 before_trading_start 中调用该函数会怎样?
A: before_trading_start 默认运行时间是 09:00。此时 09:25 的集合竞价尚未发生。在回测中,如果尝试获取当天的竞价数据,可能会报错或返回空值(取决于是否开启了“避免未来数据”选项)。正确的做法是在 handle_data 或定时在 09:30 运行的函数中获取。
Q: 集合竞价的 current 价格和当天的 open 开盘价一样吗?
A: 通常情况下是一样的。09:25 产生的撮合价格即为当天的开盘价。但在极少数异常波动或无成交的情况下,可能会有细微差别,但在数据处理上通常视作一致。