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

joinquant 集合竞价选股:如何在09:25获取盘口五档买卖量与应用(附Python代码)

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

问题描述

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

Title: joinquant 集合竞价选股:09:25 盘口五档买卖量获取与应用

Question: 如何使用 get_call_auction 获取开盘集合竞价的五档买卖盘口数据进行选股?

解决方案

一、JoinQuant 集合竞价数据接口介绍

在 A 股市场中,早盘 09:25 的集合竞价结果对于捕捉当日强庄股、涨停早盘抢筹标的具有极高的参考价值。JoinQuant(聚宽)提供了专用的 API 函数 get_call_auction 来获取集合竞价阶段的数据(支持股票、场内基金、指数及期权)。

get_call_auction 函数说明

  • 函数定义get_call_auction(security, start_date=None, end_date=None, fields=None)
  • 返回数据时点:当日 09:25 的集合竞价结果最晚于 09:28 分前返回。
  • 五档盘口字段
    • 买盘五档:买一至买五量(b1_v ~ b5_v)、买一至买五价(b1_p ~ b5_p
    • 卖盘五档:卖一至卖五量(a1_v ~ a5_v)、卖一至卖五价(a1_p ~ a5_p
    • 基础行情:匹配价/当前价(current)、成交量(volume)、成交额(money

二、核心代码示例:获取集合竞价五档盘口

下面的示例展示了如何在聚宽研究环境或策略中获取多只股票在指定日期范围内的 09:25 集合竞价五档数据:

from jqdata import *

# 定义查询标的列表及日期
security_list = ['000001.XSHE', '000002.XSHE']
start_date = '2023-11-01'
end_date = '2023-11-05'

# 获取开盘集合竞价五档盘口数据
df_auction = get_call_auction(
    security=security_list,
    start_date=start_date,
    end_date=end_date,
    fields=['time', 'current', 'volume', 'a1_v', 'a1_p', 'b1_v', 'b1_p']
)

print(df_auction.head())

三、基于集合竞价五档买卖量的选股策略(Python 源码)

以下为一个完整的聚宽策略范例。策略逻辑:在每日开盘前(09:30前),分析目标股票池在 09:25 的集合竞价盘口,筛选出买一量远大于卖一量(强力抢筹)且开盘高开幅度适中的股票进行买入。

# 导入聚宽函数库
from jqdata import *

def initialize(context):
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 设置基准
    set_benchmark('000300.XSHG')
    # 设置交易手续费
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    # 每日 09:30 开盘时执行选股与下单
    run_daily(market_open, time='09:30', reference_security='000300.XSHG')

def market_open(context):
    # 1. 获取沪深300成分股作为选股池
    stocks = get_index_stocks('000300.XSHG')
    today_str = context.current_dt.strftime('%Y-%m-%d')
    
    # 2. 获取当天 09:25 的集合竞价数据
    auction_data = get_call_auction(
        security=stocks,
        start_date=today_str,
        end_date=today_str,
        fields=['current', 'volume', 'b1_v', 'a1_v']
    )
    
    if auction_data.empty:
        return
    
    # 3. 盘口多空力量指标筛选:买一量 / (卖一量 + 1)
    auction_data['ratio'] = auction_data['b1_v'] / (auction_data['a1_v'] + 1.0)
    
    # 筛选条件:买一量是卖一量的 3 倍以上,且集合竞价有成交量
    selected = auction_data[(auction_data['ratio'] > 3.0) & (auction_data['volume'] > 0)]
    target_stocks = list(selected['code'])
    
    # 限制买入数量(最多买入前 5 只)
    target_stocks = target_stocks[:5]
    
    # 4. 调仓:卖出不在目标池中的持仓
    for stock in context.portfolio.positions:
        if stock not in target_stocks:
            order_target(stock, 0)
            log.info("卖出非目标股: %s" % stock)
            
    # 5. 买入筛选出的强力标的
    if len(target_stocks) > 0:
        cash_per_stock = context.portfolio.available_cash / len(target_stocks)
        for stock in target_stocks:
            order_value(stock, cash_per_stock)
            log.info("集合竞价抢筹买入: %s" % stock)

四、注意事项与优化建议

  1. 运行时间与逻辑:在盘中或模拟盘中使用 get_call_auction 时,建议在 09:27~09:30 之间调用,确保当日集合竞价数据已同步完成。
  2. 未来函数防范:在回测中使用时,需开启 set_option("avoid_future_data", True) 模式,确保策略在 09:30 之前无法读取当日收盘价等未发生数据。
  3. 防范伪集合竞价:结合 get_current_data() 检查股票是否停牌或开盘即涨停(无法买入),并在计算买卖比例时加上小常数(如 +1)防止除以零错误。