当前位置: 首页 > news >正文

天勤图形化调试与策略运行器:IDE 插件与本地脚本怎么统一

前言

我们组有过经典场面:同事用 VSCode 插件点「运行策略」,我这边python main.py也启动了,两边以为对方没跑,其实两个进程都在下单——模拟盘双倍成交,风控电话打来才知道。还有一次是插件读的是config/backtest.yaml,命令行读的是当前目录的./config.yaml,回测区间差了一年,开会争了半小时谁对谁错。

天勤 devtools 里有策略运行器、回测启动、VSCode 扩展等(strategyrun.rststrategybacktest.rstvscode.rst),工具本身没问题,问题是团队没约定「生产只认一种入口」。我现在的规矩是:生产只有python main.py --mode live;插件只给个人调试;Notebook 不许当生产入口。

下面写两条轨为什么容易分叉、怎么对齐,以及升级版本后为什么要重对一遍路径。

一、两条轨差在哪(不是「谁好用」)

差异点插件 / 图形运行器命令行python main.py
工作目录 cwdIDE 里 often 是项目根,也可能配错你从哪 cd 进来就是哪
配置文件GUI 里点选,容易点到旧文件相对路径随 cwd 变
Python 解释器IDE 选的 venv服务器可能是系统 python
日志目录有时在临时目录脚本里logs/

这些差异在单机回测时不明显,一上模拟/实盘,路径错就是静默错:进程在跑,用的却是另一套合约或另一段日期。

二、统一四件事(我们写在 README 里)

  1. 唯一入口main.py,参数用--mode backtest|sim|live
  2. 配置:根目录config.yaml.env,路径用Path(__file__).parent拼,禁止裸相对路径。
  3. 解释器.venv路径写进README和 VSCode 设置模板,新人 clone 后照抄。
  4. 日志:绝对路径或基于项目根的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 监控。

风险提示

本文用于期货量化技术实践讨论,不构成投资建议。

http://www.cnnetsun.cn/news/2521424.html

相关文章:

  • 工业通信基石Modbus协议:从串口到TCP/IP的实战解析与应用指南
  • 硬件加速的分布式复制协议性能优化实践
  • Phi-2轻量级推理范式:1.3B参数小模型的工业落地实践
  • 用PyTorch复现CycleGAN:从零开始手搓一个风格迁移模型(附完整代码与调试心得)
  • Stacking模型集成实战:Python中防泄漏的K折交叉验证实现
  • ESP32-S3玩转DHT11:手把手教你从零写驱动,避开微秒级时序的那些坑
  • 北京、香港、上海位列全球十大领先未来城市 | 美通社头条
  • 别再手动写远程搜索了!手把手教你封装一个通用的 Element Plus el-select-v2 组件
  • Steam协议逆向实战:NetHook2与SteamKit2协同分析
  • ArcGIS Pro 3.x + PyCharm 2024:最新版环境配置避坑指南与arcpy模块导入问题解决
  • 别怕数学!用Python从零实现图像傅里叶变换(附完整代码与频谱图分析)
  • 告别训练慢和显存焦虑:RTMDet实战中那些你没注意到的工程优化细节(附代码)
  • AXI总线安全访问机制与寄存器布局实践
  • C语言高级笔记
  • Keil C51递归调用警告处理与工程配置详解
  • ARM嵌入式开发中DS-5内存优化与JVM调优实战
  • 大麦网自动化抢票解决方案:告别手动抢票的低效困境
  • fuckZHS:智慧树课程自动化学习脚本深度解析与逆向工程技术实现
  • 可以快速引蜘蛛的蜘蛛池是什么?
  • Webdash API详解:如何通过RESTful接口扩展和集成外部系统
  • Zhui组件库开发指南:从环境搭建到贡献代码的完整路线图
  • Beat Saber版本管理终极解决方案:BSManager完全指南
  • 3分钟搞定系统镜像烧录!Balena Etcher:开源免费的跨平台烧录神器
  • Ventoy主题定制完全指南:让你的启动界面焕然一新!
  • Scribd电子书离线下载:构建个人数字图书馆的一站式自动化解决方案
  • “冠珠·美乐童行”公益行动走进广州市增城区高滩小学,唱响爱、筑就美
  • sdk-manager-plugin历史与演进:从诞生到废弃的完整技术演进路线图
  • 3个真实场景揭秘:res-downloader如何帮你节省90%的视频收集时间
  • 城市交通气候适应:从生物滞留池到透水铺装的工程实践
  • 3D高斯泼溅技术实现实时4D天气模拟