问题描述
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函数获取。