dsh-bayes-predict
Bayesian stock prediction plugin that fuses MACD, RSI, moving-average, volume and other technical signals into an up-move posterior probability with multi-horizon comparison, trend-state classification and position risk metrics for A-share and US stocks.
Install
dsh plugin --profile web add dsh-bayes-predict
Sandbox test
This plugin has not been tested yet. Submit a test →
README
dsh-bayes-predict


基于 贝叶斯定理 的 DeepSeek Harness 个股预测插件(dual-face:Host 工具 + 浏览器面板)。
⚠️ 平台依赖:本插件是 DeepSeek Harness(dsh)平台的扩展插件,依赖其宿主环境(dsh web、cordis 插件系统、window.__ModuleLoader__等)。该平台目前未随本仓库公开,单独克隆本仓库无法直接运行,代码仅供学习、参考与移植。
功能
模块 · 说明
多指标信号融合评分 · 假设 H =「未来 N 日上涨」。先验取加权历史胜率(shrunk);MACD 金叉、RSI、均线排列、布林带位置、量能、动量、近 5 日走势等信号作为证据,双向经验似然比(看多信号用 LR_bull、看空信号用 LR_bear,时间衰减加权 + 样本收缩),log-odds 更新 → 后验上涨概率(含 95% 置信区间)+ 0-100 评分与评级
卡尔曼增益融合 · 证据的收缩强度不再手调:用卡尔曼增益 K = P⁻/(P⁻+R) 融合先验与证据,观测方差由 LR 四格表经 Katz 近似给出、先验方差由先验有效样本量给出,逐股逐日自适应(等价温度 T_eff = 1/K)
卡尔曼趋势滤波 · 对数价格的局部线性趋势(LLT)状态空间滤波,提供斜率 t 值与标准化新息两个信号源(kalman_slope / kalman_innov,默认关闭,见「卡尔曼增益」章)
多窗口对比 · 同时输出 2/5/10/20 日后验对比表
趋势状态识别 · 贝叶斯 t 检验风格的三状态分类:P(上涨)=P(μ>+δ)、P(下跌)=P(μ<-δ)、P(震荡),阈值 δ = max(0.5·SE, 年化 5% 经济当量),防大样本下微小趋势误判
持仓风险估计 · EWMA 波动率(RiskMetrics λ=0.94)+ 经验分位数 VaR/CVaR 为主(正态估计对照)、历史最大回撤
信号归因 · 输出贡献绝对值 Top3 的信号;方向标签按实际贡献符号显示(名义方向经实证校准后可能与贡献相反)
策略回测 · 严格防前视的参数化回测:逐换仓日现场评分 → 门槛 + TopN 选股 → 等分资金模拟换仓;支持大盘择时、ST/价格/市值/上市天数筛选、止损与仓位/板块上限、佣金与印花税;输出策略·高分 Top / 策略·低分 Top / 池基准三条曲线
全市场选股筛选 · 与回测完全同一套条件的单日截面选股(不做换仓模拟),表格可排序、可一键加自选、点行跳转单股分析
自选股(实时口径) · 自选日锚定价 + 「自选日至今」实时涨跌幅(真实价、不复权口径,与券商 App 一致),可与选股/回测共享同一份评分缓存
拼音首字母搜索 · 代码 / 中文名 / 拼音首字母三合一模糊匹配(ZGYH → 招商银行),GB2312 码段法实现、多音字变体展开、零依赖
walk-forward 回测(模型校准) · 工具可选 backtest 参数:输出 Brier / log-loss / 方向准确率 / 可靠性表 / 分级命中率 / 自动校准温度,并与「无信息基线」「只用先验」等口径对照
安装
方式一:一键安装(推荐,需要能访问 github.com)
dsh plugin --profile web add github:pg527322814/dsh-bayes-predict
装完重启 dsh web 生效(插件层在启动时合成;client bundle 的 HMR 仅在 pnpm run dev:web 重建时可用)。
方式二:手动安装(离线,或网络访问 github.com 受限时)
1. 插件包拷贝至 %USERPROFILE%\.dsh\profiles\web\node_modules\dsh-bayes-predict
(该目录不存在时先创建;profile 的 baseUrl 锚定在 profiles\web,node 解析会向上逐级查找 node_modules)
2. %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml 追加:
- insert:
- id: bayes-predict
name: 'dsh-bayes-predict'
3. 重启 dsh web。
⚠️ 客户端契约:lib/client.js的 factory 必须导出inject数组(如exports.inject = ["slots"])。
cordis 依据模块导出的inject决定注入哪些服务;缺失时apply(ctx)里访问ctx.slots
会直接抛cannot get property "slots" without inject(package.json的dsh.client.inject
只影响 boot 清单,不替代模块导出)。
回测 / 选股缓存目录(可选但强烈建议):统一数据目录由 DSH_STOCK_CACHE_DIR 指定,未设置时默认 %USERPROFILE%\.dsh\stock-bayes\,结构为:
<cacheRoot>/
├── universe.json 多档股票池 { pools: { all, sh300, custom } } + 每只股票标签
├── data/<code>.json 每只股票K线
├── csi300.json 指数(沪深300)
├── scores/h<horizon>.json 预评分(列式紧凑存储 + 原子写)
└── watchlist.json 自选股清单(原子写)
首次使用某只/某个基准日时,缺失的行情与评分会现场拉取并计算(沪深300 量级约数秒,全市场数千只约分钟级),之后一直命中缓存;面板「🔄 刷新行情缓存」做增量刷新(只拉新 K 线去重追加)。管道中缺少 universe.json 时,股票池回退到内置沪深300 成分(lib/csi300-components.json)。
说明:本仓库只包含插件运行时。用于构建全市场 universe.json 与评分预热的同步脚本属于开发侧工具,未随包发布。
使用
对话中(重启后开新会话,让 agent 看到新工具):
分析一下 600519 用贝叶斯方法评估一下 300750 未来 5 天的上涨概率 带上历史回测看看 600519 的模型校准
可视化面板:侧边栏底部「📊 贝叶斯股票分析」快捷按钮 → 弹出居中的固定浮层,内含四个页签。
单股分析
输入代码(600519 / sh600519 / 000001 / AAPL),点「贝叶斯分析」。未发起分析时该页显示算法说明空态(模型假设、融合公式与各信号方向校准说明)。报告含:综合判断(先验 → 后验 + 95% 区间 + 评分/评级)、多窗口对比、趋势三状态、EWMA / 经验 VaR 风险、信号证据明细与归因、近 60 日走势、技术面快照。
口径透明:同时给出「证据原始 log-odds 和」与「实际作用于先验的增量」(收缩前的量不等于实得变化);当信号仅使概率移动不足 1 个百分点时,明确提示结论主要由先验主导,而非分析失效。
策略回测
可配置股票资源池、评分窗口(2/5/10/20 日)、每期持有交易日、同时持有个数、评分门槛区间、初始资金、回测区间、大盘择时规则(R1~R4)、筛选条件(排除 ST / 价格上下限 / 市值下限 / 排除次新股)、风控(个股止损 / 单只最大仓位 / 同板块最多持有数)与交易费用(佣金 + 印花税)。
- 严格防前视:每个换仓日只用当日及之前的数据估计似然比与先验
- 市值下限按"截至换仓日的历史推算市值"过滤,消除前视偏差(
historicalCap=0可退回快照市值) - 三条对照曲线:策略·高分 Top / 策略·低分 Top(反向对照)/ 池基准(当期全部合格股票等权),三者差距即可检验「评分排序是否携带信息」
- 评分缓存按「模型版本 × 模型参数指纹 × 逐股数据指纹」三维校验,参数变化时旧行全部作废、全新写入;数据追加时只补算缺失日期;跨池跨 step 的评分按 (code, date) 累积复用
- 多 horizon 预热:一次运行同时评分并缓存 2/5/10/20 日(共享指标与信号计算,约 2~2.5 倍单窗口成本),之后切换窗口零等待
选股筛选
用与回测完全相同的一套条件,但不做换仓模拟——只对基准日做一次截面评分并列表(基准日留空 = 行情最新交易日;非交易日自动回退并标记)。表头可点击排序;行首 ★/☆ 一键加入或移出自选(不影响整行跳转);点任意行跳到「单股分析」并自动分析。评分与回测共享同一份缓存文件。
自选股
核心是「自选日至今涨跌幅」,默认拉实时行情:
- 实时价 + 真实价口径(本页刻意与其余页签不同):自选价 = 自选日的不复权收盘,最新价 = 腾讯实时现价。实时接口只能拿到真实价,若把后复权锚点(茅台 ≈9200)与真实现价(≈1300)混算会得出 −84% 这类荒唐跌幅;且腾讯 hfq 日线盘中常不含当日 bar、新交易日可能跨复权基准断裂。故本页单独用真实价口径,与券商 App 显示一致
- 降级路径清晰:拿不到报价的股票仍按不复权口径但标记
live=false并显示⚠︎(tooltip 给原因);live=0可整体回退到本地缓存(后复权)收盘价,离线可用 - 锚点不漂移:加入时把「自选日 + 自选价」写进
watchlist.json,此后涨跌幅永远以它为起点;重复收藏只刷新名称,不重置锚点 - 汇总行给出平均涨跌幅、盈亏只数、
实时 N/M 只 @MM-DD HH:mm;表头筛选行支持 代码/拼音/名称 模糊搜索、自选日起止、盈亏状态、评分下限;「🔄 刷新」带force=1绕过 TTL
Host 接口
方法 · 路径 · 说明
GET · /bayes-predict/analyze?symbol=&horizon= · 单股分析报告
POST · /bayes-predict/backtest?pool=&horizon=&step=&topN=&threshold=&... · 策略回测(含低分 Top 对照与多窗口预热)
GET · /bayes-predict/screen?pool=&horizon=&date=&limit=&... · 单日截面选股
GET · /bayes-predict/watchlist?horizon=&date=&live=&force= · 自选股报告;codesOnly=1 只取代码清单(轻量)
POST · /bayes-predict/watchlist/add\ · remove\ · clear?symbol= · 自选变更,一律 POST(GET 返回 405,防止预取/缓存把 GET 当副作用请求)
GET · /bayes-predict/pools · 资源池与标签(供面板动态渲染)
POST · /bayes-predict/refresh?pool= · 增量刷新行情缓存
代码结构
lib/ ├── index.js Host 端:bayes_stock_predict 工具 + 9 条 /bayes-predict/* 路由 + markdown 报告 ├── bayes.js 贝叶斯核心:指标 / 双向信号 / 时间衰减四格表 LR / 卡尔曼增益融合(默认)/ 趋势 / EWMA-经验风险 / 多窗口 / walk-forward 回测 ├── kalman.js 卡尔曼滤波:LLT 状态空间滤波 + 卡尔曼增益证据融合 + Katz 对数方差近似 ├── backtest.js 参数化回测引擎(严格防前视)+ screenStocks() 单日截面选股(同一套条件与缓存) ├── backtest-data.js 回测数据提供层:缓存根、资源池、列式编解码、沪深300 成分、增量刷新 ├── watchlist.js 自选股:watchlist.json 持久化 + 自选日/自选价锚点 + 实时收益 + 复用 screenStocks 评分 ├── realtime.js 自选实时行情:批量报价(60 只/请求)+ 不复权日线 + liveAnchorStat …(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::2,最后更新 2026-10-20