3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,早盘 09:25 的集合竞价结果对于捕捉当日强庄股、涨停早盘抢筹标的具有极高的参考价值。JoinQuant(聚宽)提供了专用的 API 函数 get_call_auction 来获取集合竞价阶段的数据(支持股票、场内基金、指数及期权)。
get_call_auction 函数说明get_call_auction(security, start_date=None, end_date=None, fields=None)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())
以下为一个完整的聚宽策略范例。策略逻辑:在每日开盘前(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)
get_call_auction 时,建议在 09:27~09:30 之间调用,确保当日集合竞价数据已同步完成。set_option("avoid_future_data", True) 模式,确保策略在 09:30 之前无法读取当日收盘价等未发生数据。get_current_data() 检查股票是否停牌或开盘即涨停(无法买入),并在计算买卖比例时加上小常数(如 +1)防止除以零错误。