交易模式

第二天打板前一天涨停的股票,筛选出第二天能打的股票池。包括一进二、二进三以及更高的板。

实施过程

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

筛选标准
  • 股价≤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='20260430')

# 防护:如果数据为空直接退出
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%】
        ]

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

运行

名称涨跌幅最新价换手率首次封板时间最后封板时间炸板次数连板数所属行业
越剑智能10.0173525.371.456318925039250304专用设备
永杉锂业9.98298419.391.696355925039250303能源金属
宝光股份10.0327916.7813.27503930119535613电网设备
丰元股份10.0144422.854.677855930099300902电池
金 融 街10.069443.174.10004932159334512房地产开
舒华体育9.99153225.985.657559934149392342文娱用品
众泰汽车10.043672.526.08380410063010063002汽车零部
金瑞矿业10.0049822.116.4625613131513131502化学原料
安道麦A106.820.55378925009250001农化制品
丽臣实业9.99203927.632.117453925009250001化学制品
恒大高新108.369.6182119250013071811化学制品
跨境通9.9397593.654.552266930009300001互联网电
全筑股份9.9585072.653.274926930019313111装修装饰
中体产业10.0278511.857.028494931329341121体育Ⅱ
华软科技105.613.234562933489334801化学制品
新赛股份10.059175.588.103035937599433711种植业
香飘飘10.0154114.283.404921940469404601饮料乳品
东望时代9.900994.446.382086942509542921电力
国芳集团9.9753698.933.713736944039440301一般零售
安妮股份10.0196511.219.145199454213251811造纸
华神科技10.120484.577.489288949339493301中药Ⅱ
汇洁股份10.058489.417.667965953069530601服装家纺
圣龙股份10.0056519.4610.262899565310020521汽车零部
上海沪工10.0146622.524.40223110292610292601通用设备
百傲化学1022.666.08286213022813022801农化制品
天域生物10.072997.546.53766913192713192701基础建设
全新好1015.513.34661313323313323301一般零售
汉钟精机1027.612.88605413323613323601通用设备
大胜达9.98719617.1812.6401914253314253301包装印刷
Logo

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

更多推荐