首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Streamlit + QuantDash 搭建你的专属「个人多市场资产扫描器」

用 Streamlit + QuantDash 搭建你的专属「个人多市场资产扫描器」

原创
作者头像
用户9138916
发布2026-07-12 15:19:56
发布2026-07-12 15:19:56
1190
举报

对于量化研究员而言,常常会遇到这样一个工程尴尬: 写好了一个技术指标策略或相关性扫描算法,想要做个简单的可视化界面进行日常复盘,但如果去写 React / Vue 这样的前端框架,耗费的精力甚至超过了策略开发本身;如果只在 Jupyter Notebook 里用 matplotlib 画图,又缺乏基本的交互性(比如无法动态修改指标周期、无法便捷输入任意股票代码查询)。

有没有一种方案,可以让 Python 开发者仅用百行左右的代码,就能快速搭建出一个专业的 Web 交互式量化分析看板?

答案是:Streamlit + QuantDash

通过轻量级前端框架 Streamlit 结合 QuantDash 覆盖沪深、港、美多市场的 Python SDK[3],你可以极速搭建一个用于多资产技术分析与数据查询的私人工作台。本文将带你手把手完成这一轻量级看板系统的实现。


核心设计思路

  • 多市场灵活接入:看板支持输入任何规范格式的股票代码(如 600519.SH、AAPL.US、00700.HK)[3]。
  • 轻量化前后端解耦:利用 quantdash-python-sdk 负责底层的行情历史数据获取[5];利用 Plotly 绘制可缩放、可交互的 K 线和技术均线图;利用 Streamlit 的滑块和文本框等组件作为实时控制台。
  • 部署简单:不需要配置 Nginx 或复杂的 Docker 链路,在腾讯云轻量应用服务器(Lighthouse)上运行一个命令即可完成公网访问。

实战:编写 app.py 看板程序

1. 准备工作

确保本地已安装必须的可视化和数据获取库:

代码语言:bash
复制
pip install streamlit plotly pandas quantdash

2. 完整看板代码(保存为 app.py)

代码语言:python
复制
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
from quantdash import QuantDash

# 1. 页面基本配置
st.set_page_config(layout="wide", page_title="多市场资产扫描看板", page_icon="📊")

st.title("📊 个人多市场资产扫描器")
st.caption("基于 QuantDash 金融数据 API 与 Streamlit 快速构建的技术分析复盘看板")

# 2. 侧边栏参数配置
st.sidebar.header("🔧 系统配置与参数")
api_key = st.sidebar.text_input("QuantDash API Key", type="password", help="请输入你的 QuantDash 平台 Token")
symbol = st.sidebar.text_input("股票代码", value="00700.HK", help="支持 A股(如 600519.SH)、港股(如 00700.HK)、美股(如 AAPL.US)")

start_date = st.sidebar.date_input("开始日期", value=pd.to_datetime("2024-01-01"))
sma_period = st.sidebar.slider("简单均线 (SMA) 周期", min_value=5, max_value=120, value=20)

# 3. 核心逻辑:数据拉取与可视化
if not api_key:
    st.info("💡 请先在左侧边栏配置您的 QuantDash API Key 启动看板。")
else:
    # 初始化 SDK 客户端
    qd = QuantDash(api_key=api_key)
    
    with st.spinner("正在向 QuantDash 请求最新行情数据..."):
        try:
            # 调用 SDK 获取前复权 K 线
            df = qd.stock.get_kline(
                symbol=symbol,
                start_date=start_date.strftime("%Y-%m-%d"),
                adjust="forward"
            )
            
            # 数据安全排序并计算移动平均线
            df['date'] = pd.to_datetime(df['date'])
            df = df.sort_values(by="date")
            df['SMA'] = df['close'].rolling(window=sma_period).mean()
            
            # 4. 指标卡片面板展示
            latest_data = df.iloc[-1]
            prev_data = df.iloc[-2] if len(df) > 1 else latest_data
            
            price_change = latest_data['close'] - prev_data['close']
            price_change_ratio = (price_change / prev_data['close']) * 100
            
            col1, col2, col3 = st.columns(3)
            col1.metric(
                label=f"{symbol} 最新价格", 
                value=f"${latest_data['close']:.2f}", 
                delta=f"{price_change:+.2f} ({price_change_ratio:+.2f}%)"
            )
            col2.metric(
                label="今日成交量", 
                value=f"{int(latest_data['volume']):,}"
            )
            col3.metric(
                label=f"当前 {sma_period}日均线", 
                value=f"${latest_data['SMA']:.2f}" if not pd.isna(latest_data['SMA']) else "计算中..."
            )
            
            # 5. 绘制交互式 Plotly K线与指标图
            fig = go.Figure()
            
            # 添加 Candlestick 走势
            fig.add_trace(go.Candlestick(
                x=df['date'],
                open=df['open'],
                high=df['high'],
                low=df['low'],
                close=df['close'],
                name="K线走势"
            ))
            
            # 添加均线折线
            fig.add_trace(go.Scatter(
                x=df['date'],
                y=df['SMA'],
                line=dict(color='gold', width=1.5),
                name=f"{sma_period}日 均线"
            ))
            
            fig.update_layout(
                xaxis_rangeslider_visible=False,
                height=550,
                title=f"{symbol} 走势技术面透视",
                template="plotly_dark", # 深色系专业外观
                margin=dict(l=20, r=20, t=50, b=20)
            )
            
            st.plotly_chart(fig, use_container_width=True)
            
            # 6. 数据源明细展示
            with st.expander("📂 点击展开原始行情数据明细"):
                st.dataframe(
                    df.sort_values(by="date", ascending=False), 
                    use_container_width=True
                )
                
        except Exception as e:
            st.error(f"⚠️ 数据获取或计算失败,原因: {e}")

3. 如何在本地/云端运行

在命令行中直接执行以下命令:

代码语言:bash
复制
streamlit run app.py

终端会输出一个本地局域网地址(如 http://localhost:8501)以及您的云服务器公网地址。打开浏览器输入该地址,即可使用专属的交互式多市场扫描工作台。


总结与工程拓展建议

通过这种架构,你无需编写任何 HTML/JS 代码,就能以非常直观的方式验证策略信号的准确性。如果需要进一步扩展看板,你还可以利用 Streamlit 的 st.multiselect 组合不同股票,实现多资产相关性热力图监控,或者将此前编写好的量化算法加入进来,做成一个真正随身携带的可视化策略研究终端。基于 quantdash 标准化、开箱即用的多市场数据能力,这一切的开发耗时都将大打折扣。

参考文档:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心设计思路
  • 实战:编写 app.py 看板程序
    • 1. 准备工作
    • 2. 完整看板代码(保存为 app.py)
    • 3. 如何在本地/云端运行
  • 总结与工程拓展建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档