3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,早盘 09:25 的集合竞价数据反映了市场主力资金在开盘前夕的博弈结果,蕴含了高开、高量爆板等强烈的股价异动信号。利用聚宽(JoinQuant)量化平台的 get_call_auction 函数,我们可以精确获取指定股票池在 09:25 的集合竞价 Tick 快照数据,并在盘中(如 09:30 开盘瞬间)实现自动下单交易。
get_call_auction 用于获取指定时间区间内交易日 09:25 的集合竞价 Tick 数据(支持股票、场内基金、指数及期权)。
from jqdata import *
get_call_auction(security, start_date=None, end_date=None, fields=None)
'000001.XSHE' 或 ['000001.XSHE', '000002.XSHE']。'YYYY-MM-DD'。'YYYY-MM-DD'。None(获取全部字段)。常用字段包括:
time: 时间(如 2023-01-02 09:25:03)current: 集合竞价最终撮合成交价volume: 集合竞价成交量(股)money: 集合竞价成交额(元)a1_v~a5_v / a1_p~a5_p: 五档卖量与卖价b1_v~b5_v / b1_p~b5_p: 五档买量与买价常见的早盘集合竞价选股逻辑如下:
current)相对于昨日收盘价上涨 2% ~ 5% 之间的个股。money)或成交量(volume)达到历史日均的一定比例(如高爆量开盘)。b1_v)与卖一量(a1_v),确保资金封板或抢筹意愿强烈。以下是一个在 JoinQuant 平台上运行的早盘集合竞价选股与交易示例:
import datetime
from jqdata import *
def initialize(context):
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设置基准
set_benchmark('000300.XSHG')
# 设置股票手续费
set_order_cost(OrderCost(open_commission=0.0003, close_commission=0.0003, close_tax=0.001, min_commission=5), type='stock')
# 选股目标股票池(以沪深300成分股为例)
g.stocks = get_index_stocks('000300.XSHG')
# 定时运行:每天 09:30:00 开盘即刻运行撮合交易
run_daily(market_open, time='09:30')
def market_open(context):
today_str = context.current_dt.strftime('%Y-%m-%d')
# 1. 获取选股池股票昨日收盘价
last_df = history(1, '1d', 'close', g.stocks)
# 2. 获取今日 09:25 的集合竞价数据
auction_df = get_call_auction(g.stocks, start_date=today_str, end_date=today_str,
fields=['time', 'current', 'volume', 'money', 'b1_v', 'a1_v'])
if auction_df.empty:
log.info("未获取到集合竞价数据")
return
buy_list = []
# 3. 遍历分析竞价数据
for security in g.stocks:
sub_df = auction_df[auction_df['code'] == security]
if sub_df.empty:
continue
auction_price = sub_df['current'].values[0]
auction_money = sub_df['money'].values[0]
last_close = last_df[security][0]
# 过滤无效价格
if last_close == 0 or auction_price == 0:
continue
# 计算竞价涨跌幅
pct_change = (auction_price - last_close) / last_close
# 选股条件:竞价高开 2% 至 5% 且集合竞价成交额大于 500 万元
if 0.02 <= pct_change <= 0.05 and auction_money > 5000000:
buy_list.append(security)
log.info("选中股票: %s, 竞价涨幅: %.2f%%, 竞价成交额: %.2f万" % (security, pct_change * 100, auction_money / 10000))
# 4. 执行调仓(均仓买入选中的股票)
if buy_list:
cash_per_stock = context.portfolio.available_cash / len(buy_list)
for stock in buy_list:
order_value(stock, cash_per_stock)
start_date 和 end_date 参数设置为当日(或当前逻辑时间 context.current_dt),切勿获取未发生交易日的数据。get_call_auction 单次调用的最大返回行数为 5000 行,如果股票池过大(如全 A 股 4000+ 只),建议按行业或板块分批次查询。