对于量化研究员而言,常常会遇到这样一个工程尴尬: 写好了一个技术指标策略或相关性扫描算法,想要做个简单的可视化界面进行日常复盘,但如果去写 React / Vue 这样的前端框架,耗费的精力甚至超过了策略开发本身;如果只在 Jupyter Notebook 里用 matplotlib 画图,又缺乏基本的交互性(比如无法动态修改指标周期、无法便捷输入任意股票代码查询)。
有没有一种方案,可以让 Python 开发者仅用百行左右的代码,就能快速搭建出一个专业的 Web 交互式量化分析看板?
答案是:Streamlit + QuantDash。
通过轻量级前端框架 Streamlit 结合 QuantDash 覆盖沪深、港、美多市场的 Python SDK[3],你可以极速搭建一个用于多资产技术分析与数据查询的私人工作台。本文将带你手把手完成这一轻量级看板系统的实现。
确保本地已安装必须的可视化和数据获取库:
pip install streamlit plotly pandas quantdashimport 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}")在命令行中直接执行以下命令:
streamlit run app.py终端会输出一个本地局域网地址(如 http://localhost:8501)以及您的云服务器公网地址。打开浏览器输入该地址,即可使用专属的交互式多市场扫描工作台。
通过这种架构,你无需编写任何 HTML/JS 代码,就能以非常直观的方式验证策略信号的准确性。如果需要进一步扩展看板,你还可以利用 Streamlit 的 st.multiselect 组合不同股票,实现多资产相关性热力图监控,或者将此前编写好的量化算法加入进来,做成一个真正随身携带的可视化策略研究终端。基于 quantdash 标准化、开箱即用的多市场数据能力,这一切的开发耗时都将大打折扣。
参考文档:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。