交易模式

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

实施过程

获取20260507所有的涨停股票,通过一套筛选模式,获取可打板股票池。

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

代码如下:

import akshare as ak
import pandas as pd
from filters.akshare_filters import filter_stock_data_qushigu
from datetime import datetime

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

# 防护:如果数据为空直接退出
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[
        ((df_filter['涨停统计'] == '1/1') & (df_filter['封板资金'] / df_filter['成交额'] >= 0.05) ) | # 【封成比≥5%】
        (df_filter['涨停统计'] != '1/1')  # 如果是首板,换手率必须在3%到20%之间
        ]

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

    # 防护:筛选后无数据直接退出
    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 = filter_stock_data_qushigu(df_sorted)

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

    # 4. 输出结果
    print(df_sorted[['代码', '名称', '最新价', '连板数', '首次封板时间', '最后封板时间', '所属行业']].to_string(index=False))

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

运行后,最终得到40只股票

名称 涨跌幅 最新价 换手率 首次封板时间 最后封板时间 炸板次数 连板数 所属行业
金 螳 螂 10.01541 7.14 16.71841 93648 102842 4 5 装修装饰
中嘉博创 10.0823 5.35 5.60886 93003 93003 0 2 通信服务
波导股份 10.03937 5.59 8.924228 93110 93404 1 2 消费电子
腾龙股份 9.97151 15.44 3.58417 93149 93149 0 2 汽车零部
大连热电 9.964829 9.38 12.69323 93711 94832 3 2 电力
华电辽能 9.990834 12 11.42665 94603 94603 0 2 电力
航锦科技 10.02967 18.54 8.675596 94854 95439 3 2 化学原料
大业股份 9.983767 13.55 12.0585 95532 95532 0 2 通用设备
诚邦股份 10.02915 18.87 23.29346 110046 141955 4 2 基础建设
通鼎互联 10.01757 18.78 4.502721 92500 93727 1 1 通信设备
新能泰山 10 5.17 4.110518 93145 93145 0 1 电网设备
怡 亚 通 9.98308 6.5 5.499129 93327 93548 2 1 贸易Ⅱ
炼石航空 10.00935 11.76 3.379487 93500 93645 2 1 航空装备
华达新材 9.975669 9.04 2.678176 93750 93750 0 1 金属新材
山东玻纤 10.00814 13.52 9.003171 93836 95930 2 1 玻璃玻纤
中欣氟材 9.989372 20.7 3.612856 94830 94830 0 1 化学制品
北投科技 10.07026 4.7 6.028698 94903 100142 2 1 IT服务Ⅱ
武汉凡谷 10.03521 12.5 9.912403 95006 95006 0 1 通信设备
巨轮智能 9.931507 6.42 4.093404 95127 95127 0 1 专用设备
北京科锐 10 15.95 7.581436 95915 102939 1 1 电网设备
好利科技 10.00544 20.23 10.21041 100342 100342 0 1 其他电子
厦工股份 10.04464 4.93 6.099742 100345 100345 0 1 工程机械
宝鼎科技 10.02188 25.14 3.420431 100536 100536 0 1 通用设备
丰林集团 10 3.08 10.91275 100915 110227 1 1 家居用品
伟时电子 10.02415 18.22 3.162449 101022 101022 0 1 光学光电
福鞍股份 10.01164 18.9 5.522804 103414 103414 0 1 环境治理
特发信息 10.01094 20.11 14.06457 103930 103930 0 1 通信设备
中电鑫龙 10 11.11 12.49582 104454 104454 0 1 电网设备
超声电子 9.974586 17.31 11.82338 105327 131703 2 1 元件
华塑控股 10.08403 3.93 5.600467 110524 110524 0 1 光学光电
恒大高新 10.05025 8.76 27.88842 110539 130957 1 1 化学制品
瑞斯康达 10.00676 16.27 12.5477 112141 112141 0 1 通信设备
和胜股份 9.996034 27.73 9.28476 130148 130148 0 1 工业金属
博实股份 10.01451 15.16 4.620274 130218 130218 0 1 自动化设
众生药业 9.983897 20.49 11.38854 130421 140439 1 1 中药Ⅱ
宏昌电子 9.978463 15.32 6.158387 130432 130432 0 1 电子化学
信质集团 10.02457 22.39 5.442486 131718 131718 0 1 汽车零部
引力传媒 9.981685 24.02 9.176158 132846 132846 0 1 广告营销
浦东建设 10.02865 7.68 4.788702 135916 135916 0 1 基础建设
南威软件 10.02179 10.1 5.112407 142101 142101 0 1 IT服务Ⅱ
Logo

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

更多推荐