在 DSH Web 右上角添加 A 股自选股盯盘弹窗:实时行情、分时/K 线、买卖目标价提醒,并集成扇形 AI 入口一键生成研究与复盘对话。
- 语言
- JavaScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add github:Awu12277/dsh-stock-watch在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
一句话定位
在 DSH Web 界面的右上角提供可折叠、可拖动的 A 股自选股盯盘弹窗,实时展示自选股涨跌、目标价触发、分时与日/周/月 K 线,并把"一键投资研究""每日复盘/行情分析/涨停分析"等 AI 入口就地接入到 DSH 对话。
核心能力
- 在 DSH Web 右上角提供可折叠拖动的📈自选股药丸与展开面板:折叠态显示当前分组涨跌家数(
3↑0↓),展开后列出名称/代码、现价、涨跌幅、迷你分时折线与目标价触发标记(买入/卖出/等待) - 支持多分组自选股(分组名、代码、买卖目标价),面板内
+按名称/代码检索全 A 股池(约 5549 只);分组配置持久化在浏览器localStorage,首次启动从~/.stocking/settings.json一次性迁移 - 提供分时视图(含黄色均价 VWAP 线与昨收基准虚线,按 A 股交易时段 09:30–11:30 / 13:00–15:00 标注,午间留白)与日/周/月前复权 K 线(蜡烛+成交量柱+MA5/10/20/60 均线);K 线支持
+/−/重置缩放,MA 显隐可切换 - 买入/卖出目标价在列表与详情实时显示,详情页点击进入数字输入(两位小数、留空清除、回车确认、Esc 取消),保存后立即写回 localStorage 并重算触发标记
- 胶囊拖到屏幕四边自动吸附为半球(仅显示涨跌家数);悬浮胶囊触发 GSAP 扇形动画菜单,提供「📊 行情分析 / 📅 每日复盘 / 🚀 涨停分析」三个选项,方向按胶囊所在象限自动布局,鼠标在菜单内不收起
- 详情页"📈投资研究报告"按钮与扇形菜单点击均新开 DSH 对话发送简短关键词,由 host 端注入的条件式系统指令保证自动按预定义框架(A 股短线复盘 / 行情分析 4 项 / 涨停分析 4 项 / 投资研究+前端设计)执行
技术实现
- 语言: JavaScript(ESM,未启用 TypeScript;
index.js+client.js两个源文件) - 关键依赖: Host 端零外部依赖(仅用
node:os、node:fs/promises、node:fs、node:url内置模块与 Node 原生fetch);Client 端通过__ModuleLoader__.require("react")复用宿主 React;图表层懒加载 CDN:lightweight-charts@4.2.3(unpkg / jsdelivr 双源)与gsap@3.12.5,CDN 不可用时自动降级为自绘 SVG 蜡烛与折线 - 架构模式: dual-half 宿主插件。Host half 通过
ctx.inject(['webServer'])注册 5 条/dsh-stock-watch/*路由(config/stocks/quotes/kline/minute),并在apply启动时通过ensureUserSkills()把随包investment-research与frontend-design两个技能复制到~/.agents/skills/(目标已存在则跳过),随后通过ctx.get('systemPrompt')注入两条order=200 / 201 的条件式 system prompt section;Client half 通过ctx.slots.inject("shell.overlay", ...)在 DSH Web 右上角嵌入可拖动 React 弹窗,依赖宿主的slots、connection、sessions服务 - 入口文件: Host 入口
index.js(apply/name = 'dsh-stock-watch',inject = ['webServer']);Client 入口client.js(inject = ['slots']);挂载声明cordis.patch.yml(在 web profile 插入 1 行 Loader)+package.json#dsh.bundle.patch+package.json#dsh.client.platform = 'web'
适用场景
在 DSH Web 工作流中写作或对话的 A 股投资者,希望在不离开聊天界面的前提下随时看到自选股涨跌与达到目标价的提示,并把临时冒出的"今天看好哪只、为什么""盘后复盘""涨停分析"等问题一键转交给 DSH 对话获得投研回答或盘后复盘。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness (DSH) | 未声明 | package.json 未声明 engines 或 dshhub.compatibility.dsh;通过 dsh plugin --profile web add 安装,依赖 webServer / slots 两个宿主服务 |
| Node.js | 未声明 | package.json 未声明 engines;源码使用 Node 原生 fetch、AbortSignal.timeout(12000)、node:fs/promises、fileURLToPath,建议 Node ≥18(fetch 与 timeout 稳定版本) |
| 平台 | 跨平台 | 纯 JS + 内置 Node 模块,无原生依赖;Host 端在启动时联网腾讯财经 web.ifzq.gtimg.cn,Client 端可选访问 unpkg.com / cdn.jsdelivr.net |
| 原生模块 | 无 | 不引入 node-gyp 模块,全部依赖为 JS 或纯浏览器脚本 |
安装方式
dsh plugin --profile web add github:Awu12277/dsh-stock-watch
配置项
本插件没有宿主端的 Schema 配置;自选股、买卖目标价、面板位置、面板尺寸与 MA 均线显隐均在浏览器 localStorage 中通过面板 UI 管理。Host 端提供两个可选环境变量:
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
DSH_STOCK_WATCH_NO_SKILLS | 环境变量 | 设置为 1 后禁用首次启动时把随包技能复制到用户技能目录的逻辑 | 未设置(启用注入) |
DSH_STOCK_WATCH_SKILLS_DIR | 环境变量 | 自定义技能注入目标目录,覆盖默认的 ~/.agents/skills | ~/.agents/skills |
常见问题
Q: 安装后右上角没有出现📈自选股药丸怎么办?
A: 确认安装命令带了 --profile web 并且安装后重启了 dsh web。package.json#dsh.client.platform 固定为 web,只有 web profile 会在启动时扫描这个 bundle;仅刷新浏览器不会重新装载宿主页与客户端模块。
Q: 行情数据从哪里来?和官方接口一样吗?
A: Host 端使用 Node 原生 fetch 直连腾讯财经公开接口 web.ifzq.gtimg.cn(minute/query 与 fqkline/get),与上游 CLI 项目 stocking 的 market.ts 同源。即使 DSH 部署未挂载 web fetch provider 或沙箱封锁了部分网络,本插件仍能取到行情。
Q: 自选股怎么添加?数据存在哪里?怎么彻底清除?
A: 在面板顶部按 + 进入添加视图,按名称或代码检索全 A 股池(约 5549 只),回车即加入当前分组。所有用户配置(分组、代码、买卖目标价、面板位置、面板尺寸、MA 显隐)都持久化在浏览器的 localStorage,key 分别为 stocking.config.v1 / stocking.pos.v1 / stocking.size.v1 / stocking.ma.v1。首次安装时若检测到 ~/.stocking/settings.json 会自动迁移,之后 localStorage 为唯一来源;浏览器控制台执行 localStorage.removeItem('stocking.config.v1') 后刷新即可恢复默认分组(上证指数、沪深 300、紫金矿业)。
Q: 右上角的"一键投资研究"和扇形菜单是怎么工作的?会泄露我的设置吗?
A: 它们都不会把提示词正文暴露在消息里。"投资研究"按钮发送的是简短消息 分析{公司名}(代码),扇形菜单发送的是"每日复盘 / 行情分析 / 涨停分析"三个关键词。完整提示词由 host 端通过 ctx.get('systemPrompt').section() 注入两条条件式 system prompt section,仅当用户消息匹配"分析某家上市公司"或对应关键词时按框架展开,避免污染日常对话。注意「每日复盘」只在 15:00 至次日 09:00 之间可点击,交易时段会被置灰并提示"还未收盘"。
Q: 目标价触发后怎么提醒?需要打开页面吗?
A: 详情页点 "买入目标" / "卖出目标" 进入数字输入(两位小数、留空清除、回车确认、Esc 取消),保存后回写 localStorage 并即时重算。当前价 ≥ 卖出价标记 卖出,≤ 买入价标记 买入,反之为 等待,在列表与详情以胶囊颜色显示。插件不会发送系统级推送通知,需要保持 DSH Web 页面打开。
Q: K 线、扇形动画需要联网吗?网不好会怎么样?
A: K 线默认从 unpkg.com 与 cdn.jsdelivr.net 加载 lightweight-charts@4.2.3,扇形菜单加载 gsap@3.12.5,两个 CDN 依次尝试。CDN 不可达时会自动降级为自绘 SVG(蜡烛与折线仍可见),但缩放交互动画、GSAP 扇形展开等细节可能不完整。
Q: 卸载之后还要清理什么?
A: 执行 dsh plugin --profile web remove dsh-stock-watch 后重启 dsh web,客户端弹窗与宿主路由会被一并移除。本插件首次启动时复制的 ~/.agents/skills/investment-research 与 ~/.agents/skills/frontend-design 因为是文件级复制,会按普通文件保留(如不再需要可手动 rm -rf 清理);用户已有的同名技能不会被覆盖。
Q: 哪些时段能看到实时行情?非交易时段的数据是昨天的吗?
A: 数据来自腾讯财经分钟接口。A 股交易时段(北京时间 09:30–11:30 / 13:00–15:00)提供分钟级折线;非交易时段返回的是收盘后的快照,列表每 10 秒刷新一次。分时视图的时间轴会按交易日时段标注,午间 11:30–13:00 留白。
上手难度
入门 — 一条 dsh plugin --profile web add + 重启 dsh web,刷新页面即可看到右上角药丸,初次自选股配置都通过面板内 + 与分组 tab 完成,无需编辑配置文件。
已知问题与限制
- 安装或更新后必须重启
dsh web:客户端 bundle 与 cordis 插件行均在启动时扫描,仅刷新浏览器不会重新装载(README.md:26) - 行情接口来自腾讯财经公开端点
web.ifzq.gtimg.cn:连接失败时列表行显示"行情获取失败,请稍后重试",插件不缓存上次价格,刷新即重新请求(client.js:1660 / index.js:387) - 腾讯财经 K 线返回列序以
[date, open, close, high, low, volume]为基准:插件对最后一根 K 线以"现价 vs 最近价"做自校正保险,若接口列序再次变动需要相应调整(index.js:329-342) - 「每日复盘」扇形菜单选项仅在 15:00 至次日 09:00 之间可点击:交易时段会置灰并提示"还未收盘",避免盘未收却要求复盘(README.md:54)
- 客户端图表与扇形动画默认走
unpkg.com/cdn.jsdelivr.net:不可达时自动降级为自绘 SVG,K 线缩放(+/−/重置)与 GSAP 扇形动画等细节可能不完整(client.js:225-300) - 自选股持久化绑定浏览器
localStorage:跨浏览器、跨设备或无痕模式不会同步自选股;多设备共用需自行导出/导入stocking.config.v1(client.js:810-837)
dsh-stock-watch
A 股自选股实时行情盯盘插件:在 DeepSeek Harness(DSH)Web 界面的右上角显示一个可折叠弹窗,实时监控自选股行情、切换分组、查看分时与 K 线、设置买卖目标价。
数据源与原终端 CLI 项目 stocking 同源(腾讯财经),配色沿用 A 股红涨绿跌惯例。
安装
已发布到 npm,一条命令安装到你的 web profile:
dsh plugin --profile web add dsh-stock-watch
- 本地开发安装:
dsh plugin --profile web add file:D:\projects\github\dsh-stock-watch - 或直接通过 git:
dsh plugin --profile web add github:Awu12277/dsh-stock-watch - 安装后重启
dsh web生效;卸载:dsh plugin --profile web remove dsh-stock-watch
安装完成后,刷新页面,右上角出现「📈 自选股」药丸。
截图
| 折叠药丸(右上角实时涨跌家数) | 暗色列表(分组 + 分时迷你折线 + 目标价触发) |
|---|---|
![]() | ![]() |
| 暗色·分时(价格线 / 均价线 / 昨收基准) | 暗色·日 K(TradingView Lightweight Charts) |
|---|---|
![]() | ![]() |
| 浅色主题 |
|---|
![]() |
功能特性
- 右上角可折叠弹窗:折叠时显示自选股实时涨跌家数药丸;展开为完整列表,点击任意行进入详情
- 胶囊可拖动:按住「📈 自选股」药丸可拖到屏幕任意位置,面板随之跟随(右边缘对齐);展开后按住面板头部也可拖动;位置持久化到 localStorage。拖到屏幕四边自动吸附,贴边后胶囊变为半球(屏幕边缘显示涨/跌家数,如
3↑0↓),点击仍可展开面板 - 多分组自选股:分组 tab 切换(分组名 + 股票数),配置存浏览器
localStorage(首次自动从~/.stocking/settings.json迁移) - 实时行情列表:名称 / 代码、现价、涨跌幅、分时迷你折线、目标价触发标记(买入 / 卖出 / 等待 / -),每 10s 自动刷新(带倒计时)
- 分时视图:全天分钟价格线(红涨绿跌)+ 黄色均价线(VWAP)+ 昨收虚线基准,时间轴按 A 股交易时段(北京时间 09:30–11:30 / 13:00–15:00) 标注,午间休市留白
- K 线视图:日 K / 周 K / 月 K 前复权蜡烛图 + 成交量柱 + MA 均线(MA5 白 / MA10 黄 / MA20 紫 / MA60 绿,A 股配色,右上角可自定义隐藏/显示,配置存 localStorage),支持
+ / − / 重置按钮缩放 K 线(位于 MA 均线配置左侧),基于 TradingView Lightweight Charts(CDN 懒加载,失败自动降级为自绘 SVG) - 目标价可编辑:详情页点击「买入目标 / 卖出目标」进入输入框(数字 + 两位小数、留空清除、回车确认 / Esc 取消),即时重算触发标记并持久化
- 一键投资研究报告:详情页「📈 投资研究报告」按钮——新建一个 DSH 对话并发送简短消息
分析{公司名}(代码),由会话中的 agent 自动使用investment-research完成投资研究、frontend-design生成介绍网站(技能指令由 host 端条件式系统提示注入,仅对「分析某家上市公司」类请求生效);按钮带防抖(进行中禁用,防连点重复建会话) - 胶囊悬浮扇形菜单:鼠标移到胶囊(含贴边吸附态)触发 GSAP 扇形动画,展开 📊 行情分析 / 📅 每日复盘 / 🚀 涨停分析 三个选项(方向按胶囊位置自动选择象限、不越出屏幕;鼠标在扇形区域内不收起,移出才收回)。点击选项同样新开一个 DSH 对话并发送简短关键词(如
每日复盘),完整提示词(A股短线复盘框架 / 行情分析 4 项 / 涨停分析 4 项)由 host 端条件式系统提示注入、不暴露在消息里;「每日复盘」仅在 15:00–次日 9:00 可点击,交易时段置灰并提示"还未收盘";拖动/吸附后扇形自动归位重开 - 安装时自动注入技能:插件首次启动时把自带的
investment-research、frontend-design两个技能复制到用户技能目录~/.agents/skills/(已存在则跳过、不覆盖用户版本;DSH_STOCK_WATCH_NO_SKILLS=1可禁用,DSH_STOCK_WATCH_SKILLS_DIR可改目标目录) - 暗色 / 浅色主题:CSS 变量两套配色,默认暗色,☀️/🌙 一键切换(图表配色联动)
架构
┌─────────────── Web 浏览器 ───────────────┐
│ client.js(客户端插件模块) │
│ · shell.overlay 槽位 → 右上角弹窗 │
│ · React + Lightweight Charts + SVG 降级 │
│ · 配置存 localStorage(stocking.config.v1)│
│ │ fetch(同源 /dsh-stock-watch/*)│
└──────────┼────────────────────────────────┘
▼
┌─────────────── DSH Host(index.js)───────┐
│ cordis 插件:webServer 注册 5 个路由 │
│ · /config 读取 ~/.stocking/settings.json│
│ · /stocks 全 A 股搜索(本地池检索) │
│ · /quotes 实时行情(腾讯分钟接口) │
│ · /kline 日/周/月 K 线(fqkline) │
│ · /minute 分时详情(分钟点 + 昨收) │
└───────────────────────────────────────────┘
数据源
- 行情快照 + 分时:
https://web.ifzq.gtimg.cn/appstock/app/minute/query?code={code}&r=0.1 - 日/周/月 K 线:
https://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param={code},{period},,,{count},qfq
解析逻辑(字段索引、K 线 [date, open, close, high, low, volume] 列序、昨收由 现价/(1+涨跌幅%) 反推)与 stocking 的 market.ts 保持一致。Host 端使用 Node 原生 fetch 直连(部署即使未挂载 web fetch provider 或沙箱封锁网络,本插件也不受影响)。
目录结构
dsh-stock-watch/
├── index.js # node 端 cordis 插件(webServer 路由 + 技能注入 + 系统提示指令)
├── client.js # 浏览器端客户端模块(__ModuleLoader__ + shell.overlay 槽位)
├── cordis.patch.yml # 组合补丁:插入 host 插件行(dsh.bundle.patch)
├── package.json # dsh.bundle + dsh.client 声明
├── data/ # 全 A 股股票池(a_stocks.json,5549 只)
├── skills/ # 随包技能(investment-research / frontend-design,启动时注入用户技能目录)
├── scripts/ # 本地测试脚本(smoke / probe / skills 注入验证)
├── screenshots/ # 运行截图
└── README.md
dsh plugin add 即 profile 目录内的 pnpm add:安装后按 package.json 的 dsh.bundle.patch 自动并入 profile 层栈,dsh.client 声明自动挂载浏览器端模块。
交互说明
| 状态 | 操作 |
|---|---|
| 药丸 | 点击展开 · 按住拖动(拖到屏幕边缘自动吸附为半球,显示涨/跌家数)· 悬停弹出扇形菜单(行情分析/每日复盘/涨停分析,新开对话执行) |
| 列表 | 分组 tab 切换 · 点击行进详情 · ⟳ 手动刷新 · — 折叠 · ☀️/🌙 切主题 |
| 详情 | ← 返回 · 分时 / 日K / 周K / 月K 切换 · 📈 投资研究报告(新建对话一键分析)· 点击买入/卖出目标编辑 · K线 +/−/重置 缩放 |
配置与持久化
- 自选股配置(分组、代码、买卖目标价)存浏览器
localStorage(key:stocking.config.v1) - 首次打开自动从
~/.stocking/settings.json一次性迁移(失败则用默认分组),之后 localStorage 为唯一数据源 - 重置:
localStorage.removeItem('stocking.config.v1')后刷新页面
License
MIT




