DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

FanXingChunShui /

FanXingChunShui/dsh-stock

Verified

This plugin has no description yet.

★ 1 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@ae7d8836

股票冲浪(dsh-stock-surf)

给 DeepSeek-Harness 加一副「看盘评估」的面孔:一个 Web 面板,加上五个 Agent 工具。

侧栏与面板显示名为「股票冲浪」(英文环境 Stock Surf);npm 包名为 dsh-stock-surf, 以免改 id 导致自选股等配置丢失。

  • Web 面板:侧栏 股票冲浪 图标 → 主面板,三个 tab:
    • 个股:搜代码、读评分、看因子拆解、管自选股
    • 板块:一级行业 / 二级行业 / 概念板块排行与涨跌评估
    • 列表:A 股 / 港股 / 美股热门标的,点进去看详情,行内一键加自选
  • Agent 工具:astock_evaluate / astock_quote / astock_search / astock_sectors,在对话里直接问「帮我评估一下 600519」「看看今天的板块」。
  • 数据来源:腾讯免费公开行情接口(实时快照 + 前复权日 K),无需 API key、无需注册。
  • 评分:6 因子技术面打分,全部在本地计算。不外传任何数据,不写任何密钥。

⚠️ 免责声明:本工具是技术指标计算器 + 启发式评分器,不是投资建议,不预测涨跌。所有评分、评级与「上行倾向」都是启发式估计,非概率模型输出。数据可能延迟或缺失,技术指标可能失效,请自行独立判断并承担投资风险。

安装

# 方式一:让 Harness 自己装(推荐)
# 对 agent 说:安装 /path/to/dsh-stock-surf 这个 bundle

# 方式二:手动挂到 profile 的 cordis.patch.yml
- insert:
    - id: astock
      name: 'dsh-stock-surf'   # 或用绝对路径 file:///path/to/dsh-stock-surf/index.js
      config:
        enabled: true
        defaultDays: 320
        timeoutMs: 8000

装完刷新 Web GUI,侧栏出现 A股评估 图标。

界面

区块 内容
Tab 切换 个股 / 板块 / 列表 / 量化
指数条 上证 / 深证成指 / 创业板指,红涨绿跌
搜索框 输入 6 位代码或中文名称,下拉候选选中即评估
主结果卡 名称、代码、现价、涨跌幅、数据时间、大号总分、多空判定、一句话结论
因子拆解 趋势/动量/量能/位置/波动/风险 六条横条,含权重,点击展开中文依据
关键位 支撑位 / 压力位
风险提示 过热、超跌、连续涨跌、偏离均线等信号
自选股 增删、点击切换评估目标,行内显示涨跌幅与评分(保持简洁)
涨跌依据卡片 在个股详情页回答「为什么涨/跌」:最强项、最弱项、首要风险各一行,展开看这两个因子的完整信号
公司业务 所属行业、经营范围、公司简介(默认折叠 4 行可展开)、员工数/董事长/官网/地址。仅 A 股有数据
最新公告 最近 8 条公告标题与日期,可点击跳转东财详情页
一键分析 顶栏按钮,一次请求拿齐技术面评分 + 公司资料 + 公告,避免串行等待
K 线图 纯 SVG 蜡烛图(无图表库),含均线与成交量,hover 显示 OHLCV。支持 1天 / 7天 / 30天 / 60天 / 120天 / 250天 六档范围
一键解读 把 K 线与技术指标翻译成中文:区间表现、均线结构、RSI 区间、MACD 状态、量能变化,并单列「需要留意」的风险点
免责声明 固定原文,始终可见

面板标题与侧栏标签由 locale/{zh,en}.json 的 panel / title 控制, client.js 内置了一份同名副本用于 locale 服务不可用时降级,改名字要两处同步。

板块 tab

区块 内容
类型切换 一级行业(31)/ 二级行业(124)/ 概念板块(805)
排序 按综合评分 / 按涨跌幅
列表行 板块名、领涨股、涨跌幅、涨跌家数、评分条、主力净流入
详情 评分、多周期涨跌、资金流(当日/5日/20日)、因子拆解、风险提示
成分股 该板块的全部成分股,含现价、涨跌幅、评分,点任意一行直接跳转个股详情

