交易模式

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

实施过程

获取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.015417.1416.718419364810284245装修装饰
中嘉博创10.08235.355.60886930039300302通信服务
波导股份10.039375.598.924228931109340412消费电子
腾龙股份9.9715115.443.58417931499314902汽车零部
大连热电9.9648299.3812.69323937119483232电力
华电辽能9.9908341211.42665946039460302电力
航锦科技10.0296718.548.675596948549543932化学原料
大业股份9.98376713.5512.0585955329553202通用设备
诚邦股份10.0291518.8723.2934611004614195542基础建设
通鼎互联10.0175718.784.502721925009372711通信设备
新能泰山105.174.110518931459314501电网设备
怡 亚 通9.983086.55.499129933279354821贸易Ⅱ
炼石航空10.0093511.763.379487935009364521航空装备
华达新材9.9756699.042.678176937509375001金属新材
山东玻纤10.0081413.529.003171938369593021玻璃玻纤
中欣氟材9.98937220.73.612856948309483001化学制品
北投科技10.070264.76.0286989490310014221IT服务Ⅱ
武汉凡谷10.0352112.59.912403950069500601通信设备
巨轮智能9.9315076.424.093404951279512701专用设备
北京科锐1015.957.5814369591510293911电网设备
好利科技10.0054420.2310.2104110034210034201其他电子
厦工股份10.044644.936.09974210034510034501工程机械
宝鼎科技10.0218825.143.42043110053610053601通用设备
丰林集团103.0810.9127510091511022711家居用品
伟时电子10.0241518.223.16244910102210102201光学光电
福鞍股份10.0116418.95.52280410341410341401环境治理
特发信息10.0109420.1114.0645710393010393001通信设备
中电鑫龙1011.1112.4958210445410445401电网设备
超声电子9.97458617.3111.8233810532713170321元件
华塑控股10.084033.935.60046711052411052401光学光电
恒大高新10.050258.7627.8884211053913095711化学制品
瑞斯康达10.0067616.2712.547711214111214101通信设备
和胜股份9.99603427.739.2847613014813014801工业金属
博实股份10.0145115.164.62027413021813021801自动化设
众生药业9.98389720.4911.3885413042114043911中药Ⅱ
宏昌电子9.97846315.326.15838713043213043201电子化学
信质集团10.0245722.395.44248613171813171801汽车零部
引力传媒9.98168524.029.17615813284613284601广告营销
浦东建设10.028657.684.78870213591613591601基础建设
南威软件10.0217910.15.11240714210114210101IT服务Ⅱ
Logo

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

更多推荐