第19章:量化开发环境:开发机配置、代码管理、环境隔离、依赖管理
做量化开发,说白了就是跟三样东西打交道:机器、代码、环境。这三样搞不定,策略写得再好也跑不起来。我见过太多团队,策略逻辑没问题,结果因为环境不一致,本地能跑、服务器报错,一查就是Python版本差了0.1。
今天咱们就把这套东西捋清楚。从开发机怎么配,到代码怎么管,再到环境怎么隔离、依赖怎么锁死。一套下来,你也能搭出专业级的量化开发环境。
开发机配置:别在工具上省钱
我个人习惯,开发机分两种:本地笔记本和远程服务器。本地用来写代码、做原型验证;远程服务器用来跑回测、执行策略。
本地开发机推荐配置:
| 组件 | 推荐规格 | 说明 |
|---|---|---|
| CPU | Intel i7/i9 或 M3 Pro/Max | 多核编译、回测并行 |
| 内存 | 32GB 起步,64GB 更稳 | 数据加载、回测内存占用大 |
| 硬盘 | 1TB NVMe SSD | 历史数据、日志文件很占空间 |
| 系统 | macOS 或 Ubuntu | Windows 也能用,但坑多 |
远程服务器配置:我建议用 Linux 服务器,Ubuntu 20.04 LTS 或 22.04 LTS 都行。CPU 核心数越多越好,内存至少 64GB。如果做高频交易,还要考虑低延迟网卡和内核调优。
代码管理:Git 是底线
代码管理这块,Git 是标配。但量化开发跟普通软件开发不太一样,有几个点要特别注意。
分支策略:我个人习惯用 Git Flow 的简化版:
main分支:只放稳定版本,上线用的develop分支:日常开发合并到这里feature/xxx分支:每个新策略或新功能单独开分支hotfix/xxx分支:紧急修复用
.gitignore 要配好:量化项目里有很多不该提交的文件:
# 数据文件
*.csv
*.parquet
*.h5
data/
# 配置文件(含密钥)
config.yaml
.env
*.key
# 日志
logs/
*.log
# 编译产物
__pycache__/
*.pyc
build/
dist/
# IDE 配置
.idea/
.vscode/
环境隔离:别让依赖打架
量化开发最头疼的问题之一就是环境冲突。这个库要 1.0 版本,那个库要 2.0 版本,装来装去就乱了。
我推荐的工具链:
- Python 版本管理:用
pyenv,可以同时装多个 Python 版本,随时切换 - 虚拟环境:用
venv或conda,每个项目独立环境 - 依赖锁定:用
pip freeze或poetry生成锁定文件
一个典型的环境配置流程:
# 1. 安装 pyenv
curl https://pyenv.run | bash
# 2. 安装指定 Python 版本
pyenv install 3.10.12
# 3. 创建项目目录并设置本地 Python 版本
mkdir my_quant_project
cd my_quant_project
pyenv local 3.10.12
# 4. 创建虚拟环境
python -m venv .venv
# 5. 激活环境
source .venv/bin/activate
# 6. 安装依赖
pip install -r requirements.txt
# 7. 锁定依赖版本
pip freeze > requirements.lock
依赖管理:锁死版本,避免"昨天还能跑"
依赖管理这件事,说白了就是防止"昨天还能跑,今天就不行了"的尴尬。我遇到过最离谱的一次,是某个库的小版本更新改了 API 签名,结果整个回测框架全崩了。
依赖管理的最佳实践:
- 用 requirements.txt 记录直接依赖,只写顶层库名和版本范围
- 用 requirements.lock 记录完整依赖树,所有间接依赖的版本都锁死
- 定期更新依赖,但每次更新后都要跑一遍完整测试
- 使用私有 PyPI 镜像,避免外网依赖不稳定
一个典型的 requirements.txt 示例:
numpy>=1.21, <1.25
pandas>=1.3, <2.0
scipy>=1.7
scikit-learn>=1.0
matplotlib>=3.4
ta-lib>=0.4
ccxt>=4.0
redis>=4.3
sqlalchemy>=1.4
生成锁定文件:
pip freeze > requirements.lock
pip install -r requirements.lock,确保环境完全一致。这样能提前发现依赖问题,而不是等到上线才报错。
整体架构图
下面这张图展示了量化开发环境的整体架构。从开发机到代码管理,再到环境隔离和依赖管理,每个环节环环相扣。
这张图把四个环节串起来了。从上到下,先配好机器,再用 Git 管好代码,然后用虚拟环境隔离依赖,最后用锁定文件固定版本。每一步都踩实了,你的开发环境就不会出幺蛾子。
嗯,这套配置我用了好几年,从个人项目到团队协作都验证过。刚开始可能会觉得麻烦,但养成习惯后,你会发现——环境问题再也不是你的瓶颈了。
无相订单流研究社 微信Lucian808555