板块没有历史 K 线(数据源只返回当日 1 根),因此板块评分基于截面数据(多周期涨跌、量比、换手、主力资金流、涨跌家数),不含 MA/RSI/MACD 等技术指标,也不输出支撑压力位。

列表 tab

区块 内容
市场切换 A 股 / 港股 / 美股
覆盖范围 A 股全量 5578 只(新浪接口,6 路并发约 1.6 秒,缓存 60 秒);港股 60 只;美股 32 只常用标的
搜索 按代码或名称实时过滤(如「银行」→ 38 只)
排序 涨跌幅 / 成交额 / 市值 / 代码
分页 每页 100 只,带上一页/下一页
列表行 名称、代码 · 市场 · 货币、涨跌幅、真实评分、加自选按钮(+ / ✓)
交互 点行进入个股详情并自动评估;点 + 直接加入自选

评分列是对当前页每只标的真算 6 因子得分(20 只 10 路并发约 370ms,整页约 2-3 秒,结果缓存 60 秒)。翻页回来是 4ms 命中缓存。

港股与美股在界面顶部会明确提示「数据源限制」,不会假装是全量。

量化 Tab

把插件自己的评分当作交易信号,用历史数据检验它到底准不准。

区块 内容
单股回测 选策略 + 区间,输出总收益 / 年化 / 最大回撤 / 夏普 / 胜率 / 盈亏比,配净值曲线与逐笔交易明细
选股扫描 全市场 5578 只两阶段筛选:截面粗筛 → 只对候选股做完整技术评分,按评分排序
组合回测 把自选股当等权组合回测,输出组合净值与各标的贡献

三种内置策略:

策略 规则
score-threshold(默认) 评分连续 2 日 ≥ 60 买入、连续 2 日 ≤ 40 卖出
ma-cross MA5 上穿 MA20 金叉买入、下穿死叉卖出
breakout 突破前 20 日最高价买入、跌破前 10 日最低价卖出

前复权:A 股 K 线源是不复权数据,除权日会留下假跳空。插件用新浪分红送配数据自建前复权因子,实测能把浦发银行除权日的 -4.31% 跳空修正到 0.00%。四只样本股除权日平均跳空降幅 25%~94%。

防未来函数:第 t 日的决策只使用 bars[0..t],成交按 t+1 日开盘价(A 股 T+1),并扣除手续费(万 3)与印花税(千 1)。测试用探针策略审计每一步的决策输入,而不是只看净值——后者会漏掉「固定多取一根未来数据」这类泄漏。

⚠️ 回测结果必须谨慎解读。实测在贵州茅台近 5 年数据上,score-threshold 策略收益 -26.67%,跑输同期买入持有的 -4.24%。这恰恰是量化模块的价值:它把「这个评分准不准」从无法回答变成可以用数据检验,并且可能给出「不准」这个答案。历史表现不代表未来收益。

支持的市场

市场 代码写法 示例
沪/深/北 A 股 600519、sh600519、000001、300750、430047 600519
港股 hk00700、HK:0700、700.hk(自动补前导零) hk00700
美股 usAAPL、us:aapl、aapl.us、usAAPL.OQ(自动去交易所后缀) usAAPL
港美指数 hkHSI、usDJI、usIXIC hkHSI

评分模型

综合分 0-100,六因子加权(权重和为 1,降级因子退回 50 分中性,不重新分配权重):

因子 权重 看什么
趋势 trend 0.28 MA5/10/20/60 排列、价格相对均线位置、MA20 斜率、MACD 方向
动量 momentum 0.22 RSI14、MACD 金叉死叉与柱体、多周期收益率(1/5/20/60 日)
量能 volume 0.18 当日量价配合、5 日/20 日均量比、近 10 日放量方向
位置 position 0.16 60 日/250 日区间分位、布林 %B
波动 volatility 0.10 ATR 占现价比例、布林带宽
风险 risk 0.06 连续涨跌天数、MA20 乖离、涨跌停接近度、异常量比

