1. 课程导论与金融AI概览:强化学习在量化交易中的角色、课程目标与学习路径、环境搭建
1.1 为什么是强化学习?——量化交易的新范式
大家好,欢迎来到这门课。我是你们的老朋友,一个在量化交易和AI领域摸爬滚打了七八年的工程师。
先聊个实在的。传统的量化交易,说白了就是「找规律」。你写个策略,比如均线金叉买入,死叉卖出。或者用机器学习,预测明天的涨跌。这些方法本质上是「模式识别」——从历史数据里找统计规律。
但交易这件事,它有个致命的特点:你的行为会影响市场。你买,价格就涨;你卖,价格就跌。传统模型假设市场是静态的,可现实是动态博弈。你想想看,一个预测模型,它不考虑你的操作对未来的影响,这合理吗?
强化学习不一样。它不预测价格,它学习决策序列。它知道:今天买,明天卖,这个动作序列最终能赚多少钱。它甚至能学会「假装买入」来试探市场深度——嗯,我在实盘里见过这种骚操作。
核心观点:强化学习解决的是「序列决策」问题。交易不是单次赌博,而是一连串的买卖动作。RL 天然适合这个场景。
我个人习惯把量化策略分成三代:
- 第一代:规则驱动(均线、布林带、MACD)—— 靠人脑找规律
- 第二代:监督学习(LSTM、XGBoost预测涨跌)—— 靠机器找规律
- 第三代:强化学习(DQN、PPO、SAC)—— 靠机器学「怎么交易」
你可能会问:第二代不也挺好吗?我在项目中遇到过,用LSTM预测准确率做到55%,但实盘一跑就亏钱。为什么?因为预测准不代表会交易。你预测涨,但仓位该多大?止损设在哪?这些是决策问题,不是预测问题。
1.2 课程目标:你能带走什么?
这门课不是讲理论。市面上讲DQN、PPO的书很多,但能让你从零搭出一套可回测、可实盘的交易系统的,不多。
学完这门课,我希望你能做到三件事:
- 理解RL交易的核心逻辑——状态、动作、奖励、环境,这些概念怎么映射到真实交易中
- 亲手搭建回测框架——不是用现成的库,而是自己写一个。为什么?因为现成的库(比如Backtrader)对RL支持很差,你没法把神经网络塞进去
- 跑通至少3个策略——从简单的单股交易,到多股组合,再到带风控的实盘级策略
我的建议:别急着跑代码。先理解「为什么RL适合交易」这个底层逻辑。代码可以抄,但认知框架得自己搭。
1.3 学习路径:我们怎么走?
整个课程分四个阶段,我画了张图帮你理解:
这张图我画了好几次才满意。你看,四个阶段是串行的,但每个阶段内部,我们都会反复回到「状态-动作-奖励」这个三角。这是RL交易系统的灵魂。
1.4 环境搭建:别让工具卡住你
好,理论聊完了,咱们动手。我见过太多人,课程买了,兴致勃勃打开电脑,结果装环境装了两天,心态崩了。咱们别这样。
你需要的东西其实不多:
| 工具 | 版本建议 | 用途 |
|---|---|---|
| Anaconda | 2023.09+ | Python环境管理,避免依赖冲突 |
| Python | 3.9 - 3.11 | 别用3.12,有些库还没适配 |
| PyTorch | 2.0+ | 强化学习主力框架 |
| Gymnasium | 0.29+ | RL标准环境接口 |
| Pandas / NumPy | 最新版 | 数据处理,逃不掉的 |
| Matplotlib | 3.7+ | 画图看结果 |
避坑指南:我曾经在项目里用Python 3.12,结果Stable-Baselines3死活装不上。折腾了两天,最后发现是版本不兼容。所以,听我的,用3.10,稳如老狗。
安装步骤很简单,我写了个脚本,你照着跑就行:
# 1. 创建虚拟环境(别装在base里,会乱)
conda create -n rl_trading python=3.10
# 2. 激活环境
conda activate rl_trading
# 3. 安装核心库
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install gymnasium pandas numpy matplotlib jupyter
# 4. 可选:强化学习库(我们后面会手写,但先装上方便对比)
pip install stable-baselines3
# 5. 验证安装
python -c "import torch; import gymnasium; print('All good!')"
跑完最后一行,如果看到「All good!」,恭喜你,环境搭好了。如果报错,别慌。大概率是CUDA版本问题。你可以在终端输入 nvidia-smi 看看你的显卡驱动版本,然后去PyTorch官网选对应的安装命令。
我的小技巧:装完环境后,立刻创建一个Jupyter notebook,把上面所有库都import一遍。确认没问题了,再关终端。这叫「一次验证,终身省心」。
1.5 第一个RL交易环境:Hello World
环境搭好了,咱们写个最简单的RL交易环境。别怕,就几十行代码,让你感受一下「状态-动作-奖励」是怎么映射到交易上的。
import gymnasium as gym
from gymnasium import spaces
import numpy as np
class SimpleTradingEnv(gym.Env):
"""最简单的交易环境:只有1只股票,每次只能买1股"""
def __init__(self, price_data):
super().__init__()
self.prices = price_data
self.current_step = 0
# 动作空间:0=持有,1=买入,2=卖出
self.action_space = spaces.Discrete(3)
# 状态空间:[当前价格, 持仓量, 现金]
self.observation_space = spaces.Box(
low=-np.inf, high=np.inf, shape=(3,), dtype=np.float32
)
# 初始状态
self.cash = 10000 # 初始资金
self.holdings = 0 # 持仓数量
def reset(self, seed=None):
self.current_step = 0
self.cash = 10000
self.holdings = 0
return self._get_obs(), {}
def step(self, action):
price = self.prices[self.current_step]
# 执行动作
if action == 1: # 买入
if self.cash >= price:
self.holdings += 1
self.cash -= price
elif action == 2: # 卖出
if self.holdings > 0:
self.holdings -= 1
self.cash += price
# 移动到下一步
self.current_step += 1
done = self.current_step >= len(self.prices) - 1
# 计算奖励:总资产变化
new_total = self.cash + self.holdings * price
reward = new_total - self._last_total
self._last_total = new_total
return self._get_obs(), reward, done, False, {}
def _get_obs(self):
price = self.prices[self.current_step]
return np.array([price, self.holdings, self.cash], dtype=np.float32)
你看,就这么简单。状态是「价格、持仓、现金」,动作是「买、卖、持有」,奖励是「资产变化」。这就是RL交易的核心骨架。后面所有复杂的策略,都是在这个骨架上长肉。
嗯,这里要注意:这个环境没有考虑交易成本、滑点、市场冲击。真实交易中这些因素能吃掉你一半利润。我们会在后面的章节逐步加上。
1.6 本章小结
好,第一章就到这。我们聊了:
- 为什么RL适合交易——序列决策问题
- 课程的四阶段路径——基础、回测、策略、实盘
- 环境搭建——别用Python 3.12,听我的
- 第一个RL交易环境——几十行代码,核心逻辑全在里面
最后说句掏心窝的话:做RL交易,别想着一步登天。我刚开始的时候,跑了一个月DQN,结果还不如简单的均线策略。但坚持下来,把奖励函数调好,把状态空间设计对,效果就慢慢出来了。这行没有银弹,但有方法论。
下一章,我们会深入强化学习的核心理论——马尔可夫决策过程(MDP)和贝尔曼方程。这些东西听起来吓人,但说白了就是「怎么把交易问题数学化」。我会用最直白的方式讲给你听。
公众号:蓝海资料掘金营,微信deep3321