dsh-etf-monitor:一个盯国家队 ETF 的 DSH 侧边栏面板

前言

做 A 股盘中监测,常见的做法是盯指数。但指数是加权结果,权重股的涨跌会盖住 ETF 自己的成交行为;「国家队 / 汇金是不是在买宽基 ETF」这件事,信息量主要在 ETF 份额本身的成交结构里:成交额有没有异常放大、是不是脉冲式护盘、有没有申购资金顶着溢价接。

下面介绍 lacrimosa-da/dsh-etf-monitor,一个 DeepSeek Harness(DSH)侧边栏面板,把上面三件事做成一屏读数,交易时段内每 60 秒重算一次。纯 Node 直取公开行情接口,零第三方依赖、不读本地文件、不需要任何 API Key。

这是什么

由 lacrimosa-da 维护的客户端插件,分类为客户端,MIT 协议,仓库里带 dsh-plugin topic,未发布 npm(收录 PR 合并后可在插件市场搜到)。核心是 lib/snapshot.js 这个纯 Node 数据层,直接取东财 push2.eastmoney.com、腾讯 qt.gtimg.cn 的公开行情,产出一个 snap 对象,前端负责渲染。

它只回答一个问题:盘中宽基 / 行业 ETF 的成交结构是否显示有主动资金在护盘。

面板与读数

左侧图标栏 sidebar.panellist 上有个图标叫「国家队ETF」(order 30,排在「灵枢/上下文」与「梦境」之间)。点开是 main 槽位的整页看板,四个区块:

  1. 四项判读 — 510300(沪深300ETF)量比推定、护盘脉冲次数、溢价率、涨跌家数
  2. 15 只 ETF 篮子 — 现价、涨跌幅、成交额、量比推定、主力净额、超额、溢价率
  3. 510300 分时结构 — 半小时一桶,成交额柱 + 价位点
  4. 市场宽度 — 主要指数 / 海外市场 / 行业与概念涨跌前列 / 全市场 ETF 主力净流入流出 TOP

四项判读怎么读

读数 定义 判断口径
量比推定 当前成交额 ÷ 按已过交易分钟线性外推的全天成交额 > 1.5× 才算真放量;< 0.7× 是缩量
护盘脉冲 单分钟成交额 ≥ 当日已过均量的 4 倍 连续出现是主动买;只出现一两次且价格被吞是试盘
溢价率 ETF 市价相对 IOPV 持续正溢价说明有申购资金在顶;负溢价说明折价没人接
超额 ETF 涨跌幅 − 跟踪指数涨跌幅 只看同一只的时间序列,不跨标的横比

README 里给了一条最有用的组合判据:成交额放大 且 溢价率转正 且 分时桶价格重心上移,三条同时成立才算真护盘;只有第一条放大,往往只是「换手不是承接」。

15 只篮子的范围

窄基覆盖 沪深300(510300 / 510330 / 159919 / 510310)、上证50(510050)、中证500(510500)、中证1000(512100 / 159845)、科创50(588000 / 588080)、创业板(159915);行业覆盖券商(512880)、半导体(512480 / 588200)、医药(512010)。篮子固定在 lib/snapshot.js 的 ETF_LIST 里,README 的 FAQ 说明可以自行加一条,但要注意异步补齐规则。

分时结构怎么用

柱高是半小时成交额,线上是期末价格,虚线是昨收。柱高逐段衰减、价格走平或下移,说明承接力递减。每 60 秒重算,不是逐笔。

安装与启用

插件市场里搜 dsh-etf-monitor(收录 PR 合并后可用)。未发布 npm,市场安装走 GitHub 源。

GitHub 源的安装方式(来自 README):调 plugin_manager → install_bundle,target 填仓库地址,按 commit 锁定。源码目录开发则用本地路径:

link:C:/path/to/plugins/dsh-etf-monitor

本地 tgz 快照:先 npm pack 出 dsh-etf-monitor-0.2.0.tgz,再把路径交给 install_bundle,升级要重装。

宿主半侧热装配,装完通常不用重启;客户端 bundle 是页面加载时取的,装完 / 升级完需要刷新一次页面。改 client.js 同样要刷新页面,改 lib/index.js / lib/snapshot.js 走宿主半侧热装配,不生效就 disable 再 enable 一次。

接口与独立使用

插件注册 /dsh-etf-monitor 前缀的四个路由:

GET /dsh-etf-monitor/api            取快照,45 秒进程内缓存
GET /dsh-etf-monitor/api?fresh=1    强制重算
GET /dsh-etf-monitor/health         引擎、版本、最近一轮耗时、最近一次失败原因
GET /dsh-etf-monitor/debug          逐接口探活(排障用)

数据层可以脱离 DSH 运行时单独引用:

import { takeSnapshot, summarize } from 'dsh-etf-monitor/snapshot'

const snap = await takeSnapshot()
console.log(summarize(snap))   // 状态=交易中 已过分钟=190 510300=4.18 (+2.2%) 成交额=113.0亿

口径局限

  1. 量比是推定值,用已过交易分钟线性外推估全天,开盘初期波动大,只看方向不看绝对值。
  2. 超额含昨日溢价残留,是代理指标,不跨标的横比。
  3. 溢价率取腾讯 IOPV 字段(qt.gtimg.cn 第 78 项);东财的 f71 是均价不是 IOPV,早期版本在这里算错过。

安全性方面,lib/index.js 只对公开行情接口发 GET,不携带个人数据,不读写本地文件,进程内 45 秒缓存避免重复打上游。

适用场景与注意

适合想在交易时段内看宽基 ETF 成交结构、判断护盘力度的开发者,也适合拿 snapshot 数据层做二次加工。兼容性要求:DSH 需支持 dsh.bundle.patch(本包同时声明 dsh.bundle 与 dsh.client),Node ≥ 18.17,平台是 web 客户端。

插件以当前 DSH 进程的权限运行,安装前应先读一遍源码、确认 MIT 许可证。行情数据有 1–3 秒延迟,面板 60 秒刷新,仅供个人盘中观测,不构成投资建议。

测试可以不开浏览器跑一遍 React 树:

node test/test_client.cjs test/fixture.json

或从正在运行的插件里取一份实时快照当 fixture:

curl -s http://127.0.0.1:<port>/dsh-etf-monitor/api -o fixture.json
node test/test_client.cjs fixture.json

小结

把「国家队是不是在买 ETF」从搜索引擎和手工看盘,变成一个 DSH 侧边栏里的自动重算面板,代价是几个口径上的局限。目录页在 https://www.skillhub.cn/plugins/lacrimosa-da/dsh-etf-monitor,源码和 README 在 https://github.com/lacrimosa-da/dsh-etf-monitor。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