第19章:量化开发环境:开发机配置、代码管理、环境隔离、依赖管理

做量化开发,说白了就是跟三样东西打交道:机器、代码、环境。这三样搞不定,策略写得再好也跑不起来。我见过太多团队,策略逻辑没问题,结果因为环境不一致,本地能跑、服务器报错,一查就是Python版本差了0.1。

今天咱们就把这套东西捋清楚。从开发机怎么配,到代码怎么管,再到环境怎么隔离、依赖怎么锁死。一套下来,你也能搭出专业级的量化开发环境。

开发机配置:别在工具上省钱

我个人习惯,开发机分两种:本地笔记本和远程服务器。本地用来写代码、做原型验证;远程服务器用来跑回测、执行策略。

本地开发机推荐配置:

组件 推荐规格 说明
CPU Intel i7/i9 或 M3 Pro/Max 多核编译、回测并行
内存 32GB 起步,64GB 更稳 数据加载、回测内存占用大
硬盘 1TB NVMe SSD 历史数据、日志文件很占空间
系统 macOS 或 Ubuntu Windows 也能用,但坑多
我的经验:别在内存上省钱。量化回测时,DataFrame 一加载就是几个G。32G 是底线,64G 才舒服。我有个同事用16G笔记本跑回测,每次都要等半小时,后来换了64G,十分钟搞定。

远程服务器配置:我建议用 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/
注意:千万不要把 API Key、数据库密码提交到 Git 仓库。我曾经见过有人把交易所的密钥直接写在代码里,然后 push 到了 GitHub 公开仓库...后果可想而知。

环境隔离:别让依赖打架

量化开发最头疼的问题之一就是环境冲突。这个库要 1.0 版本,那个库要 2.0 版本,装来装去就乱了。

我推荐的工具链:

  • Python 版本管理:pyenv,可以同时装多个 Python 版本,随时切换
  • 虚拟环境:venvconda,每个项目独立环境
  • 依赖锁定:pip freezepoetry 生成锁定文件

一个典型的环境配置流程:

# 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 签名,结果整个回测框架全崩了。

依赖管理的最佳实践:

  1. 用 requirements.txt 记录直接依赖,只写顶层库名和版本范围
  2. 用 requirements.lock 记录完整依赖树,所有间接依赖的版本都锁死
  3. 定期更新依赖,但每次更新后都要跑一遍完整测试
  4. 使用私有 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
我的习惯:每次部署前,我都会在干净的 Docker 容器里跑一遍 pip install -r requirements.lock,确保环境完全一致。这样能提前发现依赖问题,而不是等到上线才报错。

整体架构图

下面这张图展示了量化开发环境的整体架构。从开发机到代码管理,再到环境隔离和依赖管理,每个环节环环相扣。

量化开发环境架构图 开发机配置 本地笔记本(macOS/Ubuntu) + 远程服务器(Linux) 代码管理 Git + Git Flow 分支策略 + .gitignore 配置 环境隔离 pyenv(Python版本管理) + venv/conda(虚拟环境) 依赖管理:requirements.txt + requirements.lock 从开发到部署的完整链路

这张图把四个环节串起来了。从上到下,先配好机器,再用 Git 管好代码,然后用虚拟环境隔离依赖,最后用锁定文件固定版本。每一步都踩实了,你的开发环境就不会出幺蛾子。

一句话总结:开发机是地基,代码管理是框架,环境隔离是防火墙,依赖管理是保险丝。四者缺一不可。

嗯,这套配置我用了好几年,从个人项目到团队协作都验证过。刚开始可能会觉得麻烦,但养成习惯后,你会发现——环境问题再也不是你的瓶颈了。


无相订单流研究社 微信Lucian808555