两个刻意的设计决定:

  1. 区分趋势市与震荡市。同一个 RSI 高值,在趋势市是「强势延续」,在震荡市是「区间超买」。引擎先判市场状态,再决定用趋势跟随还是均值回归的映射曲线;否则横盘会被系统性误判成单边。
  2. 极端加速不给满分。+2%/日 复利 260 天必然是抛物线,此时 RSI 极高、偏离 MA20 近 20%、连涨 259 天,扣风险分是真实的风险溢价。所以总分在极端区间不再单调递增——刻意保留,不为了曲线好看而削弱风险提示。

判定阈值:≥75 强烈看多 / ≥60 偏多 / ≥45 中性 / ≥30 偏空 / <30 强烈看空。

Agent 工具

工具 用途
astock_evaluate 评估一只或多只(最多 10 只),返回完整评分对象并渲染中文摘要
astock_quote 实时快照:现价、涨跌、开高低、量比、换手、PE/PB、市值、涨跌停价
astock_search 名称 → 代码解析,如「茅台」→ sh600519
astock_sectors 板块排行与评分:boardType(hy/hy2/gn)、sortBy、order、limit
astock_detail 公司业务介绍与最新公告:code、announcementLimit

配置

字段 默认 说明
enabled true 总开关(面板 + 工具)
tools true 是否注册 Agent 工具
defaultDays 320 每次评估拉取的日 K 根数,30-1200
timeoutMs 8000 单个上游请求超时
indices 上证/深成/创业板 面板顶部指数条
watchlist 3 只示例 自选股,面板内可改,写回 profile 持久化

数据源说明

按市场分工,都是公开可用的开源接口:

市场 实时快照 日 K / 分钟线
A 股 腾讯 qt.gtimg.cn(88 字段,含 PE/PB/量比/市值/涨跌停) 新浪 quotes.sina.cn(主源)→ 腾讯 web.ifzq.gtimg.cn(备用,前复权)
港股 腾讯 qt.gtimg.cn 腾讯 hkfqkline
美股 腾讯 qt.gtimg.cn 腾讯 usfqkline(前复权)→ 新浪全历史(备用)
股票列表 新浪 Market_Center —
板块 / 公司资料 / 公告 东方财富(F10 / 公告 / datacenter) —

为什么 A 股 K 线以新浪为主源

腾讯的 A 股日 K 接口会被 WAF 拦截,返回 HTTP 501 + waf.tencent.com 跳转页(实测持续多日未恢复):

curl -o /dev/null -w '%{http_code}\n' \
  'https://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param=sh600519,day,,,320,qfq'
# → 501

每次都先撞 501 再回退,等于白多一次网络往返。新浪(akshare 等开源量化库的核心源之一)稳定可用,因此改为新浪优先、腾讯兜底。

复权差异(会影响技术指标)

  • 新浪返回不复权数据:除权日附近 K 线会有跳空,MA/RSI 等指标在除权前后不连续
  • 腾讯返回前复权:技术指标更准确

取舍是「先用新浪保可用,失败时用腾讯兜底保准确」。如果你需要严格的前复权数据,可以临时把新浪源注释掉强制走腾讯(但腾讯当前被 WAF 挡住,大概率拿不到数据)。

为什么不用东方财富做行情

它的行情接口(push2*.eastmoney.com)默认解析到 IPv6 会直接 Empty reply,必须强制 IPv4 才通,且有 60-90 秒限流冷却。对面板轮询不友好。

但东财的 emweb / datacenter-web / np-anotice-stock 三个域名可用,所以公司资料、板块成分股、公告走东财。

工程约束:

  • 30 秒内存缓存,避免面板反复刷新打爆接口。
  • 指数没有买卖五档,字段数少于个股,解析按数组长度防御,缺失字段返回 null 而非 NaN。
  • 日 K 数组长度不恒为 6,除权日会多出第 7 位(分红对象),解析只取前 6 位。

目录结构

