Py学习  »  Python

【Python技术】抓取解析短线复盘连板率、封板率、断板率等情绪量化指标

子晓聊技术 • 6 月前 • 283 次点击  

背景:之前写了一篇通过抓取同花顺wencai计算连板率、封板率、断板率的例子, 有朋友和我说,  wencai本身短线复盘有这个数据。 这句话提醒了我, 要不抓取这个数据来试一下。


这里附上核心代码:



df = pywencai.get(query="短线复盘")
    try:
        # ================== 核心指标看板 ==================
        st.header("📊 核心指标看板")
        cols = st.columns(7)

        zt_data = df.get('涨停梳理', {}).get('newCard', pd.DataFrame())
        if not zt_data.empty:
            metrics = {
                "涨跌停比": (zt_data.iloc[0, 4], "涨停家数与跌停家数比例"),
                "昨日涨停表现": (f"{float(zt_data.iloc[1, 0]):.2f}%""昨日涨停股票的市场表现"),
                "连板率": (f"{zt_data.iloc[2, 0]}%""连续涨停板占比"),
                "封板率": (f"{zt_data.iloc[3, 0]}%""成功封住涨停的比例"),
                "连板收益率": (zt_data.iloc[4, 0], "连板收益率"),
                "连板溢价率": (zt_data.iloc[5, 0], "连板溢价率"),
                "情绪温度": (f"{df['情绪温度']['line3'].iloc[-1]['情绪温度走势']:.1f}℃""市场情绪综合指标")
            }

            for col, (name, (value, help_text)) in zip(cols, metrics.items()):
                with col:
                    st.metric(name, value, help=help_text)

        # ================== 市场动向分析 ==================
        st.header("🌐 市场动向分析")
        market_trend = df.get('市场动向''')
        if market_trend and len(market_trend) > 10:
            st.markdown(market_trend, unsafe_allow_html=True)
        else:
            st.info("📅 市场动向数据将于交易日15:30更新,请稍后查看")

        # ================== 情绪温度走势 ==================
        st.header("🌡️ 情绪温度趋势")
        emotion_data = df.get('情绪温度', {}).get('line3', pd.DataFrame())
         if not emotion_data.empty:
            try:
                emotion_data['日期'] = pd.to_datetime(
                    emotion_data['时间区间'].astype(str).str[:8],
                    format='%Y%m%d',
                    errors='coerce'
                )
                valid_data = emotion_data.dropna(subset=['日期'])
                if not valid_data.empty:
                    st.line_chart(
                        valid_data.set_index('日期')['情绪温度走势'].rename("情绪温度"),
                        use_container_width=True
                    )
                else:
                    st.warning("有效日期数据缺失")
            except Exception as e:
                st.error(f"图表渲染失败: {str(e)}")
        else:
            st.warning("情绪温度数据暂不可用")

        # ================== 详细数据解析 ==================
        st.header("📚 详细数据解析")
        tabs = st.tabs(["连板天梯""焦点个股""市场事件"])

        with tabs[0]:
            st.subheader("🏆 连板天梯榜")
            lb_data = df.get('连板天梯', {})
            if lb_data:
                st.write("### 高位连板")
                if'高位板'in lb_data and 'tableV1'in lb_data['高位板']:
                    st.dataframe(lb_data['高位板']['tableV1'], height=400)
                else:
                    st.info("暂无高位连板数据")


                st.write("### 两连板")
                if'两连板'in lb_data and 'tableV1'in lb_data['两连板']:
                    st.dataframe(lb_data['两连板']['tableV1'], height=400)
                else:
                    st.info("暂无两连板数据")
            else:
                st.warning("连板数据加载失败")

        with tabs[1]:
            st.subheader("🔥 焦点个股分析")
            focus_stocks = df.get('焦点股', pd.DataFrame())
            if not focus_stocks.empty:
                st.dataframe(
                    focus_stocks,
                    column_config={
                        "股票简称""名称",
                        "连涨天数": st.column_config.NumberColumn(
                            "连涨",
                            help="连续上涨天数",
                            format="%d 天"
                        ),
                        "涨跌幅:前属同花顺行业": st.column_config.ProgressColumn(
                            "行业涨幅",
                            format="%.2f%%",
                            min_value=-10,
                            max_value=10
                        )
                    },
                    hide_index=True,
                    use_container_width=True
                )
            else:
                st.info("今日无重点监控个股")

        with tabs[2]:
            st.subheader("📅 市场事件追踪")
            event_data = df.get('自选股近15天重要事件', {})
            if event_data:
                col1, col2 = st.columns([3, 2])
                with col1:
                    st.write("### 自选股事件")
                    if'tableV1'in event_data:
                        st.dataframe(event_data['tableV1'], use_container_width=True)
                    else:
                        st.info("近期无自选股相关事件")

                with col2:
                    st.write("### 实时要闻")
                    if'txt1'in event_data:
                        st.markdown(event_data['txt1'], unsafe_allow_html=True)
            else:
                st.warning("事件数据加载失败")

    except Exception as e:
        st.error(f"系统错误: {str(e)}")
        st.button("🔄 重新加载数据"type="primary")


上面是解析数据的代码, 有点python、pandas基础应该就能看懂了,  可以把这些数据存储入库,根据时间序列就可以分析出 情绪变化(比如连板率、封板率、 破板率等)了。 

是不是很简单,为什么我没列出完整代码。 因为每个人的需求不一样,  我自己做了下简单处理, 每天16点定时抓取数据, 然后保存成json文件, 通过历史数据,查询选择日期就可以看到 当天的历史复盘了。 A股我喜欢量化情绪来指导操作,所谓物极必反嘛。


相关文章推荐:

【Python技术】获取同花顺概念指数对应股

【Python技术】问DeepSeek处理日历库获取交易日几种实现方式
【Python技术】同花顺wencai涨停分析基础上增加连板分析
【Python技术】利用同花顺wencai进行竞价数据分析
【Python技术】A股涨停最高板多个情况展示并附上表格明细
【Python技术】提取新闻联播热点内容分析并让大模型给出投资建议
[Python技术]利用akshare获取股票基本信息、K线图、最新新闻 以及大模型投资建议

【Python技术】利用akshare获取A股公告,并通过关键字获取自己想要的内容

【Python技术】利用tushare、wencai分析某天涨停股票次日涨跌幅情况

[Python技术]利用streamlit构建多页面应用功能


另外,从0搭建量化分析交易系统系列得慢慢写了, 主要是因为自己学习、编码进度没跟上。特别是今天,大盘涨得有点凶,有点没心思写代码,就把前2天写的代码分享给大家。 有些时候,涨得猛没心思,跌得猛也没心思, 什么时候才可以做到 宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒


最后,最近几乎每天有同学问我,怎么加我微信,怎么入群, 貌似我在多个公众号入口放了名片。 这里再放一下, 加我微信,备注下就可以入群交流  编程、 投资、 AI等。   如果需要新开户,需要申请qmt或ptrade量化交易软件,  费率优惠, 万0.854 , 也可以找我。 







Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179268
 
283 次点击