环境搭建与项目初始化:Python虚拟环境配置、依赖管理(Poetry)、项目目录结构设计
做市库存系统,说白了就是一套帮你管着「买什么、卖多少、什么时候调」的自动化工具。但再牛的系统,也得从地基开始搭。今天我们就来聊聊这个地基——环境搭建与项目初始化。
我个人习惯,每接手一个新项目,第一件事就是搭环境。不是因为我洁癖,而是被坑怕了。有一次我在一个共享服务器上跑策略,结果因为全局 Python 包版本冲突,整个回测结果全偏了。嗯,从那以后,我再也不敢偷懒了。
1. Python 虚拟环境:为什么必须隔离?
你想想看,一个量化系统往往依赖几十个第三方库。今天装个 pandas 0.25,明天装个 numpy 1.19,后天又来个 ta-lib。如果全装到全局,不出三个月,你的 Python 环境就成了一锅粥。
虚拟环境就是给每个项目一个「独立的小房间」。你在房间里随便折腾,外面干干净净。
核心原则:每个量化项目,必须拥有独立的虚拟环境。不要共用,不要偷懒。
Python 官方自带的 venv 模块就能创建虚拟环境。但我个人更推荐用 Poetry,因为它把「环境管理」和「依赖管理」合二为一了。省事,也省心。
2. 依赖管理:为什么选 Poetry?
做市库存系统对依赖的版本要求非常严格。比如回测框架 backtrader 和实时交易接口 ccxt,它们对 pandas 的版本要求可能完全不同。如果手动管理,你会疯掉。
Poetry 的好处在于:
- 自动解析依赖冲突
- 生成
poetry.lock文件,锁定所有依赖版本 - 支持
pyproject.toml统一配置 - 内置虚拟环境管理,不用再手动
source activate
我的经验:我在搭建第一个做市系统时,用了 pip + requirements.txt。结果部署到生产环境时,发现某个依赖版本不一致,回测和实盘结果对不上。后来换成 Poetry,再也没出过这种问题。
3. 项目目录结构设计:让代码自己会说话
一个做市库存系统,通常包含数据获取、策略引擎、风控模块、订单管理、日志监控等部分。如果所有代码都堆在一个文件夹里,三个月后你自己都看不懂。
我建议采用以下目录结构:
market_making_system/
├── pyproject.toml # 项目配置与依赖
├── poetry.lock # 依赖锁定文件
├── README.md # 项目说明
├── .env # 环境变量(API密钥等)
├── .gitignore # Git忽略规则
│
├── config/ # 配置文件
│ ├── __init__.py
│ ├── settings.py # 全局参数
│ └── instruments.yaml # 交易品种配置
│
├── data/ # 数据层
│ ├── __init__.py
│ ├── fetcher.py # 数据获取
│ ├── cleaner.py # 数据清洗
│ └── storage.py # 数据存储
│
├── strategy/ # 策略层
│ ├── __init__.py
│ ├── base.py # 策略基类
│ ├── inventory.py # 库存管理策略
│ └── spread.py # 价差策略
│
├── risk/ # 风控层
│ ├── __init__.py
│ ├── limits.py # 仓位限制
│ └── checks.py # 风险检查
│
├── execution/ # 执行层
│ ├── __init__.py
│ ├── order.py # 订单管理
│ └── broker.py # 交易所接口
│
├── monitor/ # 监控层
│ ├── __init__.py
│ ├── logger.py # 日志系统
│ └── dashboard.py # 看板
│
├── tests/ # 测试
│ ├── __init__.py
│ ├── test_strategy.py
│ └── test_risk.py
│
└── scripts/ # 脚本工具
├── run_backtest.py # 回测启动
└── deploy.py # 部署脚本
避坑指南:我曾经把 API 密钥直接写在代码里,结果不小心提交到了 GitHub。虽然马上删了,但密钥已经被爬虫抓走了。所以,.env 文件一定要加进 .gitignore,而且永远不要提交。
4. 核心逻辑:一张图看懂
下面这张 SVG 图,展示了做市库存系统的核心模块与数据流向。你可以把它当作项目的「骨架」来理解。
5. 动手:从零初始化项目
好了,理论说完了,我们直接上手。假设你已经在终端里了:
# 1. 安装 Poetry(如果还没装)
curl -sSL https://install.python-poetry.org | python3 -
# 2. 创建新项目
poetry new market_making_system
cd market_making_system
# 3. 添加核心依赖
poetry add pandas numpy ccxt backtrader pyyaml python-dotenv
# 4. 添加开发依赖
poetry add --dev pytest black flake8 mypy
# 5. 激活虚拟环境
poetry shell
# 6. 验证环境
python -c "import pandas; print(pandas.__version__)"
小技巧:如果你在公司网络环境下安装慢,可以配置国内镜像源。在 pyproject.toml 里加上:
[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true
6. 配置文件:别把秘密写进代码
做市系统需要连接交易所,必然涉及 API Key 和 Secret。我见过太多人直接把密钥写在 config.py 里,然后提交到 Git。这是大忌。
正确的做法是用 .env 文件:
# .env 文件内容
EXCHANGE_API_KEY=your_api_key_here
EXCHANGE_SECRET=your_secret_here
DB_HOST=localhost
DB_PORT=5432
LOG_LEVEL=INFO
然后在代码里用 python-dotenv 加载:
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("EXCHANGE_API_KEY")
secret = os.getenv("EXCHANGE_SECRET")
我曾经犯过的错:有一次我把测试网的密钥写进了代码,想着「反正测试网没关系」。结果不小心部署到了生产环境,测试网的密钥和生产网的混用了,导致订单全部发到了测试网。嗯,那次之后我学乖了——环境变量和代码彻底分离。
7. 版本控制:Git 是你的后悔药
做市系统迭代快,改策略、调参数是家常便饭。没有版本控制,你根本不知道哪次改动导致了问题。
我建议的 .gitignore 配置:
# Python
__pycache__/
*.pyc
*.pyo
*.egg-info/
dist/
build/
# 环境
.env
.venv/
venv/
# IDE
.vscode/
.idea/
# 数据
data/raw/
data/processed/
*.csv
*.parquet
# 日志
logs/
*.log
# 密钥
*secret*
*key*
初始化 Git 仓库:
git init
git add .
git commit -m "初始化做市库存系统项目结构"
8. 小结:地基打牢,后面才稳
环境搭建这件事,看起来琐碎,但直接影响后续开发效率。我见过太多团队,项目做到一半发现依赖冲突,或者部署时发现环境不一致,最后花大量时间排查。
记住三句话:
- 虚拟环境隔离——每个项目一个独立空间
- Poetry 管理依赖——自动解析冲突,锁定版本
- 目录结构清晰——代码自己会说话
好了,环境搭好了,下一章我们开始写真正的做市逻辑。到时候你会感谢今天认真搭环境的自己。