本文所有内容均为量化交易方法论的学习与交流,所涉及的数据均为历史数据回测或公开数据统计,不构成对未来走势的预测,不构成任何投资建议。
股市有风险,投资需谨慎。本文作者及本公众号不具备证券投资咨询资格,内容仅供量化交易爱好者学习参考。
一、一个真实的数字
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条再筛一遍——两轮过滤之后,剩下的那几只,才是你真正应该花时间研究的。
少看,精看,只看符合条件的。
📌 下期预告:《别再凭感觉选首板了——让代码替你打分》
⚠️ 风险提示:本文所有内容均为量化交易方法论的学习交流,不构成任何投资建议。股市有风险,投资需谨慎。历史数据不代表未来表现,文中筛选标准仅供参考学习。