dsh-stock-surf/
├── index.js           # 插件入口:RPC 通道 + 工具注册 + 共享评估管线
├── client.js          # Web 面板(main + sidebar.panellist 两个槽位)
├── lib/
│   ├── config.js      # schemastery 配置(watchlist 为 volatile)
│   ├── quote.js       # 腾讯数据层:代码解析、快照、日K、搜索、缓存
│   ├── score.js       # 多因子评分引擎(纯函数,零 IO)
│   ├── rpc.js         # /astock RPC 端点
│   ├── tools.js       # 三个 Agent 工具
│   └── watchlist.js   # 自选股读写(经 configEditor 持久化)
├── locale/{zh,en}.json
├── tests/{quote,score}.test.mjs
├── CONTRACT.md        # 冻结的接口契约(并行开发的依据)
└── cordis.patch.yml

自测

node --test tests/          # 82 个用例,含真实联网冒烟
node --check client.js

依赖说明(重要)

插件只依赖一个运行时包:@deepseek-ai/schemastery(Cordis 的配置 schema 库,profile 里已经有)。

它必须写在 dependencies 而不是 peerDependencies:pnpm 在 nodeLinker: hoisted + autoInstallPeers: false 下不会为 peer 依赖建立可解析的链接,会导致 ERR_MODULE_NOT_FOUND。

本目录的 node_modules/@deepseek-ai/ 里是指向 profile 的符号链接,只为让本地 node --test 能跑通;正式安装时 plugin_manager install_bundle 会自己处理。

排错

面板所有请求报 HTTP 405 / transport failure / watchlistFailed

这是 RPC 通道没挂载上,不是网络或鉴权问题。判定方法:未带凭据访问通道时,已挂载返回 401,未挂载返回 404/405:

curl -o /dev/null -w '%{http_code}\n' -X POST http://127.0.0.1:<端口>/astock/indices -d '{}'

根因通常是 Host 端用了 connection.rpc.handle() 而不是 connection.register(ctx, channel, handler)——前者会抛 cannot get property "webServer" without inject,被 Loader 静默记为 entry 未激活。正确写法见 CONTRACT.md 的「Host 端注册方式」。

已知限制

  • 覆盖 A 股(沪/深/北)、港股、美股与主要指数;不含期货、期权、外汇。
  • 港股列表只有 60 只:免费源 getHKStockData 的 qbgg_hk 节点实测只返回 60 条(num 提到 1000 仍是 60),这是源上限,界面已如实标注「非全量」。
  • 美股没有免费全量列表:列表页只列 32 只常用标的,其它美股请用搜索框按代码/名称查找。
  • 港美股无涨跌停价字段,相关风险提示不适用。
  • K 线图为自绘 SVG:不依赖任何图表库(保持零运行时依赖),支持蜡烛、均线、成交量、hover 提示;暂不支持缩放、拖拽、十字光标。
  • 短周期走分钟线:1 天 = 5 分钟线(48 根)、7 天 = 30 分钟线(70 根)、30 天 = 60 分钟线(120 根)。 分钟线只有 A 股有免费源,港股美股会自动回落到日线(1 天 / 30 天分别显示 20 / 40 根日 K)。
  • 一键解读是规则化文案:由技术指标按固定规则拼接,不是 LLM 生成,也不做涨跌预测。措辞刻意避免「必涨/必跌」这类断言。
  • 公司资料(F10)只有 A 股:东财 F10 接口不覆盖港股美股,详情页会显示「暂无公司资料」。
  • 板块成分股走东财 datacenter:腾讯板块码(pt01801120)与东财板块码(896)不通用,需先按板块名反查。东财 push2* 行情域名在本机不可达,但 datacenter-web / emweb / np-anotice-stock 可用。
  • 板块评分基于截面数据,与个股评分口径不同,两者不可直接横向比较。
  • 纯技术面,不读财报、公告、资金流、龙虎榜、北向资金。
  • 实时快照在收盘后为当日收盘数据,非盘中实时。
  • 首次打开面板会并行拉取指数与自选股,弱网下首屏可能等待 1-2 秒。

路线图

  • v2:risk 权重 0.06 → 0.10(需同步 UI 与契约);用真实 A 股数据回验 marketRegime 阈值(|MA20 斜率| ≥ 0.25% / MA20-MA60 间距 ≥ 1.5%)。
  • 后续:K 线缩略图、板块热度、评分历史快照对比。
—/ 5

No ratings yet

Verified DSH bundle

Commit ae7d88367337

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout