@laynepeng/dsh-astock
A 股助手(DSH 插件):19 个行情/选股/舆情/回测工具 + 手工交易台账 + 下单提示 + 右栏持仓·选股·维护·配置面板 + 每日自动存档与收盘净值 + 高风险邮件通知。不接任何委托通道,你在券商 App 自己下单。
安裝
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:LaynePeng/dsh-astock說明文件
閱讀完整 README ↗装坏了:配置看起来被清空 / DSH 起不来
先说明责任边界:这不是插件在删你的配置。桌面版在宿主启动失败时弹出的恢复对话框里,如果你点了「停用第三方插件」,DSH 会执行 sanitizeProfile:把 profiles//cordis.patch.yml 改名成 cordis.patch.yml.bak-,写一个 [] 占位,并把 bundle 列表恢复成官方默认。原文件还在,只是名字变了。
不要因此删掉整个 ~/.dsh、profile 目录或 node_modules。按下面顺序来:
-
完全退出 DSH(桌面版关窗口;命令行
Ctrl+C),别让运行中的实例再写回磁盘。 -
在本仓库目录跑只读诊断(默认
~/.dsh、desktopprofile):node scripts/recover.mjs --profile desktop输出会列出
.bak-*备份、当前 patch 的行数,以及解析不到的 bundle / insert 行(最常见的启动失败原因)。自定义过DSH_HOME的加--home /你的/路径;profile 不是 desktop 的用--profile。 -
把最新一份有内容的备份放回去(脚本会先把当前文件改名成
.bak-,不删除任何东西;空占位会被跳过):node scripts/recover.mjs --profile desktop --restore newest没有仓库、或不想跑 Node 脚本的 Windows 用户,可以直接用 PowerShell(效果一样,只复制不删除):
$p = "$env:USERPROFILE\.dsh\profiles\desktop" $bak = Get-ChildItem "$p\cordis.patch.yml.bak-*" | Where-Object { $_.Length -gt 64 } | Sort-Object Name -Descending | Select-Object -First 1 Copy-Item "$p\cordis.patch.yml" "$p\cordis.patch.yml.bak-$(Get-Date -Format yyyyMMddHHmmss)" Copy-Item $bak.FullName "$p\cordis.patch.yml"home 层(
%USERPROFILE%\.dsh\cordis.patch.yml,影响所有 profile)同样查一遍.bak-*。 -
验证配置能组合、再启动:
dsh --profile desktop --dump-default-config # 只组合 bundle,不含用户层 dsh --profile desktop --dump-config # 含 profile 与 home 用户层 dsh --profile desktop第一条能过、第二条不过 → 坏行在用户层(
profiles/desktop/cordis.patch.yml或~/.dsh/cordis.patch.yml)。两条都不过 → 坏在 bundle / 包本身。 -
如果诊断说某条 insert 行指向未安装的包(例如
name: '@laynepeng/dsh-astock'):- 要么先把包装回来:
dsh plugin --profile desktop add link:/绝对路径/to/dsh-astock; - 要么从 profile 的
cordis.patch.yml里只删掉那一行; - 不要把本仓库的
cordis.patch.yml整份贴进 profile 的cordis.patch.yml——它是 bundle patch,装了包之后 DSH 会自动应用,手贴等于重复插入。
- 要么先把包装回来:
Windows:上面所有
~/.dsh都换成%USERPROFILE%\.dsh(PowerShell 用$env:USERPROFILE\.dsh);如果设过DSH_HOME,用%DSH_HOME%。备份文件名同样是cordis.patch.yml.bak-。PowerShell 里先看一眼备份与崩溃报告:
Get-ChildItem "$env:USERPROFILE\.dsh\profiles\desktop\cordis.patch.yml.bak-*" | Sort-Object Name -Descending | Select-Object Name, Length Get-ChildItem "$env:APPDATA\DeepSeek Harness\logs\crash-*.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 3 Name, LastWriteTime桌面版的诊断报告在
~/Library/Logs/DeepSeek Harness/(Windows 在%APPDATA%\DeepSeek Harness\logs)。启动失败时先留报告,再点恢复;报告里第一处Error就是根因。
已知故障:启动报 duplicate factory registration for "dsh-astock"
0.8.2 及以前,lib/client.js 里模块 id 写成了 dsh-astock,而包名是 @laynepeng/dsh-astock。DSH 的 client-modules 用包名作模块 id:找不到就回退到单包 URL 再执行一次,第二次注册直接抛这个错,web boot 判定 @laynepeng/dsh-astock: import failed。0.8.3 已修正(id 改成 @laynepeng/dsh-astock;0.9.0 也包含该修复)。升级后如仍报错,说明宿主还在跑旧文件:删掉 node_modules/@laynepeng/dsh-astock 重装,或重启 DSH。
配置
右栏「A股 → 配置」是唯一入口:上半部分是邮件向导(四步点完就能发信),下半部分是「其他配置」六组,保存即生效。
为什么不用宿主配置页:DSH 0.2.2 的「插件 → 已安装插件 → @laynepeng/dsh-astock」对第三方 bundle 不一定渲染配置表单(很多人看到的就是「根本没有配置」)。所以插件自带这页自绘表单,45 项全在这里,不依赖宿主。
向导流程:
- 发信方式 —— Outlook / Hotmail、QQ 邮箱、163、Gmail、自定义 SMTP(分段按钮选,选完服务器、端口、TLS、认证方式全部自动定)。
- 账号 —— 认证方式二选一:OAuth2 授权(Outlook 用,「开始授权 → 浏览器输入代码 → 我已完成授权」)或授权码 / 应用专用密码(QQ / 163 / Gmail 用,不是登录密码)。
- 发件与收件 —— 发件地址、显示名、收件人(留空=发给自己)。
- 高级与测试 —— SMTP 主机 / 端口 / 隐式 TLS、客户端 ID / 租户、通知阈值、探测间隔、盘后复盘、「保存并发送测试邮件」。
向导下方是其他配置,六组默认全部展开(点标题可折叠),不用再去宿主插件页找表单:
| 分组 | 关键项 |
|---|---|
| 交易与费用 | 佣金率(万 2.5 填 0.00025)、最低佣金、印花税、过户费、每日 15:05 自动存档、回测时顺手存档 |
| 风控阈值 | 止损线、止盈线、移动止盈回撤、单票上限、加仓/减仓提示与档位 |
| 异动提醒 | 放量量比、当日跌幅阈值、当日涨幅阈值、回单校价容差 |
| 取数与缓存 | 请求速率上限、取数超时、行情缓存、K 线缓存 |
| 选股与回测 | 默认策略(趋势动量 / 均值回归 / 质量价值)、最多几只、现金使用比例、保留现金、分析只数、成交额门槛、自动附推荐率 |
| 盯盘 | 盯盘间隔(秒,下限 300) |
台账路径 / 存档路径故意不放面板:改这两项等于换一整个账户,容易把真实台账指到空库上。要换账户请走「维护 → 备份与迁移」的导入,或直接改
~/.dsh/astock-data/settings.json(权限 0600,OAuth 的 refresh_token 另存oauth.json)。宿主配置(cordis.patch.yml)仍然生效,本地设置优先级更高。
有两项改完需要额外动作:「每日 15:05 自动存档」要重启 DSH,「盯盘间隔」要重新「启动盯盘」——字段提示里也写了。
台账默认放
~/.dsh/astock-data/ledger.sqlite,存档跟着台账同目录。只有在用默认位置时,首次启动才会发现旧版数据目录~/.lite-work/astock-data并一次性搬过来(台账、存档、净值、回测、备份一起),之后不再读那个目录;你自己配了ledgerPath的话不会往里灌旧数据。0.8.2 起存档跟着台账走(之前写死在
~/.dsh/astock-data/,与文档不符)。如果你早就把台账指到别的目录,插件会把旧位置的archive.sqlite复制一份到台账目录(原文件保留),不会丢历史。