dsh-xueqiu · 雪球 mini 行情面板
DeepSeek Harness 上的雪球行情面板:免登录查看 A股/港股/美股实时行情、K线、分时、热榜、搜索、7×24 快讯与热议用户。面板嵌入输入框上方不遮挡对话,常驻行情区域显示四大指数与自选股涨跌,交易时段智能刷新。
中文 | English
功能 · 截图 · 安装 · 使用 · 稳定性 · 质量与测试 · FAQ · 更新日志
🆚 与同类行情插件
| 能力 | dsh-xueqiu | 股票皮肤类插件 |
|---|
| 面板形态 | 嵌入输入框上方,不遮挡对话 | 全局换肤/状态栏 |
| K线/分时 | KLineChart 引擎蜡烛图/分时面积图+均线+十字光标,7 档周期 | 部分有 |
| 热榜/快讯/KOL | 全有 | 多数无 |
| 数据源 | 雪球(社区数据:帖子/热议用户独有) | 腾讯/Yahoo 等 |
| 请求防护 | 闸门+看门狗+缓存+自愈+隐藏暂停 | 一般仅缓存 |
| 常驻行情区域 | 四大指数+12 自选两列平铺,⤡ 调宽 | 多为纯状态栏 |
| 主题 | 跟随 DSH 明暗 | 需整体换肤 |
✨ 功能
| 功能 | 说明 |
|---|
| 📊 实时行情 | 大盘指数(上证/深证/创业板/科创50)+ 自选股列表,涨红跌绿,表头点击排序 |
| 🕯️ K线图 | 基于 KLineChart v10 引擎(canvas 渲染,内置主题适配):蜡烛图 + 独立成交量窗格 + MA 均线 + 十字光标 legend,5分/15分/30分/60分/日K/周K/月K 7 档切换;滚轮缩放 + 拖拽平移,右拖触底自动加载更早历史(500 根/次,已实测连续加载至 3400+ 根) |
| ⏱️ 分时图 | 面积价格线(涨跌色)+ 均价线 + 昨收基准虚线,十字光标 tooltip 查任意分钟 价/均价/涨跌 |
| 🔥 热榜 | 雪球热门榜,A股/美股/港股/全球 切换 |
| 🔍 搜索 | 搜股票(一键加自选/看详情)、搜帖子 |
| 📰 快讯 | 7×24 实时快讯,重要新闻高亮 |
| 👥 热议用户 | 个股热门 KOL(粉丝数/认证标识) |
| 💼 自选股 | 本地持久化,增删随点随改;可选登录后直接使用雪球云端自选股 |
| 👤 可选登录 | 粘贴浏览器 Cookie 即可登录(借鉴 xueqiu-cli 手动模式):登录后自动拉取云端自选股,加/删自选尽力同步到云端;Cookie 仅存本机 ~/.dsh 工作区文件,不上传任何第三方 |
| 🧲 嵌入式面板 | 完整面板停靠在输入框上方(官方 conversation.input.dock 槽位),随页面布局流动,不遮挡对话记录 |
| 🏷️ 行情区域 | 常驻悬浮区域:头部一行 logo/盘中状态,四大指数两列(上证/深证/创业/科创50)+ 自选前 12 只两列平铺;点击开合面板,拖动调整位置(记忆),右下角 ⤡ 手柄调宽度 120–480px(双击复位 320),宽度/位置持久化 |
| 📏 面板高度可调 | 拖动面板底边调整高度(160px–85% 视口,双击复位),高度持久化记忆 |
| ⌨️ Esc 收起 | Esc 先关个股详情,再收起面板;点行情区域或底部指数条重新展开 |
| 🛡️ 请求防护 | 并发 2 + 100ms 最小间隔对齐网页端行为;30s 看门狗强制释放悬挂请求防管线冻结;Cookie 失效/风控自动重播种重试;限频指数退避;页面隐藏自动暂停全部轮询(回前台立即恢复) |
| 🗂️ 渐进详情 | 个股详情报价+K线先上屏,分时/财务/KOL 到达后增量合并,不用等齐 |
| ⏱️ 智能刷新 | 盘中 20s 刷新行情,收盘自动放慢,降低被风控概率 |
| 🕐 交易时段 | 面板头常驻显示 A 股/港股/美股 盘中·午休·盘前·休市(本地时区推算,不含节假日),行情区域显示精确 A 股时段 |
| 🌗 主题自适应 | 跟随 DSH 明暗主题 |
| 🤖 Agent 工具 | 对话内直接问行情:xueqiu_quote(实时行情)、xueqiu_kline(K线)、xueqiu_search(搜股票)、xueqiu_hot(热榜)、xueqiu_news(7×24 快讯)、xueqiu_kol(个股热议大V)——模型直接调用,无需翻网页 |
| 🃏 工具调用卡片 | xueqiu_quote 渲染为红涨绿跌行情表、xueqiu_kline 为迷你蜡烛图、xueqiu_hot 为热榜排名列表、xueqiu_news 为快讯时间线(重要快讯高亮),对话流内直接看结果 |
所有数据来自雪球公开接口(访问首页获取匿名 cookie + 浏览器 UA/Referer),无需登录。
📸 截图
嵌入式主面板:停靠在输入框上方,指数卡 + 自选股行情 + 四个功能页签:
主面板
个股详情:16 项行情数据 + K线蜡烛图(成交量柱 / MA5-10-20 均线 / 十字光标)+ 财务指标 + 热议用户:
个股详情
迷你行情区域:四大指数 + 自选 12 只两列平铺,⤡ 手柄调宽度,点击开合面板,可拖动:
Agent 工具调用卡片(对话内直接问行情,结果渲染为专属卡片而非 JSON):
xueqiu_hot 热榜 | xueqiu_news 快讯时间线 |
|---|
| hot | news |
📦 安装
方式一:标准 bundle 插件(推荐)
# npm 包
dsh plugin --profile web add dsh-xueqiu
# 或 GitHub 源(git 安装会直接从源码构建)
dsh plugin --profile web add github:wanderer-yk/dsh-xueqiu
# 或本地目录
dsh plugin --profile web add ./dsh-xueqiu
添加后重启一次 dsh web(插件行发现按启动缓存),之后刷新页面即可看到面板。
方式二:动态插件(已实测)
本仓库 dynamic/ 目录提供已实测可用的动态 Cordis 插件源码(host.js + client.js)。在任意 DSH 会话中让 Agent 加载即可:
请读取本仓库 dynamic/host.js 与 dynamic/client.js 两个文件,
用 cordis_define(kind: new)定义插件:
code.host 填入 host.js 的内容,code.client 填入 client.js 的内容,
然后 cordis_run 启动它。
🎛️ 使用
- 面板停靠在输入框上方:与对话同列流动,不遮挡任何消息;
收起 — 或 Esc 收起。
- 右下角行情区域常驻显示四大指数 + 自选前 12 只(两列平铺);点击开合面板,拖动调整位置(记忆位置),⤡ 手柄横向调宽(120–480px,双击复位)。
- 输入框下方的指数条点击也可展开面板。
- 点击自选股、指数卡或热榜行 → 个股详情:16 项行情数据 + K线/分时切换(悬停图表看十字光标详情)+ 财务指标(ROE/毛利率/净利同比等)+ 热议用户。
- 面板高度:拖动面板底边的手柄上下调整(160px ~ 85% 视口高度),双击手柄复位;高度会被记忆。
- 登录雪球(可选):点面板右上「👤 登录」,按提示从浏览器复制 Cookie 整行粘贴即可。登录后自选股切换为你的雪球云端自选股(云端为准,10 分钟自动同步);「同步云端自选」可随时手动拉取;加/删自选双端同步(
portfolio/stock/add.json / cancel.json)。Cookie 只保存在本机,退出登录即清除。
- 刷新频率:盘中行情 20s、内容 60s;收盘后自动降为 60s / 3min。
🔧 稳定性设计
数据层内置多层防护,长时间挂机也不会卡死:
- 请求闸门:并发上限 2、请求间最小间隔 100ms,模拟网页端节奏,降低风控概率。
- 30s 看门狗:单个请求悬挂超 30s 即强制释放调度槽并报错,不会冻结后续所有请求。
- TTL 缓存 + in-flight 去重:相同 URL 短时间窗内直接命中缓存,并发重复请求共享同一 Promise。
- 匿名 Cookie 落盘复用:播种成功的匿名 token 持久化到
$DSH_HOME/dsh-xueqiu/,进程重启/新会话免播种直接复用(2026-10 实测部分网络 IP 被雪球边缘节点拦截、播种拿不到 token——活进程靠内存 cookie 存活而冷启动即死的教训);文件 cookie 失效时自动重播种自愈。
- Cookie 自愈:匿名 cookie 失效(错误码 400016)或被风控返回空响应时,自动重新访问雪球播种新 cookie 再重试(种子请求带浏览器导航头收窄指纹差异)。
- seed_blocked 快速失败:播种链被边缘拦截且上游明确拒绝(400016)时不再空转重试,直接报出可操作指引(粘贴浏览器 Cookie 登录解锁),
debug RPC 的环形事件流(最近 50 条播种/重试/落盘事件)可一键看现场。
- 限频退避:遇到"请求频繁"按 2s→4s 指数退避后重试。
- 渐进渲染:详情页报价 + K线先行上屏,分时/财务/KOL 异步到达后增量合并。
🧪 质量与测试
平台要求:macOS / Linux / Windows。macOS/Linux 走 POSIX shell curl;Windows 走 DSH 的 PowerShell 层显式调用 curl.exe(Win10+ 自带),引号语义天然兼容,已在 GitHub Actions windows-latest 上真连雪球全量验证(含匿名 Cookie 播种链路)。
三套互补的自动化测试,每次发版前全部通过(最近一次实测 2026-08-20,macOS + dsh web 3080 端口):
| 套件 | 覆盖 | 实测结果 |
|---|
scripts/static-smoke.sh | 静态安装 7 道门禁(tarball 解包 → cordis 组合 → bundle 注册 → RPC 起活) | ✅ 7/7 |
scripts/feature-matrix.py | 20 个 RPC 动作 × 正常/边界/非法/降级 × 未登录/已登录/Cookie过期 三环境 | ✅ 54–56 项断言全过 / 每环境 |
scripts/browser-interact.sh | 真实鼠标交互:徽章拖动/⤡调宽/双击复位/面板开合/四个页签数据/越界恢复钳制 | ✅ 全过 |
热缓存性能实测(数据已在 TTL 窗口内,即用户连续操作时的体验):
kline 日K 120 根 1–12 ms
quote 3 只行情批量 1 ms
quoteDetail 个股详情 1 ms
search 搜索"茅台" 2 ms
finance 财务指标 2 ms
首次冷请求(需访问雪球取数)典型耗时 100–700ms,全部经请求闸门(并发 2)排队。复现方式:装好插件后 python3 scripts/feature-matrix.py --base http://127.0.0.1:3080 --mode logged。
📁 目录结构
dsh-xueqiu/
├── src/
│ ├── index.js # Host 插件(curl 数据层 + connection RPC)
│ └── client/index.js # Client 插件(嵌入式面板 + 常驻行情区域 UI)
├── dynamic/
│ ├── host.js # 动态插件版 Host(已实测)
│ └── client.js # 动态插件版 Client(已实测)
├── package.json # bundle 声明(dsh.bundle / dsh.client)
└── cordis.patch.yml # bundle 层插入
❓ FAQ
Q: 安装后面板不出现?
按安装说明重启一次 dsh web(插件行按启动缓存发现),再硬刷新页面(Ctrl/Cmd+Shift+R)。仍无面板时看右下角有无行情区域——区域在则点它展开。
Q: 行情数据突然全空/报错?
雪球匿名 cookie 偶发被风控(错误码 400016 或空响应)。插件会自动重播种 cookie 并重试;播种成功的 cookie 会落盘,重启后免播种复用。若报 [seed_blocked] 匿名 Cookie 获取失败(雪球边缘风控拦截或网络不可达),说明当前出口 IP 被雪球边缘节点拦截(不是插件故障)——等 1–2 分钟再试,或在面板右上「登录」粘贴浏览器 Cookie 直接解锁全部数据。debug RPC 的 events 字段(最近 50 条播种/重试事件)可供排障。
Q: K线周期里分时下为什么没有周期按钮?
分时模式只展示当日分钟线,K线模式才有 7 档周期,属设计行为。
Q: 交易时段提示节假日准吗?
不准。时段按每周一至周五的固定钟点本地推算,不含法定节假日调休,仅供参考。
Q: 自选股和面板设置存在哪?
宿主本地稳定目录 $DSH_HOME/dsh-xueqiu/(默认 ~/.dsh/dsh-xueqiu/)下的 .xueqiu-watchlist.json / .xueqiu-ui-state.json / .xueqiu-login.json(登录)与 .xueqiu-anon.json(匿名 cookie 缓存,1.25.0 起),各带 .bak 损坏兜底;沙箱拒绝时透明回退工作区目录。与浏览器 localStorage 无关,换浏览器不丢,也不随 dsh web 启动目录漂移(v1.22.12 起的稳定目录行为)。
Q: 会不会影响 DSH 本体?
插件 UI 全部挂在官方槽位(conversation.input.dock / shell.overlay / conversation.composer.dock),卸载即完全消失,不改 DSH 源码。
⚠️ 免责声明
- 本项目非雪球官方产品,与雪球网/雪球公司无关;"雪球"为雪球公司商标,此处仅作数据来源描述。
- 数据来自雪球公开 Web 接口,仅供学习与研究,不构成任何投资建议;请勿高频请求,遵守目标网站条款。
- 接口可能随时变更导致功能失效,欢迎提 Issue / PR。
📋 更新日志
- 1.25.0(2026-10-23)
- 修复:匿名链路对冷启动的脆弱性(当日实测事故)——部分网络 IP 上两个种子 URL 均被雪球边缘节点(TencentEdgeOne)拦截(HTTP 5xx 不发 set-cookie),活进程靠内存 cookie 存活、重启即死板。三层加固:① 播种成功的匿名 cookie 落盘
$DSH_HOME/dsh-xueqiu/.xueqiu-anon.json,冷启动先读文件免播种(失效自动重播种自愈并覆盖);② 种子请求补浏览器导航头(Accept/Accept-Language/sec-fetch 系)+ --compressed 收窄指纹差异,单种子超时 12s→8s(最坏 2×10s+12s 不再撞穿 30s 看门狗);③ 播种失败 + 上游 400016 时快速失败为 [seed_blocked],文案直接引导"面板右上登录粘贴 Cookie",不再空转 3 轮上游请求循环报错。
- 新增:
qa/probe-seed.mjs 播种探针(候选 URL × 头组合实测 set-cookie 返回,扩容播种链的决策工具,不进 CI)。
- 重构:client 传输层与样式注入改运行时接缝(
typeof host / typeof styles 判定),gen-static.py 不再做 DYNAMIC_CALL/STATIC_CALL 整函数文本替换——每次改 call() 从此不必同步改生成器(锚点漂移即失败的一整类维护负担消失)。
- 新增:client 纯逻辑层单测(
qa/client-pure.mjs,61 断言)——格式化/交易时段/K线归一化 + makeIndexPoll/makeUiStore 工厂化(依赖全注入:in-flight 去重、订阅回放、隐藏门、5s 节流、open 即时落盘全可测);host 缓存工厂 makeCache 时钟注入(qa/cache.mjs,16 断言:TTL 过期/FIFO 淘汰/24h 清扫——unit.mjs 曾自认"伪造时间不好做"的盲区);传输接缝路由回归(qa/client-bundle.mjs,13 断言:生成物伪浏览器求值防 TDZ + 动态门面/普通函数/无 host 三环境分支路由——后者源自复审发现的接缝守卫缺陷:typeof host.call 对任何同名全局函数都为真,已加 !== Function.prototype.call 收紧)。三套件全部接入本地与 CI 关卡。
- 加固:
debug RPC 增加最近 50 条环形事件流(播种成败/重试类型/落盘失败,不含 cookie 值);watchlist.pull 复用同步结果消除双倍上游请求;冒烟数据关卡分级 SMOKE_LIVE=strict|warn(PR 路径上游拦截降级警告,结构关卡仍全 FAIL),CI 真连雪球的 live 步骤移至每日定时;xqIso(null) 不再渲染 1970-01-01;fmtFullDay/pad2 重复定义合并;契约测试 UA 改从 host.js 单一真源提取(曾 Chrome/126 vs /120 漂移);新增 test:offline 聚合脚本与 engines 字段;修复 static-smoke/browser-interact 对新版 dsh token 鉴权的适配缺口(CI 9 月起未跑 push 路径、dsh 升级引入 token 后,smoke 就绪探测裸 poll / 得 401 误报"实例未启动"——现对齐 e2e-boot 的双路径探测并全程携带鉴权;e2e 徽章检查由单次 sleep 8 改 6×5s 轮询 + 失败分层诊断)。
- 1.24.1(2026-10-22)
- 修复:面板关闭时拖动徽章的位置不落盘——
onUp 提交 badgePos 后未调 saveUi,而落盘订阅者(DockPanel)仅在面板打开时挂载;徽章交互常态恰发生在面板关闭时,刷新后位置回退(对照:调宽手柄 onGripUp 一直有显式落盘)。现为拖拽松手后显式 saveUi()。
- 修复:越屏位置的钳制修正不落盘——hydrate 钳制后的
ui.set 同样无人落盘,host 里永久残留越屏值(如 99999),每次加载重复钳制。现钳制确有修正时立即 saveUi()。
- 两个 bug 均由浏览器 e2e 加强断言暴露(旧断言只查"badgePos 是对象",被 rpc 预设值骗过)。
- 1.24.0(2026-10-22)
📄 License
MIT