
Security News
Cloudflare Introduces a Faster TypeScript Compiler Written in Rust
Cloudflare introduces tsrs, a Rust port of TypeScript’s compiler promising faster checks and lower memory use, with the TypeScript team’s help.
dsh-bayes-predict
Advanced tools
基于 贝叶斯定理 的 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 受限时)
%USERPROFILE%\.dsh\profiles\web\node_modules\dsh-bayes-predict
(该目录不存在时先创建;profile 的 baseUrl 锚定在 profiles\web,node 解析会向上逐级查找 node_modules)%USERPROFILE%\.dsh\profiles\web\cordis.patch.yml 追加:- insert:
- id: bayes-predict
name: 'dsh-bayes-predict'
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 可退回快照市值)用与回测完全相同的一套条件,但不做换仓模拟——只对基准日做一次截面评分并列表(基准日留空 = 行情最新交易日;非交易日自动回退并标记)。表头可点击排序;行首 ★/☆ 一键加入或移出自选(不影响整行跳转);点任意行跳到「单股分析」并自动分析。评分与回测共享同一份缓存文件。
核心是**「自选日至今涨跌幅」**,默认拉实时行情:
live=false 并显示 ⚠︎(tooltip 给原因);live=0 可整体回退到本地缓存(后复权)收盘价,离线可用watchlist.json,此后涨跌幅永远以它为起点;重复收藏只刷新名称,不重置锚点实时 N/M 只 @MM-DD HH:mm;表头筛选行支持 代码/拼音/名称 模糊搜索、自选日起止、盈亏状态、评分下限;「🔄 刷新」带 force=1 绕过 TTL| 方法 | 路径 | 说明 |
|---|---|---|
| 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 只/请求)+ 不复权日线 + liveAnchorStats 纯函数 + 短 TTL 缓存
├── pinyin.js 汉字 → 拼音首字母(GB2312 码段法,零依赖)+ 多音字变体展开
├── market.js 行情获取:代码归一化、腾讯 K 线(含复权断层检测)、腾讯/新浪实时、批量报价、指数日K、TTL 缓存
├── market-prior.json 全市场横截面先验(通用 LR 表,启动时自动加载)
├── csi300-components.json 沪深300 成分快照(无 universe.json 时的回退股票池)
└── client.js 浏览器端:React 面板(侧边栏入口 → 四个页签),SVG 自绘走势图/仪表/权益曲线
test/
├── kalman.test.mjs 卡尔曼数值单测(57 项:零噪声极限、无前视不变式、增益等价 T_eff=1/K、方差单调性)
├── smoke.mjs 插件冒烟(36 项:默认路径 / 回退路径 / 回测字段 / 报告结构)
├── pinyin.test.mjs 拼音首字母与多音字变体(38 项)
├── screen.test.mjs 选股筛选(129 项:条件与排序 / limit 截断 / 非交易日回退 / 缓存复用 / codes 子集,
│ 以及与 runBacktest 同一基准日候选集逐只一致的等价性)
├── watchlist.test.mjs 自选股(78 项:归一化 / 锚点语义与停牌回退 / 重复加入不重置锚点 / 持久化往返 / 评分复用)
├── realtime.test.mjs 实时口径纯函数(36 项)
├── routes.test.mjs Host 契约(假 ctx 收集注册结果:1 个工具 + 9 条路由的命名)
├── client-render.test.mjs 客户端 bundle 渲染(138 项:迷你 React + fetch 桩,跑通四页签交互链路与拼音搜索)
├── client-fixtures.json 上面用到的真实接口响应夹具(已裁剪)
└── normalize.test.mjs 代码归一化单测
logit(H) += K · Σ strength_i·log(LR_i);收缩强度由卡尔曼增益 K 决定(默认口径),fusion: "temperature" 可回退到固定 T=3 的旧口径market-prior.json 通用 LR 表,单股 LR 与之混合(w = n/(n+80))sampleWindow 日加权胜率 shrunk 到 0.5(强度 30),horizon 默认 5 日MODEL_VERSION:模型定义(信号集合 / LR 估计 / 融合口径 / 先验参数)变更时必须递增——评分缓存据此失效重建,避免新旧模型结果混用。当前为 2把潜在 log-odds 视为待估状态:先验给出 z ~ N(logit(prior), P⁻),证据给出一次含噪观测
y = Σ strength_k·log(LR_k),观测方差 R = Σ strength_k²·Var(log LR_k)·γ。于是
K = P⁻ / (P⁻ + R) ← 卡尔曼增益
z = logit(prior) + K·y
P = (1 − K)·P⁻ ← 后验方差(置信区间由它给出,不再是启发式 nEff)
等价收缩 T_eff = 1/K = 1 + R/P⁻
Var(log LR_k) 由四格表计数经 Katz 对数风险比近似给出,并乘上 shrink / 分层先验混合的雅可比修正:样本少的信号自动获得大方差、增益自动变小,不需要为「这个信号可不可信」再手调参数γ(kalmanObsInflate,默认 2)是证据相关性/过拟合的膨胀因子:技术信号彼此相关,独立假设会低估 R、高估证据精度P⁻ 由先验有效样本量经 delta 方法给出:Var(logit(p)) ≈ 1/(n·p(1−p))P(logit 正态近似),取代了原先没有概率意义的 nEff 启发式对对数价格建局部线性趋势模型(level 随机游走 + slope 慢变,观测噪声极小),一次 O(n) 前向递推给出滤波斜率 slope/√P_ss(t 值归一化)与标准化新息 v/√S,对应信号 kalman_slope / kalman_innov。
硬约束(均写进单测):
test/kalman.test.mjs 用「续接未来 K 线不改变历史滤波状态」的不变式守住这一点signalDirectionsAt 被 LR 估计/审计/回测按每根 K 线各调一次,递推放进信号函数会退化成 O(n²)A) 卡尔曼融合 vs 手调 T=3(无前视对比,Brier 越低越好)
| 口径 | 400 只 A 股 / 2.4 年(测试集) | 52 只沪深300 / 10 年(测试集) |
|---|---|---|
| priorOnly(只用先验、忽略证据) | 0.2547 | 0.2540 |
| 卡尔曼融合 γ=2(默认) | 0.2552 | 0.2542 |
| 卡尔曼融合 γ=6 | 0.2548 | 0.2540 |
| 手调 temperature=3(旧默认) | 0.2571 | 0.2551 |
| T=1(原始证据强度) | 0.2727 | 0.2638 |
配对差异(每只股票一个观测,负值 = 卡尔曼更好):γ=2 时 −0.0020 ±0.0001(89.0% 股票改善) 与 −0.0009 ±0.0001(90.9%),两个独立样本同向且都高度显著;γ∈[2,6] 内收益已趋平。
B) 卡尔曼信号的消融(默认关闭的依据)
| 检验 | ΔBrier | 改善率 |
|---|---|---|
加 kalman_slope / kalman_innov(T=1 口径) | +0.00026 ±0.00005 | 15.4% |
先移除 trend_recent / ma_align 再加(检验"是否只是冗余") | +0.00021 ±0.00006 | 19.2% |
两者都为正 ⇒ 不是与趋势类信号冗余,而是样本外没有边际价值。其原始信息量并不弱(十年池化审计:kalman_slope 分段 spread +6.33%/+14.40%/+8.24%,t 最高 5.87),但全量审计 ≠ 样本外有效——这正是 ROC(20) / streak / beta 被移除的同一条教训。
C) 必须一起看的负面结论
在合计 34.7 万个预测点上,本模型的 Brier 始终高于 priorOnly(最好配置也只到 −0.0001)。γ 越大越好、最终收敛到 priorOnly,本质是模型在自动学会「少信证据」。因此卡尔曼增益的价值应表述为:在不引入前视的前提下,把手调的固定收缩换成自适应收缩,稳住了过度自信(相对 T=1 改善 −0.0167,相对 T=3 改善 −0.0020 / −0.0009),而不是"带来了新的预测力"。
| 参数 | 默认 | 说明 |
|---|---|---|
fusion | "kalman" | 设 "temperature" 回退旧口径(T=3) |
kalmanObsInflate | 2 | 证据方差膨胀 γ;调大 → 更保守、更贴先验(γ→∞ 即退化为 priorOnly) |
kalmanSignals | false | 是否启用 kalman_slope / kalman_innov 两个新信号 |
kalmanSlopeT / kalmanInnovZ | 1.2 / 1.5 | 两个信号的触发阈值(t 值 / 标准化新息) |
kalmanSlopeDir / kalmanInnovDir | -1 / -1 | 方向(−1 反转)。不影响结论:LR 是双向的,会自动学到反向关系 |
报告与面板中的 calibration.fusion / kalmanGain / effectiveTemperature / priorVar / obsVar / stateVar 与顶层 kalman 快照(斜率 t、标准化新息 z、年化斜率)即为上述量的诊断出口。
免费、无需 key:
us 前缀(美股);批量报价一次最多 60 只⚠️ 数据口径:评分、回测与单股分析均使用后复权(hfq)——收益序列含分红再投资,除权日无假跳空,信号干净;但价格非真实股价。自选股页是唯一例外,它用真实价(不复权)口径,理由见上文。
⚠️ 腾讯 hfq 复权断层防护:腾讯后复权的复权基准随最新交易日滚动,接口返回的最后一天可能发生"跨基准断裂"(假跳变)。
fetchKlines已内置断层检测:hfq 最后一天 |单日涨跌| > 8% 时拉不复权序列核对,判定复权断层则丢弃最后一天(宁缺毋滥);refreshCache检测到缓存末尾断层时自动全量替换修复。
零第三方依赖,Node 18+。
npm test
依次运行 9 个测试文件:kalman(57) → smoke(36) → pinyin(38) → screen(129) → watchlist(78) → realtime(36) → routes(9 条路由契约) → client-render(138,迷你 React + fetch 桩跑通四页签交互) → normalize。CI(Node 20 / 22)在每次 push 与 PR 上执行同一套测试。
cordis.patch.yml 中 bayes-predict 的 insert 行node_modules\dsh-bayes-predictdsh webMIT © pg
⚠️ 本插件输出由贝叶斯统计模型基于历史行情生成,仅供参考,不构成投资建议。
FAQs
贝叶斯个股预测插件:卡尔曼增益融合的上涨概率估计、策略回测与全市场选股、自选股实时跟踪(A 股 + 美股)
The npm package dsh-bayes-predict receives a total of 0 weekly downloads. As such, dsh-bayes-predict popularity was classified as not popular.
We found that dsh-bayes-predict demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare introduces tsrs, a Rust port of TypeScript’s compiler promising faster checks and lower memory use, with the TypeScript team’s help.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.