DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-quant-cta

y

dsh-quant-cta

Manifest valid

Commodity Futures CTA Workbench: Backtesting / Paper Trading Full Pipeline Driven by TqSdk Real Market Data, Including Cost Modeling and Risk Control (DSH Plugin, No Real Orders Placed)

UI (client)hasBundlePatchMachine translated

dsh-quant-cta

商品期货 CTA 的研究 → 回测 → 模拟盘全链路工作台,以 DSH 插件形式提供工具与面板,引擎用 Python 实现,行情来自天勤 TqSdk(真实)或确定性合成数据(无凭据时兜底并显式标注)。

本程序不发任何真实委托:没有 CTP 下单路径,paper 模式只写内部账本。

它做了什么

一条完整的交易流程,每一环都在代码里,不是示意:

环节实现位置说明
行情获取python/qcta/data.py天勤主连日线(复权)/ 本地 CSV 缓存 / 确定性合成数据
合约规格python/qcta/specs.py28 个品种的乘数、跳价、保证金率、手续费
策略信号python/qcta/strategies/唐奇安突破、横截面动量
仓位换算python/qcta/sizing.pyATR 波动率预算 → 手数,按 sqrt(Σw²) 归一
撮合与账本python/qcta/account.py期货会计口径、手续费精确摊分、滑点、保证金校验
事件循环python/qcta/engine.pyt 收盘决策 → t+1 开盘成交,逐日盯市、熔断、止损
绩效归因python/qcta/metrics.pyCAGR/夏普/回撤/卡玛/PF/月度矩阵/分策略/分品种
报告输出python/qcta/report.pyMarkdown + JSON + 手写 SVG 曲线
模拟盘python/qcta/paper.py逐日推进的可断点账本 + 前瞻日志
DSH 工具lib/index.jsqcta_doctor / qcta_data / qcta_backtest / qcta_report / qcta_paper / qcta_sim
最优配比optimizer.py等权 / 波动率倒数 / ERC 风险平价 / 最小方差 / 均值方差(带 Ledoit-Wolf 收缩)
滚动模型model.py调仓日重估权重(walk-forward),状态落盘可追溯
模拟调度lib/index.jsDSH 按间隔定时推进 paper 账本,状态回流工具与面板
Web 面板panel.html/dsh-quant-cta/panel
客户端半身client/client.js在「开始」列表注册入口 + 右侧栏 tab(同源 iframe 套面板)

安装

1. 装成本地 DSH 插件

本地目录安装(已验证可用,不动 pnpm 锁文件):

# 1) 把插件目录联接进 profile 的 node_modules
powershell -NoProfile -Command "New-Item -ItemType Junction -Path '<profile>\node_modules\dsh-quant-cta' -Target '<repo>'"

# 2) 在 profile 的 cordis.patch.yml 末尾追加(config 里写本机 Python 路径)
#    - insert:
#        - id: dsh-quant-cta
#          name: dsh-quant-cta
#          config:
#            pythonPath: <repo>/.venv/Scripts/python.exe
#            engineRoot: <repo>

# 3) 重启 DSH

其中 <profile> 一般是 %USERPROFILE%\.dsh\profiles\desktop。

发布到 npm 后也可以用 dsh plugin add dsh-quant-cta(插件自带 cordis.patch.yml, 会把自己插进插件名单;本机 Python 路径仍需在 profile 的 patch 层给出)。

2. 装 Python 依赖

python -m venv .venv
.venv/Scripts/python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas tqsdk

插件按以下顺序找 Python:config.pythonPath → QCTA_PYTHON → <插件目录>/.venv → PATH 里的 python。

3. 配天勤账号(可选,但强烈建议)

推荐:在面板里填 —— 打开 /dsh-quant-cta/panel,找到「数据源账号」卡片, 填快期账号(手机号)与密码,点「保存并测试」,它会立刻真连一次天勤并回显 KQ.m@SHFE.rb 的最新价。密码只写到本机 credentials.json(已 gitignore), 页面永不回显,保存后输入框自动清空。

命令行等价物(密码走 stdin,不进 argv):

