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

joinquant 平台如何利用 get_call_auction 获取集合竞价五档量价数据?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 集合竞价选股:如何利用开盘前 9:25 的 Tick 数据?

Question: 在聚宽平台如何用 get_call_auction 函数获取股票集合竞价的五档量价数据?

解决方案

joinquant 集合竞价选股:如何利用开盘前 9:25 的 Tick 数据?

在 A 股量化交易中,**集合竞价(9:15 - 9:25)**是主力资金试盘、表态的重要窗口。尤其是 9:25 产生的开盘集合竞价 Tick 数据,决定了股票当天的开盘价,其五档量价关系和累计成交量是捕捉强势股、龙头股“超预期开盘”的核心指标。

聚宽(JoinQuant)提供了专门的 API 函数 get_call_auction,支持获取指定时间区间内交易日 09:25 的集合竞价数据。本文将详细介绍该函数的使用方法,并给出一个实用的集合竞价选股策略框架。


一、get_call_auction 函数详解

get_call_auction 函数用于获取指定时间区间内交易日 09:25 的集合竞价数据。支持股票(2010年至今)、场内基金(2019年至今)等标的。

1. 接口调用格式

from jqdata import *
get_call_auction(security, start_date=None, end_date=None, fields=None)

2. 参数说明

  • security: 标的代码或标的代码组成的列表(如 '000001.XSHE'['000001.XSHE', '000002.XSHE'])。
  • start_date: 开始日期,格式为 'YYYY-MM-DD',不可为 None
  • end_date: 结束日期,格式为 'YYYY-MM-DD',不可为 None
  • fields: 选择要获取的行情字段。若为 None,默认获取全部字段。支持的字段包括:
    • time: 时间(datetime)
    • current: 当前价(即开盘价)
    • volume: 累计成交量(股)
    • money: 累计成交额
    • b1_v ~ b5_v: 五档买量
    • b1_p ~ b5_p: 五档买价
    • a1_v ~ a5_v: 五档卖量
    • a1_p ~ a5_p: 五档卖价

3. 返回值

返回一个 pandas.DataFrame,索引为默认的整数索引,包含 code 列及所选的 fields 字段。


二、代码实战:获取 9:25 集合竞价五档数据

以下代码展示了如何在研究环境或策略中,获取指定股票在特定日期的集合竞价五档量价数据:

from jqdata import *

# 定义查询标的和时间范围
security_list = ['000001.XSHE', '000002.XSHE']
start_dt = '2023-10-10'
end_dt = '2023-10-12'

# 获取包含五档买卖量价的完整集合竞价数据
fields_list = [
    'time', 'current', 'volume', 'money', 
    'b1_v', 'b1_p', 'a1_v', 'a1_p'
]

df_auction = get_call_auction(security_list, start_date=start_dt, end_date=end_dt, fields=fields_list)
print(df_auction.head())

三、经典应用:集合竞价“爆量高开”选股策略

在实战中,我们经常寻找**“爆量高开”**的股票,即:

  1. 高开幅度在 2% ~ 5% 之间(避免高开过多被埋,或高开过少力度不够)。
  2. 集合竞价成交量占昨日总成交量的比例显著放大(例如大于 1% 或 2%),代表主力抢筹。

以下是基于 JoinQuant 策略引擎编写的简化版集合竞价选股策略:

import jqdata

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 每天 09:26 运行选股,此时 09:25 的集合竞价数据已完全生成
    run_daily(filter_stocks_by_auction, time='09:26')

def filter_stocks_by_auction(context):
    today = context.current_dt.date()
    
    # 获取沪深300成分股作为初始股票池
    stocks = get_index_stocks('000300.XSHG', date=today)
    
    # 1. 获取昨日收盘价与昨日成交量
    last_df = history(1, '1d', 'close', security_list=stocks, df=True)
    last_volume = history(1, '1d', 'volume', security_list=stocks, df=True)
    
    # 2. 获取今日 9:25 集合竞价数据
    auction_df = get_call_auction(stocks, start_date=today, end_date=today)
    
    if auction_df.empty:
        return
        
    buy_list = []
    
    for _, row in auction_df.iterrows():
        code = row['code']
        open_price = row['current']
        auction_volume = row['volume']
        
        if code not in last_df.columns:
            continue
            
        yesterday_close = last_df[code].iloc[-1]
        yesterday_vol = last_volume[code].iloc[-1]
        
        if yesterday_close <= 0 or yesterday_vol <= 0:
            continue
            
        # 计算高开幅度
        open_pct = (open_price - yesterday_close) / yesterday_close
        # 计算集合竞价成交量占比
        volume_ratio = auction_volume / yesterday_vol
        
        # 选股条件:高开 1.5% 到 4% 之间,且集合竞价成交量占比大于 1%
        if 0.015 <= open_pct <= 0.04 and volume_ratio >= 0.01:
            log.info(f"股票 {code} 满足条件:高开 {open_pct*100:.2f}%, 竞价量比 {volume_ratio*100:.2f}%")
            buy_list.append(code)
            
    # 后续可根据 buy_list 执行开盘买入逻辑
    # ...

四、注意事项

  1. 数据获取时间限制:当日的集合竞价数据最晚于 9:28 分完全返回。因此,在模拟盘或实盘中,建议将相关选股逻辑设置在 9:26 或 9:27 之后运行,以确保能稳定获取到当天的最新数据。
  2. 未来函数预防:在回测中,请确保 get_call_auctionend_date 参数不超过 context.current_dt 的当前日期,避免引入未来数据。
  3. 停牌处理:若股票在当天停牌,get_call_auction 将无法获取到有效的当日成交量,需在策略中做好空值过滤。