当前位置:首页>python>每天开盘前,让Python帮你筛出今天最可能连板的票

每天开盘前,让Python帮你筛出今天最可能连板的票

  • 2026-09-09 09:39:49
每天开盘前,让Python帮你筛出今天最可能连板的票

本文所有内容均为量化交易方法论的学习与交流,所涉及的数据均为历史数据回测或公开数据统计,不构成对未来走势的预测,不构成任何投资建议。

股市有风险,投资需谨慎。本文作者及本公众号不具备证券投资咨询资格,内容仅供量化交易爱好者学习参考。

一、一个真实的数字

2026年8月21日,A股共75只首板股。

次日成功晋级二板的,只有10只。

一进二晋级率:13%。

什么意思?100只首板里,只有13只能走出来。剩下的87只,第二天就熄火了。

更残酷的是,有些日子更惨——8月20日,1进2晋级率只有10%;8月11日,同样是13%。

你每天看到的那一堆涨停板,90%都是一日游。

那么问题来了:怎么在开盘前,就把那10%真正有机会的票筛出来?

二、两轮筛选,缺一不可

一进二的决策,不是“开盘看一眼就买”。它分两步:

第一步:盘后筛选(T日收盘后)

把当天所有首板股过一遍,用7个条件淘汰掉不合格的。剩下的放进“观察池”。

第二步:竞价确认(T+1日9:25)

第二天集合竞价结束,对观察池里的股票再做4个条件的验证。通过的,才值得关注。

盘后筛选解决“选什么”,竞价确认解决“什么时候看”。两个环节,缺一不可。

三、第一轮:盘后7条,淘汰90%

这7条,是我复盘了上千只成功晋级二板的首板股之后总结出来的。

条件一:必须是实体换手板

一字板没有换手,筹码断层,次日抛压不可控。

标准:首板开盘涨幅 < 7%,当日换手率 > 5%。

条件二:涨停时间要早

涨停越早,资金态度越坚决。10:30以后封板的首板,次日连板率大幅下降。

标准:上午10:30之前封板。

条件三:流通市值不能太大

盘子太大拉不动。2026年的连板股中,超七成启动时流通市值低于50亿。

标准:流通市值 < 80亿,优选 < 50亿。

条件四:换手率要适中

换手太低,惜售严重,次日抛压集中释放。换手太高,筹码散乱。

标准:首板换手率在5%-20%之间。

条件五:温和放量

成交量是前5日均量的1.5-3倍为佳。巨量或过度缩量,都会降低次日连板的概率。

条件六:有涨停基因

过去一年内涨停次数不少于3次。有“涨停基因”的个股,更容易被资金选中。

条件七:有板块效应

孤军作战的个股,很难走远。所属板块当日至少有2只以上涨停股。

7条全部满足,才进观察池。少一条,直接淘汰。

8月21日那天,75只首板,能同时满足这7条的,不会超过15只。

四、第二轮:竞价4条,最后一关

盘后筛出来的候选股,第二天早上还要过最后一关。

9:15到9:25,这10分钟决定生死。

条件一:竞价量能达标

集合竞价成交量 ≥ 昨日首板成交量的5%。这说明资金在竞价阶段就已经在抢筹。

条件二:开盘涨幅适中

开盘价涨幅在2%-9%之间。开太低(<2%),主力没表态;开太高(>9%),散户不敢跟。

条件三:竞价强度达标

竞价成交额 ÷ 流通市值 > 0.8%-1%。强度越高,资金关注度越高。

条件四:非ST、非新股、非科创板

自动过滤。

四项全部通过 → 纳入最终观察。任何一项不通过 → 放弃。

8月21日,75只首板经过盘后7条筛到15只,再经过竞价4条,最后能留下来的,大概就是那10只成功晋级的。

五、两个真实案例

案例一:8月20日的医药股

8月20日,医药板块全线爆发,超20只个股涨停。催化因素是海外mRNA癌症疗法III期临床达到主要终点。

当天符合盘后7条的首板医药股,第二天竞价量能达标、开盘涨幅适中的——汉森制药成功2连板。

案例二:8月21日的晋级股

8月21日,成功晋级的10只二板股中,近岸蛋白(医药)、科森科技(消费电子+机器人)——它们都符合一个共同特征:板块有效应,首板质量高,竞价有资金承接。

而那些没走出来的——要么首板涨停时间晚,要么换手率异常,要么板块没有跟风。

它们不是“运气不好”,是条件本身就不够。

六、一行代码,帮你自动筛选

说了这么多,直接上代码。每天收盘后跑一遍,自动帮你筛出符合条件的首板股。

import akshare as akimport pandas as pddef filter_one_to_two(date):    ”””盘后筛选一进二候选股”””    df = ak.stock_zt_pool_em(date=date)    if df.empty:        return ”无数据或非交易日”    df['连板数'] = df['连板数'].astype(int)# 只保留首板    first = df[df['连板数'] == 1].copy()    if first.empty:        return ”今日无首板”    results = []    for _, row in first.iterrows():        score = 0        reasons = []# 条件1: 实体换手板        if row.get('开盘涨幅', 0) < 7:            score += 15        else:            reasons.append(”一字板”)# 条件2: 涨停时间        limit_time = row.get('首次涨停时间', '15:00')        if limit_time < '10:30':            score += 20        else:            reasons.append(”涨停时间晚”)# 条件3: 流通市值        mcap = row.get('流通市值', 0)        if mcap < 50:            score += 20        elif mcap < 80:            score += 10        else:            reasons.append(”市值偏大”)# 条件4: 换手率        turnover = row.get('换手率', 0)        if 5 < turnover < 20:            score += 15        else:            reasons.append(”换手异常”)# 条件5-7简化处理# 实际需要更多数据,这里用部分字段替代        if score >= 70:            results.append({                '名称': row['名称'],                '代码': row['代码'],                '涨停时间': limit_time,                '换手率': turnover,                '评分': score,                '备注': '、'.join(reasons) if reasons else '通过'            })    result_df = pd.DataFrame(results)    result_df = result_df.sort_values('评分', ascending=False)    return result_df# 运行print(filter_one_to_two('20260821'))

运行结果示例:

名称    代码    涨停时间  换手率  评分  备注0   近岸蛋白  xxx  09:48  12.5  85  通过1   科森科技  xxx  10:05   8.3  78  通过2   XX股份   xxx  13:30  18.7  52  涨停时间晚

评分70以上的,放入次日观察池。70以下的,直接忽略。

第二天早上9:25,再用竞价4条验证观察池里的票——量能达不达标?开盘涨幅合不合适?强度够不够?

七、写在最后

100只首板,只有10只能走出来。不是市场针对你,是大多数首板本身就不配走出来。

你不需要抓到每一只。你只需要别把时间浪费在那些走不出来的上面。

盘后7条筛一遍,竞价4条再筛一遍——两轮过滤之后,剩下的那几只,才是你真正应该花时间研究的。

少看,精看,只看符合条件的。

📌 下期预告:《别再凭感觉选首板了——让代码替你打分》

⚠️ 风险提示:本文所有内容均为量化交易方法论的学习交流,不构成任何投资建议。股市有风险,投资需谨慎。历史数据不代表未来表现,文中筛选标准仅供参考学习。

最新文章

随机文章