echo '{"user":"手机号","password":"密码"}' | python -m qcta auth login --stdin --verify
python -m qcta auth status     # 只看脱敏账号
python -m qcta auth logout     # 删除本机凭据

也支持环境变量 QCTA_TQ_USER / QCTA_TQ_PASS(优先级高于文件), 或直接写 credentials.json。凭据文件位置可用 QCTA_CRED_PATH 覆盖。

没有凭据时引擎仍能跑,但只用合成数据,报告顶部有醒目标注。

凭据怎么存:Windows 上用 DPAPI 加密(CryptProtectData),密文只能被 同一台机器上的同一个用户解开——文件被拷到别处也用不了。面板会显示当前是 「DPAPI 加密」还是「明文存储」;老版本写下的明文文件仍能读,重存一次即可升级。 账号会明文返回给面板用于回填输入框(仅本机回环 + 同源),密码永远不出现在任何返回值里。

用法

在对话里(最省事)

qcta_doctor                                   # 先自检
qcta_sim    action="status"                    # 模拟调度 + 最新最优配比
qcta_sim    action="advance"                   # 推进一天并重算配比
qcta_data   action="sync" live=true           # 拉真实行情
qcta_backtest pool="default" start="2019-01-01" live=true
qcta_report action="get"
qcta_paper  action="init"; qcta_paper action="step"

面板里三张图(纯 SVG 手写,无图表库):

图内容动态与约束
动态折线图权益曲线 + 回撤曲线(双图)描边动效、悬停十字线读数、极值/末值标记、期望回报路径叠加、回撤图的你的风险阈值参考线、全部/近3年/近1年 区间切换
环形饼图当前最优配比的权重分布每品种固定配色(会话内缓存 + 黄金角)、顶格品种黄边告警、环下标注上限
分时图逐日收益柱(正绿负红)+ 累计线累计线走独立右轴刻度、20 日滚动年化波动率副轴、最差单日定位,切换「逐日收益 / 权益走势」两个视图

资金与预期:面板顶部可以填「模拟投入金额 / 期望年化回报 / 风险阈值(最大可接受回撤)」, 存在本机 localStorage。它不改历史回测,只做确定性换算与告警:期望期末权益、同金额实际期末、 年化差、回撤是否越过阈值;阈值比引擎熔断线更严时会提示把 dd_halt 调下来。 长序列用 LTTB 降采样(保峰谷形状)后再画,2000 个交易日也不会糊成一团。

约束是可视化出来的,不只是文字:单品种上限画成环形图下的标注与顶格描边、板块上限画成条形图的虚线、 熔断阈值画成回撤图的红色虚线。

面板有两条入口,指向同一个页面:

  • 右侧栏「开始」列表里的「量化 CTA 工作台」(客户端插件注册的入口,点开就是 tab)
  • 图表全部可交互:滚轮缩放 · 拖拽平移 · 双击复位,悬停看当日数值 (策略腿/品种归因是累计净盈亏折线,模型明细是权重演化热力条,都不是静态表)
  • 「期望路径」是从今天起的前向投影(1/3/5 年可切,虚线=期望、阴影=±1σ), 不再从回测起点(2016 年)外推——历史图只表示回测期间发生过什么
  • 直接访问 http://127.0.0.1:58080/dsh-quant-cta/panel

面板背后的只读/管理路由(全部同源,无鉴权,只在本机回环地址上可用):

路由作用
GET /dsh-quant-cta/api/overview回测清单 + 最近一次报告 + 模拟盘状态
GET /dsh-quant-cta/api/report?run=<id>单次回测的完整 JSON
GET /dsh-quant-cta/api/credentials凭据状态(只回脱敏账号)
POST /dsh-quant-cta/api/credentials保存账号密码(并可选验证连通)
DELETE /dsh-quant-cta/api/credentials删除本机凭据
POST /dsh-quant-cta/api/credentials/test只测连通、不保存
GET /dsh-quant-cta/api/sim模拟调度状态 + 最新模型权重
POST /dsh-quant-cta/api/sim推进一次 / 启动定时 / 停止
GET /dsh-quant-cta/panel面板页面

