Docker 量化回测部署的核心是确保可复现、可比对、可交接;需固化基础镜像(python:3.9-slim-bullseye)与关键依赖版本(pandas==2.0.3、numpy==1.24.4等),数据与策略分离挂载,配置外置,结果标准化输出 JSON 与 CSV。

用 Docker 做量化策略回测部署,核心不是“跑起来就行”,而是让每次回测可复现、可比对、可交接。本地能跑的策略,换台机器或换个时间点就结果不同,大概率是环境或数据没锁死——Docker 正是用来解决这个问题的。
镜像要小而专,依赖版本必须固化
别用 latest 标签拉 Python 或 pandas。回测对数值计算极其敏感,numpy 1.24 和 1.25 在某些边缘 case 下浮点行为可能微差,累积到万次交易就影响净值曲线。推荐写死基础镜像和关键包:
- 基础镜像:python:3.9-slim-bullseye(轻量、稳定、Debian 官方长期支持)
- 关键依赖:pandas==2.0.3 numpy==1.24.4 TA-Lib==0.4.28(注意 TA-Lib 需编译,Dockerfile 中用 apt 安装 build-essential + python3-dev)
- 回测框架:backtrader 或 freqtrade 直接 pip install -r requirements.txt,不走 conda(conda 环境跨平台一致性弱于 pip+wheel)
数据与策略分离,挂载方式要合理
历史行情数据体积大、更新频次低,不适合打进镜像;策略代码迭代快,但需版本控制。两者都该从容器外部注入:
- 数据目录:用 -v /path/to/data:/app/data 挂载。推荐 Parquet 格式(比 CSV 快 3–5 倍读取),按 symbol+date 分区,便于增量更新
- 策略文件:挂载单个 .py 文件或整个 strategies/ 目录,避免 rebuild 镜像。例如 -v ./my_strategy.py:/app/strategies/my_strategy.py
- 配置文件:用 --env-file .env 注入参数(如 INITIAL_CAPITAL=100000、TIMEFRAME=1d),不硬编码在策略里
回测命令封装成可复用的入口脚本
别在容器里手动敲 python backtest.py --symbol AAPL --from 2020-01-01。把常用组合写成 shell 脚本,统一入口:
- Dockerfile 中设 CMD ["./run_backtest.sh"]
- run_backtest.sh 示例:python -m backtrader.run --data /app/data/aapl.parquet --strategy /app/strategies/macd.py --cash $INITIAL_CAPITAL --fromdate $FROMDATE
- 启动时只需 docker run -it --env-file test.env quant-backtest,环境变量自动生效
结果输出标准化,方便后续分析
回测不是跑完就结束。输出必须结构化,才能批量对比、画图、进 CI 流水线:
- 强制输出 JSON 报告:--results-file /app/results/macd_aapl_2020-2023.json(含年化收益、夏普、胜率、最大回撤等字段)
- 交易明细导出 CSV:--trades-csv /app/results/trades.csv(含时间、方向、价格、数量、盈亏)
- 所有输出挂载到宿主机目录,避免容器退出后日志丢失
不复杂但容易忽略:一次回测的可信度,取决于你能否在三天后、换个人、换台服务器,输入完全相同的参数,得到完全相同的结果。Docker 不是锦上添花,而是量化工程落地的第一道防线。


















