首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Python技术】同花顺问财进行涨停原因分组显示

【Python技术】同花顺问财进行涨停原因分组显示

作者头像
子晓聊技术
发布2026-04-23 13:58:42
发布2026-04-23 13:58:42
1250
举报
文章被收录于专栏:子晓AI量化子晓AI量化

今天盘中的时候,我突然想看当前哪些概念涨停比较多。 虽然很多APP也有这个功能, 但对于自己喜欢捣鼓程序的我来说,还是自己直接写程序来实在。

为什么有这个想法呢?

比如盘中我有些时候想看当前哪些概念个股涨停多,是否存在套利的机会。

盘后,我想看连板梯度完整情况,比如今天跨境电商有哪些板,梯度是怎么分布的,之前我是通过其他软件看的, 或者通过我之前写的连板分析肉眼看。

这些只是举例, 对于我有点用处。 对于其他人可能没啥用。 临时记录在这。

最后附上完整代码,需要的自取。

代码语言:javascript
复制
import streamlit as st
import pywencai
import pandas as pd
from datetime import datetime
# 列对齐设置
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.max_colwidth', 100)
def app():
    st.title("股票涨停分析")
    # 日期选择
    selected_date = st.date_input("选择分析日期", datetime.today())
    date_str = selected_date.strftime("%Y%m%d")
    try:
        # 获取数据
        param = f"{date_str}涨停,非ST"
        df = pywencai.get(query=param, sort_key='成交金额', sort_order='desc')
        if df.empty:
            st.warning("当日没有涨停股票数据!")
            return
        # 列选择和处理
        selected_columns = [
            '股票代码', '股票简称', '最新价', '最新涨跌幅',f'连续涨停天数[{date_str}]',  f'首次涨停时间[{date_str}]',
                        f'最终涨停时间[{date_str}]', f'涨停封单量[{date_str}]',
                        f'涨停封单额[{date_str}]', f'涨停类型[{date_str}]',
                        f'几天几板[{date_str}]', f'涨停原因类别[{date_str}]',
                        f'a股市值(不含限售股)[{date_str}]'
        ]
        jj_df = df[selected_columns].copy()
        # 展开概念列表(关键修改)
        exploded_df = jj_df.assign(
            涨停原因=lambda x: x[f'涨停原因类别[{date_str}]'].str.split('+')
        ).explode('涨停原因')
        # 正确统计出现次数(包含重复个股)
        concept_counts = exploded_df.groupby('涨停原因').size().reset_index(name='出现次数')
        concept_counts = concept_counts.sort_values('出现次数', ascending=False)
        # 显示概念统计
        # st.subheader("涨停概念统计")
        # st.dataframe(concept_counts, use_container_width=True)
        # 分组显示数据
        st.subheader("按涨停原因分组")
        # 创建合并后的展示数据
        merged_df = pd.merge(
            exploded_df,
            concept_counts,
            on='涨停原因',
            how='left'
        ).sort_values(
            ['出现次数', '涨停原因', f'连续涨停天数[{date_str}]'],
            ascending=[False, True, False]
        )
        # 按出现次数排序分组
        for concept in concept_counts['涨停原因']:
            group_df = merged_df[merged_df['涨停原因'] == concept]
            with st.expander(f"{concept}(出现次数:{len(group_df)})"):
                st.dataframe(
                    group_df[[
                        '股票代码', '股票简称', '最新价', '最新涨跌幅', '涨停原因',
                        f'首次涨停时间[{date_str}]',
                        f'最终涨停时间[{date_str}]', f'涨停封单量[{date_str}]',
                        f'涨停封单额[{date_str}]', f'涨停类型[{date_str}]',
                        f'几天几板[{date_str}]',
                        f'a股市值(不含限售股)[{date_str}]'
                    ]].reset_index(drop=True),
                    use_container_width=True
                )
        # 显示原始数据
        st.subheader("原始数据(未展开)")
        if st.checkbox("显示完整数据"):
            st.dataframe(jj_df, use_container_width=True)
    except Exception as e:
        st.error(f"获取数据时发生错误:{str(e)}")
if __name__ == "__main__":
    st.set_page_config(page_title="涨停分析", layout="wide")
    app()

备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。

题外话:

这几个月写技术文章写得多了,感觉没啥写的,所以自己最近闲暇时候在学习充电。 不管是各类爬虫(后续应该不会公开写了)、还是写各种技术指标分析、 还是写机器学习各类算法, 还是用AI模型辅助炒股,亦或者是量化交易理论, 网上也有类似的文章, 写雷同的文章感觉也没啥意思。 最近 有同学问到某个问题或者自己偶尔有个念头,就写一写。 文章写得比较随意,凑合着看。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档