命令行

cd python
python -m qcta doctor
python -m qcta data sync --live --pool default
python -m qcta backtest --pool default --start 2019-01-01 --json
python -m qcta backtest --pool starter --sleeves trend:0.6,xsec:0.4 --vol 0.10
python -m qcta runs
python -m qcta report --run 20260101_120000_trend06-xsec04
python -m qcta stats --run 20260101_120000_trend06-xsec04 --trials 12   # 统计体检
python -m qcta backtest --pool all --slip auto --adx 18 --start 2016-01-05   # 逐品种滑点 + 强度过滤
python -m qcta paper init --pool starter --capital 300000
python -m qcta paper step --live

回测口径(写死的,不是可选项)

  1. 信号 t 日收盘产生,t+1 日开盘成交 —— 防未来函数的核心。用当日收盘价成交会系统性高估收益。
  2. 手数按波动率预算换算,等权时按 sqrt(Σw²) 归一,使零相关近似下组合风险 ≈ 目标波动。
  3. 成本:手续费按合约规格(按额/按手取大,平今倍率),滑点默认 1 跳/笔。
  4. 保证金校验:开仓前检查可用资金,不足则按可负担手数缩减并记拒单。
  5. 风控:单品种风险上限、名义杠杆上限、组合回撤熔断、ATR 止损(默认关闭)。
  6. 期末强制平仓,保证 期末权益 − 初始资金 == Σ 交易净盈亏(有单测守着这条恒等式)。

细节见 docs/DESIGN.md。

真实数据上的结论(2021–2026,28 个品种)

28 个品种、100 万本金、目标波动 10%、逐品种滑点。 天勤主连的日线最早到 2016-01-05(28 个品种同一天),2015 及更早拿不到连续序列。

窗口配置年化波动夏普最大回撤交易成本PSR
2016→今(2653 天)40/20 基线−1.13%2.34%−0.4714.81%6602.71%6.2%
2016→今40/20 + ADX≥18−0.81%2.50%−0.3111.29%6762.72%15.5%
2021→今(1416 天)40/20 基线+0.17%2.38%0.094.81%3041.16%58.0%
2021→今40/20 + ADX≥18+0.57%2.53%0.244.35%3321.27%71.4%
合成数据(缓存建立前的基线)—+9.46%2.50%3.643.27%———

把窗口拉到 11 年,策略是亏的。 之前 2021–2026 那段"不亏"是因为窗口恰好避开了 2016–2020。 合成数据把年化高估了约 10 个百分点。

其它两轮实验的结论(详见 docs/SWEEP.md):

  • ADX 强度过滤有方向性但不显著:18 这个阈值两段都改善、回撤也降,但 22/26/30 反而更差—— 非单调说明这是噪声里的一个点(DSR 13.6%)。可以留着(降回撤、不改逻辑),别当边缘。
  • "FG/CF 流动性差"这个前提是错的:按日均成交额,两者在 28 个品种里排 19–20; 真正垫底的是 c、jm、al、j、hc、v。按 ≥130 亿剔掉这 6 个后 OOS 反而更差(−0.54%)。 别按感觉剔品种,按数据剔也不会让没有边缘的信号产生边缘。
  • 滑点已按品种重估(1 分钟线低分位振幅当价差代理,分辨率不够时 3 跳封顶), OOS 成本从 0.97% → 1.16%。

统计体检:这个结果能信吗

回测给出「年化 20%、夏普 1.5」不代表有边缘。每次回测的 report.md 末尾现在都带一节 统计体检,用数学回答四个问题:样本够不够(MinTRL)、夏普是不是噪声(PSR + 块自助区间)、 试过多少次参数(DSR 通缩夏普)、风险长什么样(VaR/CVaR/GARCH)。

上面那次真实数据回测(40/20,2021-01→2026-11,28 品种)的体检结论:

