集合竞价选股策略:9点25分前抓住强势股

用户头像mx_****60317
2026-09-16 发布

每天9点15分到9点25分,很多股票已经提前暴露资金态度。盯着涨幅榜追高,往往买在情绪顶点;只看竞价涨幅,又容易被虚假挂单误导。真正有用的集合竞价选股,需要把价格、成交额、未匹配量和开盘后承接放在一起判断。

集合竞价不是预测涨停,而是用有限信息筛出“值得继续观察”的股票。

一、集合竞价到底在看什么

集合竞价阶段,买卖双方提交订单,交易系统按照最大成交量原则撮合。9点15分到9点20分可以撤单,9点20分之后撤单限制增加,9点25分形成开盘价。

实战中,我会重点观察四个字段:

字段 含义 实战用法
jjzf 竞价涨幅 判断资金愿意把价格抬到什么位置
jje 竞价金额 判断参与资金是否足够真实
noe 未匹配金额 判断买卖盘哪一方更拥挤
trend 交易方向 -1为主动性卖,0为中性盘,1为主动性买

单看竞价涨幅很容易踩坑。竞价涨幅达到8%,但成交额只有几十万元,可能只是流动性不足;竞价涨幅3%,成交额超过1000万元,同时未匹配金额持续偏向买方,参考价值更高。

二、我的集合竞价四层筛选法

1. 先做基础排雷

剔除退市整理、风险警示、上市时间过短、成交额长期低迷的股票。涨停价附近的股票,还要注意是否存在一字板无法成交的情况。

建议把竞价涨幅控制在2%至6%。涨幅太低,资金关注度不足;涨幅超过8%,开盘后容易出现获利兑现。

2. 看竞价金额是否达标

竞价金额是过滤“虚假强势”的核心指标。中小盘股可以设置1000万元起步,大盘股则需要结合流通市值提高门槛。

一个简单的标准是:

竞价金额占昨日成交额比例 = jje / 昨日成交额

这个比例不宜一刀切。市场活跃时可以放宽,缩量行情则要提高要求。

3. 观察未匹配金额方向

noe大于0,通常代表买方未匹配金额占优;noe小于0,代表卖方压力更明显。单个时点的未匹配量可能变化很快,最好连续读取9点20分、9点24分和9点25分附近的数据。

真正有参考价值的不是某一刻的买单,而是买方优势能否持续到竞价结束。

4. 等待开盘确认

竞价筛选只是建立候选池,不能直接当作买入信号。开盘后观察前5分钟:

  • 价格是否站在竞价价之上;
  • 成交量是否快速放大;
  • 回踩时是否跌破竞价价;
  • 所属板块是否同步走强。

如果个股高开后快速跌破竞价价,且卖单持续增加,即使竞价数据漂亮,也应放弃追涨。

三、用XTick接口获取竞价数据

XTick文档提供了“竞价数据-实时接口”,地址为/doc/core/bidtime,竞价时间段覆盖9点15分至9点25分。接口支持单只股票、最多100只股票批量查询,也支持code=all获取全市场数据。

请求地址格式如下:

http://api.xtick.top/doc/core/bidtime?type=1&code=all&token=YOUR_TOKEN

其中,type=1代表沪深京A股,token需要登录XTick网站后获取。

接口返回的核心字段示例:

{
  "type": 1,
  "code": "000001",
  "time": 1725845100000,
  "seq": 12,
  "price": 11.26,
  "close": 10.92,
  "jjzf": 3.11,
  "jjl": 86500,
  "jje": 9736900,
  "nol": 12000,
  "noe": 1351200,
  "trend": 1
}

jjzf表示竞价涨幅,jje表示竞价金额,noe表示未匹配金额,trend=1代表主动性买盘。时间字段为毫秒级时间戳,使用时要转换为北京时间。

四、把筛选条件写成程序

下面是一段可以直接改造的Python示例。代码只负责筛选候选股,不构成自动交易指令。

import requests
from urllib.parse import quote

API = "//api.xtick.top/doc/core/bidtime"
TOKEN = "YOUR_TOKEN"

