环境搭建:工欲善其事,必先利其器

做量化交易和强化学习,说白了就是跟数据、模型、回测打交道。环境没搭好,后面全是坑。我见过太多人花了两周调代码,最后发现是某个库版本不对——嗯,这种冤枉路我走过不少。

这一章,咱们就把地基打牢。你跟着我一步步来,半小时内搞定。

Python 版本选择

我个人习惯用 Python 3.8 或 3.9。为什么?因为 stable-baselines3 对这两个版本支持最稳。3.10 以上也能跑,但有些底层依赖可能报错。

注意:别用 Python 2.7,它已经退休了。也别用最新的 3.12,很多强化学习库还没适配。

你可以用 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
小技巧:如果你用 M1/M2 Mac,装 gym 时可能报错。加个 --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 install
  • AttributeError: module 'gym' has no attribute 'make' —— 版本太新,降级到 0.21.0
  • ImportError: cannot import name 'stable_baselines3' —— 检查拼写,注意是下划线不是横杠

知识体系一览

为了让你对整个环境搭建有个全局认识,我画了张图。你看一眼就明白各个组件的关系了。

强化学习回溯测试环境架构 基础层:Python 3.8/3.9 + 虚拟环境 conda create -n rl_trading python=3.9 核心库层 numpy (数值计算) pandas (数据处理) matplotlib (可视化) gym (环境接口) 算法层:stable-baselines3 PPO / DQN / A2C / SAC 等算法 应用层:策略回溯测试 自定义交易环境 → 训练 → 回测 → 分析

这张图展示了从底层到应用层的完整链路。你想想看,基础层是地基,核心库是工具,算法层是引擎,应用层才是我们最终要做的回测。每一层都依赖下一层,所以环境搭建必须稳。

关于 gym 环境的一点补充

gym 是 OpenAI 开发的强化学习标准接口。它定义了一套统一的 API:reset()step()render()。咱们做量化交易时,需要自己写一个自定义环境,继承 gym.Env 类。

不过那是后面章节的事。现在你只需要知道,gym 提供了一个「环境」的抽象概念——它接收动作,返回观测和奖励。这个模式跟交易一模一样:你下单(动作),市场给你回报(奖励),你看到价格变化(观测)。

我的经验:刚开始学强化学习时,别急着写自定义环境。先用 gym 自带的 CartPole、LunarLander 这些经典环境跑通流程。等理解了状态、动作、奖励的交互逻辑,再迁移到交易场景。我当初就是太心急,一上来就写股票环境,结果 debug 到怀疑人生……

验证安装的进阶测试

如果你还想确认 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 就装了五遍才成功——所以别灰心,这很正常。

环境搭好,咱们后面就能专心写策略了。


专注资料整理