前言¶
在 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