交易模式

筛选今天涨停的股票,用于第二天打板。包括一进二、二进三以及更高的板。后续会研究每个股的连板概率,敬请期待!

实施过程

获取20260506所有的涨停股票,通过一套筛选模式,获取可打板股票池。还有哪些筛选条件,欢迎打到评论区。

筛选标准
  • 股价≤30元
  • 总市值≤300亿
  • 流通市值≤250亿
  • 最后封板时间 ≤ 14:30(下午两点半)
  • 炸板次数 ≤ 5
  • 排除断板再涨停的股票
  • 封成比≤5%

代码如下:

import akshare as ak
import pandas as pd
from datetime import datetime

# 1. 获取数据(你指定的接口和日期)
stock_zt_pool_em_df = ak.stock_zt_pool_em(date='20260506')

# 防护:如果数据为空直接退出
if stock_zt_pool_em_df.empty:
    print("无涨停数据")
else:
    # 2. 确保列名存在,转换连板数为数字(排序必须)
    if '连板数' in stock_zt_pool_em_df.columns:
        stock_zt_pool_em_df['连板数'] = pd.to_numeric(stock_zt_pool_em_df['连板数'], errors='coerce')

    # ===================== 筛选1:仅保留10%涨停的主板股票 =====================
    main_board_prefix = ['60', '00']
    stock_zt_pool_em_df = stock_zt_pool_em_df[
        stock_zt_pool_em_df['代码'].str.startswith(tuple(main_board_prefix))
    ]
    if stock_zt_pool_em_df.empty:
        print("无10%涨停的主板股票数据")
        exit()

    # ===================== 筛选2:剔除高价+大市值股票(核心新增) =====================
    # 转换价格、市值为数值类型(防止数据格式报错)
    df_filter = stock_zt_pool_em_df.copy()
    df_filter['最新价'] = pd.to_numeric(df_filter['最新价'], errors='coerce')
    df_filter['总市值'] = pd.to_numeric(df_filter['总市值'], errors='coerce')
    df_filter['流通市值'] = pd.to_numeric(df_filter['流通市值'], errors='coerce')

    # ---------- 新增:处理最后封板时间格式,用于筛选 ----------
    # 清理时间格式(去掉1900-01-01 前缀)
    df_filter['最后封板时间'] = df_filter['最后封板时间'].astype(str).str.replace('1900-01-01 ', '',
                                                                                        regex=False)
    df_filter['最后封板时间'] = df_filter['最后封板时间'].str.strip().astype('Int64')

    # 转换为时间对象(处理空值/格式错误)
    # def parse_time(time_str):
    #     try:
    #         return datetime.strptime(time_str, '%H:%M:%S') if len(time_str) >= 8 else datetime.strptime(time_str,
    #                                                                                                     '%H:%M')
    #     except:
    #         return None  # 格式错误标记为None
    #
    #
    # df_filter['最后封板时间_dt'] = df_filter['最后封板时间_clean'].apply(parse_time)
    # # 定义14:30的时间对象用于比较
    # cutoff_time = datetime.strptime('14:30:00', '%H:%M:%S')

    # ---------- 核心过滤条件(新增最后封板时间≤14:30) ----------
    df_filter = df_filter[
        (df_filter['最新价'] <= 30) &  # 股价 ≤30元
        (df_filter['总市值'] <= 30000000000) &  # 总市值 ≤300亿元
        (df_filter['流通市值'] <= 25000000000) &  # 流通市值 ≤250亿元
        (df_filter['最后封板时间'] <= 143000) &  # 最后封板时间 ≤14:30
        (df_filter['炸板次数'] <= 5) &  # 炸板次数 ≤5
        (df_filter['涨停统计'].str.split('/').str[0] == df_filter['涨停统计'].str.split('/').str[1]) & #排除断板
        (df_filter['封板资金'] / df_filter['成交额'] >= 0.05)  # 【封成比≥5%】
        ]

    df_filter = df_filter[
        ((df_filter['涨停统计'] == '1/1') & (df_filter['换手率'] >= 3) & (df_filter['换手率'] <= 20)) |
        (df_filter['涨停统计'] != '1/1')  #如果是首板,换手率必须在3%到20%之间
        ]

    # 防护:筛选后无数据直接退出
    if df_filter.empty:
        print("无符合条件(10%涨停+股价≤30元+总市值≤300亿+流通市值≤250亿+最后封板≤14:30)的股票")
        exit()

    # 3. 排序:连板数降序 → 首次封板时间升序
    df_sorted = df_filter.sort_values(
        by=['连板数', '首次封板时间'],
        ascending=[False, True],
        na_position='last'
    ).reset_index(drop=True)

    # 清理时间格式
    df_sorted['首次封板时间'] = df_sorted['首次封板时间'].astype(str).str.replace('1900-01-01 ', '', regex=False)
    df_sorted['首次封板时间'] = df_sorted['首次封板时间'].str.strip()

    # 4. 输出结果
    print("=" * 80)
    print("排序后:按连板数降序 | 连板数相同按首次封板时间升序")
    print("筛选条件:10%主板涨停 + 股价≤30元 + 总市值≤300亿 + 流通市值≤250亿")
    print("=" * 80)
    print(df_sorted[['代码', '名称', '最新价', '连板数', '首次封板时间', '最后封板时间', '所属行业']].to_string(index=False))

    # 保存文件
    df_sorted.to_csv('涨停股票排序结果.csv', encoding='utf-8-sig', index=False)

运行就,最终得到27只股票

名称涨跌幅最新价换手率首次封板时间最后封板时间炸板次数连板数所属行业
永杉锂业10.0051621.331.490904925019250104能源金属
宝光股份10.0119218.468.120765930339303304电网设备
跨境通10.136994.0211.45781935399362112互联网电
安道麦A9.9706757.52.48637810353610353602农化制品
华软科技9.9821756.1711.8229111263911263902化学制品
盈新发展103.083.523027925009250001房地产开
美利云9.98948520.9211.792019304210422721IT服务Ⅱ
美年健康9.9447515.973.26729931549315401医疗服务
康盛股份9.9290786.26.857163932069320601家电零部
大业股份1012.325.484136936429383021通用设备
合力泰10.03463.187.76287937279372701光学光电
锡华科技9.99609628.1718.50924940199493111风电设备
诚邦股份10.0064117.159.615585940359403501基础建设
江南高纤10.169493.257.305836940479423511纺织制造
波导股份9.956715.086.015568941389442921消费电子
海鸥股份9.98659516.416.643846955179551701通用设备
川润股份1019.0312.36676956399563901通用设备
海通发展10.0201716.366.721406958249582401航运港口
奥康国际9.9635499.054.21389410000810000801服装家纺
深圳新星9.98515229.638.68280110104210104201金属新材
华源控股1021.348.21075910115110115101包装印刷
轻纺城104.624.13453710160510160501一般零售
来伊份9.98174118.074.92152810265610265601休闲食品
大连热电10.064528.5310.3823410423310423301电力
兴民智通106.68.34732410473610473601汽车零部
三湘印象10.103095.344.21410211003011003001房地产开
鸿博股份10.006118.0314.7171813002413002401包装印刷
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