LaynePeng/dsh-astock ↗★ 0

@laynepeng/dsh-astock

A 股助手(DSH 插件):19 个行情/选股/舆情/回测工具 + 手工交易台账 + 下单提示 + 右栏持仓·选股·维护·配置面板 + 每日自动存档与收盘净值 + 高风险邮件通知。不接任何委托通道,你在券商 App 自己下单。

Package
@laynepeng/dsh-astock
Compatibility
Unverified
Harness peer range
>=0.2.0-rc.2 || >=0.2.1-rc.2 || >=0.2.2-rc.1
Version
0.9.0
License
Apache-2.0
Last updated
Nov 9, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:LaynePeng/dsh-astock

装坏了:配置看起来被清空 / DSH 起不来

先说明责任边界:这不是插件在删你的配置。桌面版在宿主启动失败时弹出的恢复对话框里,如果你点了「停用第三方插件」,DSH 会执行 sanitizeProfile:把 profiles//cordis.patch.yml 改名成 cordis.patch.yml.bak-,写一个 [] 占位,并把 bundle 列表恢复成官方默认。原文件还在,只是名字变了。

不要因此删掉整个 ~/.dsh、profile 目录或 node_modules。按下面顺序来:

  1. 完全退出 DSH(桌面版关窗口;命令行 Ctrl+C),别让运行中的实例再写回磁盘。

  2. 在本仓库目录跑只读诊断(默认 ~/.dsh、desktop profile):

    node scripts/recover.mjs --profile desktop
    

    输出会列出 .bak-* 备份、当前 patch 的行数,以及解析不到的 bundle / insert 行(最常见的启动失败原因)。自定义过 DSH_HOME 的加 --home /你的/路径;profile 不是 desktop 的用 --profile 。

  3. 把最新一份有内容的备份放回去(脚本会先把当前文件改名成 .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-*。

  4. 验证配置能组合、再启动:

    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 / 包本身。

  5. 如果诊断说某条 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 项全在这里,不依赖宿主。

向导流程:

  1. 发信方式 —— Outlook / Hotmail、QQ 邮箱、163、Gmail、自定义 SMTP(分段按钮选,选完服务器、端口、TLS、认证方式全部自动定)。
  2. 账号 —— 认证方式二选一:OAuth2 授权(Outlook 用,「开始授权 → 浏览器输入代码 → 我已完成授权」)或授权码 / 应用专用密码(QQ / 163 / Gmail 用,不是登录密码)。
  3. 发件与收件 —— 发件地址、显示名、收件人(留空=发给自己)。
  4. 高级与测试 —— 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 复制一份到台账目录(原文件保留),不会丢历史。