天勤图形化调试与策略运行器:IDE 插件与本地脚本怎么统一
前言
我们组有过经典场面:同事用 VSCode 插件点「运行策略」,我这边python main.py也启动了,两边以为对方没跑,其实两个进程都在下单——模拟盘双倍成交,风控电话打来才知道。还有一次是插件读的是config/backtest.yaml,命令行读的是当前目录的./config.yaml,回测区间差了一年,开会争了半小时谁对谁错。
天勤 devtools 里有策略运行器、回测启动、VSCode 扩展等(strategyrun.rst、strategybacktest.rst、vscode.rst),工具本身没问题,问题是团队没约定「生产只认一种入口」。我现在的规矩是:生产只有python main.py --mode live;插件只给个人调试;Notebook 不许当生产入口。
下面写两条轨为什么容易分叉、怎么对齐,以及升级版本后为什么要重对一遍路径。
一、两条轨差在哪(不是「谁好用」)
| 差异点 | 插件 / 图形运行器 | 命令行python main.py |
|---|---|---|
| 工作目录 cwd | IDE 里 often 是项目根,也可能配错 | 你从哪 cd 进来就是哪 |
| 配置文件 | GUI 里点选,容易点到旧文件 | 相对路径随 cwd 变 |
| Python 解释器 | IDE 选的 venv | 服务器可能是系统 python |
| 日志目录 | 有时在临时目录 | 脚本里logs/ |
这些差异在单机回测时不明显,一上模拟/实盘,路径错就是静默错:进程在跑,用的却是另一套合约或另一段日期。
二、统一四件事(我们写在 README 里)
- 唯一入口:
main.py,参数用--mode backtest|sim|live。 - 配置:根目录
config.yaml或.env,路径用Path(__file__).parent拼,禁止裸相对路径。 - 解释器:
.venv路径写进README和 VSCode 设置模板,新人 clone 后照抄。 - 日志:绝对路径或基于项目根的
logs/,日志首行打印:mode、cwd、配置版本、合约列表。
frompathlibimportPath ROOT=Path(__file__).resolve().parent LOG_DIR=ROOT/"logs"插件里的「工作目录」请显式设成ROOT,和命令行一致。
三、升级版本后为什么要重对
天勤或插件小版本升级后,菜单路径、默认 cwd 可能变。我们发版 checklist 里有一行:用插件跑一次 sim,用命令行跑一次 sim,对比日志前两行是否一致。不一致就停,别带着「应该没事」上实盘。
四、调试技巧(实盘前)
- 插件里先跑 sim,确认成交、持仓和命令行一致,再提交 git。
- 断点调试时别在
wait_update里停太久,行情会堆;短时断点一般还行。 - 回测 / 模拟 / 实盘用 profile 切换构造,禁止手改三份代码。
五、团队规范示例
- 生产:systemd 只调
python main.py --mode live。 - CI:只跑 pytest + 静态检查,不跑插件。
- 研究:Notebook 可以玩,导出到
signals.py才算数。
总结
图形化工具省的是点鼠标,省不了环境和路径纪律。天勤插件和脚本都是在调同一套TqApi,吵架之前先看日志首行:cwd 一样吗、mode 一样吗、合约列表一样吗——十有八九在这一步就能和解。我吃过「双进程同时跑」的亏,所以会对新人啰嗦一点:你可以用插件,但生产只认main.py,这不是鄙视 GUI,是怕半夜电话。
FAQ
1)必须装插件吗?
不必,命令行足够,插件是加速器。
2)插件回测和脚本回测结果不同?
先对齐 cwd、配置、区间、合约、手续费五件事。
3)断点会卡死行情吗?
长暂停有风险,短时调试通常可接受。
4)多策略多个 launch 配置?
可以,每个策略一份,cwd 都指向各自 ROOT。
5)服务器没 GUI?
只用命令行 + 日志 + 可选 Web 监控。
风险提示
本文用于期货量化技术实践讨论,不构成投资建议。