检验值(11 年窗口)判读
结论—与噪声不可区分
年化夏普−0.4795% 区间 [−1.14, +0.09],跨过 0
PSR(真实夏普>0 的概率)6.2%几乎没有
DSR(试过 12 组参数)0.1%扣掉挑选偏差后完全不显著
日收益 t 检验p = 0.13均值与 0 无显著差异(但方向是负的)
胜率后验41.3%,区间 [37.6%, 45.1%]明显低于 50%
交易笔数660样本量足够,不是「样本太小看不出来」
Hurst(收益)0.544接近随机游走

这比夏普好看得多也重要得多:它把「参数扫描挑出来的最好那个」和真实边缘分开。 数学推导与公式出处见 docs/MATH.md。

它做不到什么

  • 没有实盘下单。要接 CTP 得自己写,且先想清楚风控。
  • 拿不到真实盘中滑点。日频撮合用开盘价 ± 固定跳数,真实冲击成本只有实盘有。
  • 合约规格是近似值。手续费/保证金随交易所公告调整,下单前必须核对。
  • 合成数据不是行情。它只用来验证流程,报告里永远标注 synthetic。
  • 不构成投资建议。历史回测不代表未来收益。
  • 跨策略腿不做净额对冲:两条腿在同一个品种上方向相反时,账上会同时持有两个方向的持仓 (净敞口正确,但多付一份手续费与保证金)。这是为归因清晰做的取舍。

开发

python -m unittest discover -s python/tests -t python   # 233 个单测
node --check lib/index.js                              # 插件语法
node tools/smoke.mjs                                   # 插件冒烟(假 ctx + 真引擎)
cd python && python -m qcta backtest --pool starter --start 2021-01-01 --name ci_run
python tools/verify_invariants.py runs/ci_run          # 三条账本恒等式
python tools/check_consistency.py                      # 文档里的数字与代码对得上

许可证

MIT

Comments

Loading…

Similar plugins

dsh-astock

by LaynePeng

让 DeepSeek Harness 真的懂你的账户:盯盘、记账、算股数、查舆情、跑回测——你在券商 App 下单,插件负责把每一笔算清楚。

Tools & CapabilitiesManifest valid

★ 0

Apache-2.0

JavaScript

Nov 9, 2026

dsh plugin --profile web add @laynepeng/dsh-astock

by wly8691-jpg

Windows-native real-Office automation plugin (DSH). Contract, task-level, fault-injection and process-leak regressions covered; real-Office tests must be run on the target machine.

Tools & CapabilitiesDevelopment & InfrastructureModels & ProvidersManifest valid

★ 6

↓ 466/wk

MIT

JavaScript

Oct 25, 2026

dsh plugin --profile web add @eqman00003/dsh-office-com

by maddogfinance

Trading research workbench for DeepSeek Harness (dsh): typed market-data seam, deterministic indicators, interactive chart cards | 交易研究工作台插件:数据接缝 · 确定性指标 · 交互式K线卡

Tools & CapabilitiesManifest valid

★ 19

↓ 36/wk

MIT

TypeScript

Aug 23, 2026

dsh plugin --profile agent add dsh-trading

by ai-shushu

Per-session quota meter for DSH: real-token billing, live progress bar, budget blocking, configurable multi-model pricing. 会话额度监控:真实记账、进度条、额度拦截、价目可配。

Tools & CapabilitiesManifest valid

★ 15

JavaScript

Aug 23, 2026

dsh plugin --profile web add quota-meter-shushu

by Jockjrop

Desktop-only token statistics, provider quotas, custom quota queries, optional WorkBuddy credits and an advanced model selector.

Tools & CapabilitiesManifest valid

★ 3

↓ 999/wk

Apache-2.0

JavaScript

Oct 30, 2026

dsh plugin --profile web add @sligqoer/dsh-usage-stats

by xinmo114514

DSH(DeepSeek Harness)Web 插件:设置页 Token 消耗仪表盘 —— 指标卡、近 7 天/逐时趋势图、按模型/会话分布,数据全部来自本机会话日志,零外部请求。

Manifest valid

★ 0

Unlicense

TypeScript

Aug 15, 2026

dsh plugin --profile web add dsh-usage-dashboard