见过太多做期货量化交易的人,策略“版本”就是一堆命名混乱的文件:策略_最终版_v7.py、策略_真正最终版_20260115.py、策略_别动这个版本.py。2026年,手里的策略从螺纹钢单边扩展到跨品种套利、股指日内,代码量上去了、一起开发的人也多了,如果没有一套严谨的版本控制机制,迟早要出大事:回测结果对不上代码、参数被同事覆盖、实盘模型跟仓库里的代码根本不是同一份。这篇文章就把我把Git工作流正式引入期货量化项目之后的完整方案展开聊聊,从仓库怎么搭、分支怎么管,到每一次回测结果如何绑定到某一个commit,全程都是这一年多实测下来的做法,不是纸上谈兵。
1. 期货量化项目为什么绕不开版本控制:三个教训换来的认知
很多人觉得版本控制就是“给代码存个档”,这想法放在普通开发项目里还能凑合,放在期货量化交易里就是埋雷。期货市场天然带杠杆、带保证金、带换月规则,策略代码里一个合约代码写错、一个参数表没对齐,可能直接造成真金白银的亏损。没有版本控制,你连“当前这套代码到底是哪来的”这个问题都回答不了。
1.1 回测结果对不上代码:比亏损更可怕的事
我之前踩过最深的坑,就是半年前跑出来一组非常好的螺纹钢跨期套利参数,当时只改了代码没打Tag。等三个月后想回去复盘,打开工作区一看,代码已经被后来七八次实验改得面目全非。我对着回测报告里那个漂亮的收益曲线,死活找不到当初生成它的那份代码和参数。
那一刻我才意识到:在量化交易里,回测结果不可复现,等于这次回测不存在。你可能在10个策略里筛出1个能实盘的,但如果不能精确知道它是用哪份代码、哪组参数、哪个数据切片筛出来的,那前面的99次实验也是白做,后续想优化更是无从谈起。
1.2 参数文件与合约换月:期货特有的版本变量
期货项目和纯股票策略相比,有一个非常特殊的变量:合约本身会变。螺纹钢主力合约每隔几个月就换月,股指期货有四个合约同时在交易,不同年份、不同月份的合约代码完全不一样。很多策略的“状态”不只存在于代码逻辑里,还存在于一份合约参数表里——哪个品种用哪个月合约、展期规则是什么、保证金比例按多少算、滑点费用怎么设置。
这些参数文件如果不纳入版本管理,代码是同一个commit,但策略行为可能因为参数文件被改过而发生巨大变化。到最后你会发现,出问题的时候,连排查范围都不知道从哪里开始。
1.3 实盘漂移:你知道现在线上跑的是哪份代码吗
量化团队做到后期,最容易被忽视的就是实盘代码和回测代码的漂移。回测环境里的代码不断迭代优化,实盘环境里跑的还是两个月前部署的那个版本。没有版本控制的强制约束,很多团队是靠“记得”在维护实盘代码,这是非常危险的状态。
把Git工作流搭好之后,我们做了一次最基础的规范:线上部署必须从某个固定Tag拉代码,部署完必须记录当前commit号。这个习惯救过我一次——后来有一次实盘信号异常,我们第一件事就是对比线上commit和仓库最新commit,发现有人手动在服务器上改了参数没有同步回来。五分钟定位问题,这在以前是不可想象的效率。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 仓库初始化与分层设计:先搭好地基再谈工作流
确定要用Git管代码之后,第一步不是急着建分支,而是把仓库结构和基础设施搭好。地基打不稳,后面天天都在处理大小写文件名冲突、大文件撑爆仓库、密钥泄露这些烂事。
2.1 Git安装与全局配置:一次配好,后面省心
环境安装本身不复杂,但有几个细节很容易被忽略。
- Windows下建议去Git官网下载安装包,或者用winget安装:
winget install --id Git.Git -e --source winget,安装时勾选“Checkout as-is, commit as-is”,避免换行符自动转换带来的diff噪声。 - macOS直接用Homebrew:
brew install git。 - Linux用系统包管理器就行:
sudo apt install git。
装完之后,全局配置里有三项必须一次性配好:
bash复制git config --global user.name "your_username"
git config --global user.email "your_email@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf input
init.defaultBranch main是避免每次初始化仓库还默认建master分支,core.autocrlf input是告诉Git不要自作主张把换行符全部转成CRLF,否则在Windows和Linux之间切来切去的时候,git diff会莫名其妙多出一堆改动。
2.2 仓库目录结构:策略、数据、配置、文档四分离
量化项目的仓库结构,我推荐按职责分目录,把策略代码、配置文件、研究成果、脚本和文档彻底分开。这是我们跑了一年多的稳定结构:
text复制quant/
├── strategies/ # 策略代码
│ ├── single_leg/ # 单边趋势策略
│ ├── spread/ # 跨期套利策略
│ └── statarb/ # 统计套利策略
├── configs/ # 参数配置、合约表、风控参数
│ ├── pr
