环境搭建:工欲善其事,必先利其器
做量化交易和强化学习,说白了就是跟数据、模型、回测打交道。环境没搭好,后面全是坑。我见过太多人花了两周调代码,最后发现是某个库版本不对——嗯,这种冤枉路我走过不少。
这一章,咱们就把地基打牢。你跟着我一步步来,半小时内搞定。
Python 版本选择
我个人习惯用 Python 3.8 或 3.9。为什么?因为 stable-baselines3 对这两个版本支持最稳。3.10 以上也能跑,但有些底层依赖可能报错。
你可以用 python --version 检查当前版本。如果版本不对,建议用 conda 创建虚拟环境:
conda create -n rl_trading python=3.9
conda activate rl_trading
虚拟环境这东西,我建议每个项目都建一个。以前我图省事,所有库装在一个环境里,结果某次升级把另一个项目的依赖搞崩了……从那以后,我再也不敢偷懒了。
安装核心库
好,环境激活后,咱们开始装库。一共五个,缺一不可。
| 库名 | 用途 | 安装命令 |
|---|---|---|
| gym | 强化学习标准环境接口 | pip install gym |
| stable-baselines3 | 强化学习算法库(PPO、DQN等) | pip install stable-baselines3 |
| pandas | 数据处理,尤其是时间序列 | pip install pandas |
| numpy | 数值计算 | pip install numpy |
| matplotlib | 画图,看回测结果 | pip install matplotlib |
你可以一次性装完:
pip install gym stable-baselines3 pandas numpy matplotlib
这里有个小坑。gym 的最新版本是 0.26+,但 stable-baselines3 对 gym 0.21 兼容最好。如果你装的是最新版,可能会遇到环境注册的问题。我建议指定版本:
pip install gym==0.21.0
--no-binary :all: 试试,或者用 pip install gym[all] 装完整版。
验证安装
库装完了,怎么知道能不能用?写个简单的测试脚本跑一下。
我每次搭完环境都会做这件事。别嫌麻烦,这一步能帮你省下后面排查问题的时间。
import gym
import stable_baselines3
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
print("gym version:", gym.__version__)
print("stable-baselines3 version:", stable_baselines3.__version__)
print("pandas version:", pd.__version__)
print("numpy version:", np.__version__)
# 创建一个简单的环境测试
env = gym.make('CartPole-v1')
obs = env.reset()
print("环境创建成功!观测空间:", env.observation_space)
print("动作空间:", env.action_space)
# 随机跑几步看看
for _ in range(10):
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
if done:
break
print("环境交互测试通过!")
env.close()
如果输出正常,没有报错,那恭喜你——环境搭好了。
ModuleNotFoundError: No module named 'gym'—— 没装成功,重新 pip installAttributeError: module 'gym' has no attribute 'make'—— 版本太新,降级到 0.21.0ImportError: cannot import name 'stable_baselines3'—— 检查拼写,注意是下划线不是横杠
知识体系一览
为了让你对整个环境搭建有个全局认识,我画了张图。你看一眼就明白各个组件的关系了。
这张图展示了从底层到应用层的完整链路。你想想看,基础层是地基,核心库是工具,算法层是引擎,应用层才是我们最终要做的回测。每一层都依赖下一层,所以环境搭建必须稳。
关于 gym 环境的一点补充
gym 是 OpenAI 开发的强化学习标准接口。它定义了一套统一的 API:reset()、step()、render()。咱们做量化交易时,需要自己写一个自定义环境,继承 gym.Env 类。
不过那是后面章节的事。现在你只需要知道,gym 提供了一个「环境」的抽象概念——它接收动作,返回观测和奖励。这个模式跟交易一模一样:你下单(动作),市场给你回报(奖励),你看到价格变化(观测)。
验证安装的进阶测试
如果你还想确认 stable-baselines3 能不能正常训练,可以跑个迷你训练:
from stable_baselines3 import PPO
import gym
env = gym.make('CartPole-v1')
model = PPO('MlpPolicy', env, verbose=0)
model.learn(total_timesteps=1000)
print("PPO 训练测试通过!")
# 测试保存和加载
model.save("test_model")
del model
model = PPO.load("test_model")
print("模型保存/加载测试通过!")
这个脚本会训练 1000 步,然后保存再加载。如果没报错,说明 stable-baselines3 安装完整,可以正常使用。
CUDA 相关的错,别慌。那是显卡驱动的问题。没有 GPU 也能跑,只是慢一点。设置 device='cpu' 即可:model = PPO('MlpPolicy', env, verbose=0, device='cpu')
好了,环境搭建就到这里。你跟着操作一遍,应该不会出大问题。如果卡住了,检查一下版本号,或者重新建个虚拟环境再来一次。我当年第一次搭环境时,光 gym 就装了五遍才成功——所以别灰心,这很正常。
环境搭好,咱们后面就能专心写策略了。