交易模式

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

实施过程

获取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.00516 21.33 1.490904 92501 92501 0 4 能源金属
宝光股份 10.01192 18.46 8.120765 93033 93033 0 4 电网设备
跨境通 10.13699 4.02 11.45781 93539 93621 1 2 互联网电
安道麦A 9.970675 7.5 2.486378 103536 103536 0 2 农化制品
华软科技 9.982175 6.17 11.82291 112639 112639 0 2 化学制品
盈新发展 10 3.08 3.523027 92500 92500 0 1 房地产开
美利云 9.989485 20.92 11.79201 93042 104227 2 1 IT服务Ⅱ
美年健康 9.944751 5.97 3.26729 93154 93154 0 1 医疗服务
康盛股份 9.929078 6.2 6.857163 93206 93206 0 1 家电零部
大业股份 10 12.32 5.484136 93642 93830 2 1 通用设备
合力泰 10.0346 3.18 7.76287 93727 93727 0 1 光学光电
锡华科技 9.996096 28.17 18.50924 94019 94931 1 1 风电设备
诚邦股份 10.00641 17.15 9.615585 94035 94035 0 1 基础建设
江南高纤 10.16949 3.25 7.305836 94047 94235 1 1 纺织制造
波导股份 9.95671 5.08 6.015568 94138 94429 2 1 消费电子
海鸥股份 9.986595 16.41 6.643846 95517 95517 0 1 通用设备
川润股份 10 19.03 12.36676 95639 95639 0 1 通用设备
海通发展 10.02017 16.36 6.721406 95824 95824 0 1 航运港口
奥康国际 9.963549 9.05 4.213894 100008 100008 0 1 服装家纺
深圳新星 9.985152 29.63 8.682801 101042 101042 0 1 金属新材
华源控股 10 21.34 8.210759 101151 101151 0 1 包装印刷
轻纺城 10 4.62 4.134537 101605 101605 0 1 一般零售
来伊份 9.981741 18.07 4.921528 102656 102656 0 1 休闲食品
大连热电 10.06452 8.53 10.38234 104233 104233 0 1 电力
兴民智通 10 6.6 8.347324 104736 104736 0 1 汽车零部
三湘印象 10.10309 5.34 4.214102 110030 110030 0 1 房地产开
鸿博股份 10.0061 18.03 14.71718 130024 130024 0 1 包装印刷
Logo

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

更多推荐