前言¶
在 DSH 里做行情分析,常见做法是:让模型直接调某个数据 API,或在对话里贴截图。前者把数据源焊死在插件里,换券商或换本地 CSV 就要改工具链;后者则让模型看不到你正在盯的实时 K 线,只能反复问「截个图」。
dsh-trading 把问题拆成三层:类型化的 ctx.marketData 接缝、确定性的指标计算、以及可交互的图表卡片与持久图列。它不 fork DSH 核心,而是以 bundle 叠在官方 web 或 headless profile 上。下面介绍它是什么、能做什么、怎么装、怎么用。
这是什么¶
dsh-trading 由 maddogfinance 维护,在 SkillHub 插件目录 归类为「联网工具」。GitHub 仓库约 17 stars,许可证 MIT。
一句话定位:面向 DeepSeek Harness(dsh)的交易研究工作台插件——数据接缝、确定性指标、交互式 K 线卡。README 标明当前为 early scaffold;dsh 本身处于开发者预览,两侧都可能出现破坏性变更。
项目刻意不设下单或执行接缝;@dsh-trading/risk-guard 在 tools/pre-execute 门拒绝执行类工具名,属于纵深防御,不能替代「无执行能力」这一结构边界。
核心功能¶
八个包、单向依赖¶
仓库拆成八个 npm 包,依赖方向固定:
@dsh-trading/market-data:定义ctx.marketData接缝,K 线/标的类型接口@dsh-trading/provider-csv:参考实现,读本地data/<symbol>/<timeframe>.csv@dsh-trading/provider-futu:可选,经本地 Futu OpenD 拉港股、美股、A 股及 24/7 加密货币(如CC.BTCUSDT)@dsh-trading/tool-market:面向模型的只读工具(list_symbols、get_ohlcv、market_snapshot、annotate_chart、render_chart)及指标库@dsh-trading/verdict:回测审计、lint_strategy_code等评估 harness;结论可为 NOT PROVEN@dsh-trading/risk-guard:独立包,拒绝执行类工具名@dsh-trading/client-chart:Web 图表卡片、持久图列、loopback 通道;宿主侧get_chart_view与每轮上下文注入@dsh-trading/client-frame:可选,chart-first 外壳布局(侧栏 | 图列 | 对话 | 详情)
bundle/trading 通过 cordis.patch.yml 默认接入六行:market-data、market-data-provider、tool-market、verdict、risk-guard、client-chart。client-frame 与 provider-futu 需自行在 profile 里启用。
模型侧工具¶
market_snapshot 一次返回多周期指标体制(RSI、慢速随机、ADX/DI、MACD、MFI、ATR、SMA/EMA、布林带等)及粗粒度状态标签。get_ohlcv 在需要结构细节时提供原始 K 线。指标按教科书定义、Wilder 平滑等处与常见平台对齐,会话日志重放可复现相同数值。
annotate_chart 在图上标注价位、区间、路径,要求 provenance,价格须在真实 K 线窗口内校验。render_chart 用于导出图像文件。
Web 图列与图表卡片¶
启用 @dsh-trading/client-frame 后,dsh web 变为图列优先:左侧持久实时图列,右侧对话。你可直接输入标的、切换周期,经 loopback 拉数,不经过模型。图列默认跟随对话中的标的;手动改标的或周期会 pin 图列,此后模型的标注以 Show 药丸提供,避免覆盖你正在看的图。get_chart_view 与每轮一行上下文把当前图列状态回传给模型,无需截图。
未装 client-frame 时,market_snapshot / get_ohlcv 结果在对话流中渲染为交互式 K 线卡:成交量、SMA20/50/200、周期标签,以及从模型读到的逐 bar 序列绘制的指标窗(非浏览器重算)。
自带数据(CSV)¶
CSV 布局如下,bar 开盘时间为 ISO-8601 UTC、升序:
data/
AAPL/
1d.csv # header: time,open,high,low,close,volume
BTC-USDT/
1h.csv
provider-csv 约百行,可复制为接 ClickHouse、券商 API 或 CCXT 的模板;上游工具不变。
安装与启用¶
环境要求:Node.js >= 20。官方 bundle 从 npm 拉取六行插件(client-frame、provider-futu 为可选):
dsh plugin --profile trading add @dsh-trading/bundle
在 profile 的 dsh.profile.bundles 中,在 @deepseek-ai/dsh-base 之后加入 @deepseek-ai/dsh-web-app 或 @deepseek-ai/dsh-headless 以选择界面。配置模型密钥(环境变量 DEEPSEEK_API_KEY,或 dsh web 的 Models 页),在含 ./data 目录下运行。
可选:启用 chart-first 外壳,在 profile patch 中禁用默认 ui-layout 并插入 frame:
- id: ui-layout
disabled: true
- insert:
- id: trading-frame
name: '@dsh-trading/client-frame'
可选:接 Futu OpenD 实时数据。在 OpenD.xml / OpenD.ini 启用 websocket 监听(与 api_port 不同端口,websocket_key_md5 对 JS 客户端必填):
websocket_port = 33333
websocket_key_md5 = <md5 of your key>
安装与 OpenD 版本线匹配的 SDK,并在 cordis.patch.yml 中改 provider 行:
npm i futu-api@10.9 # 须与本地 OpenD 版本线一致
- id: market-data-provider
name: '@dsh-trading/provider-futu'
config:
host: 127.0.0.1
port: 33333 # websocket 端口,非 api_port (11111)
symbols:
- CC.BTCUSDT
- HK.00700
- US.MU
安装 Market Analyst 预设:
DSH="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$DSH/.agent-presets" && cp -r presets/analyst "$DSH/.agent-presets/"
在会话 preset 菜单选 Market Analyst。
本地开发 checkout 时,先构建再 add 本地路径;bundle patch 引用的每个包都须与 bundle 并列链接,否则启动解析失败。详见 README「Try it with dsh」一节。
典型用法¶
在 examples 目录、且 ./data 已有 CSV 时,可用 headless 做一次趋势描述:
cd examples && dsh --profile trading "pull DEMO-EQ daily candles with sma20/sma50 and describe the trend"
随时检查合成后的 profile:
dsh --profile trading --dump-config
README 提供 90 秒与 80 秒演示视频(真实 Futu OpenD 会话的 Playwright 录制,非 mockup):
适用场景与注意¶
适合:在 DSH 里做只读行情研究、多周期体制梳理、图上标注与对话联动的开发者;需要 BYO 数据源、又不想改上游工具的人。
注意:
- 研究专用,非投资建议;无下单能力。
- 插件以当前
dsh进程权限运行;安装前请阅读源码与 MIT 许可证,自行评估数据源与网络访问。 dsh与dsh-trading均可能 breaking change;Futufutu-api版本须与 OpenD 手动对齐。- SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
若你已在用 DSH 做智能体开发,又需要可替换数据源、确定性指标与可读图的闭环,dsh-trading 提供了一条不 patch 核心的叠装路径。
- 目录页:https://www.skillhub.cn/plugins/maddogfinance/dsh-trading
- GitHub:https://github.com/maddogfinance/dsh-trading