3. 环境搭建与工具链:Python环境配置、依赖库安装、项目结构规划
做量化回测,说白了就是跟数据打交道。而Python,就是我们手里最顺手的工具。这一章咱们把环境搭好,后面写代码才不卡壳。
3.1 Python环境配置
我个人习惯用Anaconda来管理Python环境。为什么?因为省心。你想想看,做市商回测要装一堆科学计算库,一个个手动装容易出版本冲突。Anaconda把这些打包好了,装一个顶十个。
具体步骤:
- 去Anaconda官网下载Python 3.9+版本(我推荐3.10,稳定且兼容性好)
- 安装时记得勾选「Add Anaconda to my PATH environment variable」
- 打开终端或Anaconda Prompt,验证安装:
python --version
conda --version
看到版本号输出,说明环境就绪了。
避坑指南:我曾经在Windows上装完Anaconda后,发现命令行里python还是旧版本。原因是系统PATH里先找到了别的Python。解决办法:把Anaconda的路径移到PATH最前面。
3.2 依赖库安装
做市商回测离不开三个核心库:Pandas、NumPy、Matplotlib。它们的关系是这样的:
- NumPy:底层计算引擎,处理数组和矩阵运算
- Pandas:数据处理的瑞士军刀,专门对付时间序列
- Matplotlib:画图工具,把回测结果可视化
安装命令很简单:
conda install numpy pandas matplotlib
# 或者用pip
pip install numpy pandas matplotlib
嗯,这里要注意。我建议用conda安装,因为它会自动处理依赖关系。比如Pandas底层依赖NumPy,conda会帮你装好兼容的版本。用pip的话,有时候会遇到版本冲突,我踩过这个坑。
额外推荐安装的库:
| 库名 | 用途 | 安装命令 |
|---|---|---|
| Jupyter Notebook | 交互式开发环境 | conda install jupyter |
| Seaborn | 更美观的统计图表 | conda install seaborn |
| tqdm | 进度条显示 | conda install tqdm |
小技巧:装完库后,可以用
conda list 查看已安装的所有包。如果发现版本不对,用 conda update 包名 更新。
3.3 项目结构规划
做回测框架,最怕代码写成一锅粥。我见过不少新手,把所有代码塞进一个文件里,最后自己都找不到哪是哪。咱们从一开始就把架子搭好。
我个人习惯的项目结构是这样的:
market_maker_backtest/
├── data/ # 原始数据存放
│ ├── raw/ # 未处理的市场数据
│ └── processed/ # 清洗后的数据
├── src/ # 核心代码
│ ├── __init__.py
│ ├── data_loader.py # 数据加载模块
│ ├── strategy.py # 做市策略
│ ├── backtest.py # 回测引擎
│ └── metrics.py # 绩效评估
├── config/ # 配置文件
│ └── settings.yaml
├── results/ # 回测结果
│ ├── reports/ # 分析报告
│ └── plots/ # 图表
├── tests/ # 单元测试
│ └── test_strategy.py
├── requirements.txt # 依赖清单
└── README.md # 项目说明
为什么这么分?说白了就是「关注点分离」。数据归数据,代码归代码,结果归结果。你想想看,如果数据文件和代码混在一起,哪天要换数据源,还得翻代码改路径,多麻烦。
核心模块说明:
- data_loader.py:负责从CSV、数据库或API读取行情数据,统一格式输出
- strategy.py:定义做市策略逻辑,比如报价宽度、库存管理
- backtest.py:回测引擎核心,模拟订单簿、撮合交易
- metrics.py:计算夏普比率、最大回撤、盈亏曲线等指标
重要:每个模块只做一件事。data_loader只管读数据,别在里面写策略逻辑。这样后期调试、扩展都方便。
3.4 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作搭建环境的路线图:
3.5 验证环境是否就绪
装完别急着走。写个简单脚本验证一下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成模拟数据
dates = pd.date_range('2024-01-01', periods=100, freq='1min')
prices = np.random.randn(100).cumsum() + 100
# 创建DataFrame
df = pd.DataFrame({'time': dates, 'price': prices})
print(df.head())
# 画个简单折线图
plt.plot(df['time'], df['price'])
plt.title('Test Plot - Market Data')
plt.show()
如果能正常输出数据和图表,说明环境搭建成功了。如果报错,多半是库没装全或者版本不对。用 conda list | grep 包名 检查一下。
我的经验:第一次跑回测时,数据量一大就容易内存溢出。后来我养成习惯,先用小数据量(比如1000条)验证逻辑,没问题了再上全量数据。这个习惯帮我省了不少调试时间。
好了,环境搭好了,项目架子也支起来了。后面咱们就可以往里面填代码了。记住:好的开始是成功的一半,结构清晰比代码炫技更重要。
公众号:蓝海资料掘金营,微信deep3321