option = {
    "filter": "jjzf>=2;jjzf<=6;jje>=10000000;noe>0",
    "sort": "noe",
    "asc": 0,
    "limit": 100
}

params = {
    "type": 1,
    "code": "all",
    "option": quote(str(option).replace("'", '"')),
    "token": TOKEN
}

resp = requests.get(API, params=params, timeout=10)
resp.raise_for_status()
rows = resp.json()

for row in rows:
    print(
        row["code"],
        f"竞价涨幅={row['jjzf']:.2f}%",
        f"竞价金额={row['jje']:.0f}",
        f"未匹配金额={row['noe']:.0f}",
        f"方向={row['trend']}"
    )

接口文档中的option参数支持过滤、排序和数量限制。例如:

{
  "filter": "jjzf>5;jje>=10000000",
  "sort": "noe",
  "asc": 0,
  "limit": 100
}

通过这个参数,可以直接筛选竞价涨幅超过5%、竞价金额不低于1000万元的股票,并按未匹配金额从大到小排列。

在生产环境中,建议使用标准JSON编码:

import json

params["option"] = quote(json.dumps(option, ensure_ascii=False))

五、如何做历史回测

XTick还提供“竞价数据-历史接口”/doc/hot/bidhistory。该接口保留集合竞价阶段最后一条数据和开盘数据,可用于构建历史样本。

示例请求:

http://api.xtick.top/doc/hot/bidhistory?type=1&code=all&startDate=2026-09-09&endDate=2026-09-09&token=YOUR_TOKEN

历史接口中的序列字段需要特别注意:

seq值 含义
0 开盘数据
1 集合竞价最后一条数据,通常对应9点25分

回测时不能拿收盘后的数据参与当天选股。正确流程是使用seq=1的数据生成候选池,再用seq=0确认开盘表现,最后计算买入后5分钟、30分钟或收盘收益。

六、一个更稳健的实战模板

可以把策略拆成“竞价初筛”和“开盘确认”两步:

阶段 条件 动作
9:20前 竞价涨幅2%至6%,竞价金额达标 建立观察名单
9:24后 noe持续为正,trend多次为1 保留强势标的
9:25 竞价价格没有明显跳水 等待开盘
9:30至9:35 价格站上竞价价,成交量放大 评估是否参与
跌破竞价价 卖压增加、板块转弱 取消计划

这里的“参与”也要结合仓位管理。单只股票的试错仓位可以控制在总资金的10%以内,连续出现两次开盘破位时,暂停策略并检查市场环境。

七、常见误区

误区一:竞价涨幅越高越好

高开并不等于强势。超过7%的竞价涨幅,往往意味着更高的兑现压力,尤其是前一交易日已经大涨的股票。

误区二:看到大额买单就立即下单

竞价订单可能在规则允许的时间内撤销,单笔大单不能代表全天资金态度。应结合成交额、未匹配金额变化和开盘后承接判断。

误区三:忽视流动性

小市值、低成交量股票即使满足筛选条件,也可能出现滑点大、无法成交的问题。回测必须加入手续费、印花税、滑点和涨跌停无法成交等因素。

误区四:把回测结果当成收益承诺

集合竞价策略对市场风格非常敏感。震荡市、主升市和退潮期的表现差异明显,任何参数都需要滚动验证。

结语:把竞价信号变成交易纪律

集合竞价选股的核心,不是寻找一个“百分百上涨”的神奇指标,而是建立一套可重复执行的流程:用jjzf识别价格意愿,用jje确认资金规模,用noe观察买卖失衡,再用开盘后的价格和成交量完成确认。

竞价负责缩小范围,开盘负责验证逻辑,仓位负责控制结果。

接口详情可参考XTick接口文档,实盘接入前请先用历史数据和模拟账户验证参数。股市有风险,策略只能提高决策一致性,不能消除亏损可能。

开源项目https://github.com/xticktop/skills

评论

用户头像
2026-09-16 18:25:30

大佬,可以向你请教学习吗?

评论