Day 20:强化学习入门与交易环境搭建
Day 20:强化学习入门与交易环境搭建
📋 目录
- 强化学习概述
- 核心概念详解(Agent, Environment, Reward)
- 马尔可夫决策过程(MDP)
- 策略与价值函数
- 交易环境设计
- 随机策略与探索
第一部分:强化学习概述
1.1 什么是强化学习?
强化学习(Reinforcement Learning, RL) 是机器学习的一个重要分支,它研究智能体(Agent) 如何通过与环境(Environment) 的交互来学习,以最大化累积奖励(Reward)。
核心思想:从试错中学习,根据反馈调整行为。
1.2 强化学习的三个主要分支
| 类型 | 特点 | 代表算法 | 适用场景 |
|---|---|---|---|
| 基于价值 | 学习状态或动作的价值 | Q-learning, DQN | 离散动作空间 |
| 基于策略 | 直接优化策略函数 | Policy Gradient, PPO | 连续动作空间 |
| Actor-Critic | 结合价值和策略 | A2C, SAC | 复杂任务 |
1.3 强化学习 vs 其他机器学习
| 对比维度 | 监督学习 | 无监督学习 | 强化学习 |
|---|---|---|---|
| 数据来源 | 标注数据集 | 无标注数据 | 交互生成 |
| 反馈形式 | 正确答案 | 无反馈 | 奖励信号 |
| 目标 | 最小化预测误差 | 发现结构 | 最大化累积奖励 |
| 决策时序 | 独立同分布 | 独立同分布 | 序列决策 |
1.4 强化学习的应用场景
| 领域 | 应用 | 特点 |
|---|---|---|
| 游戏AI | AlphaGo, Dota2 | 规则明确,可模拟 |
| 机器人控制 | 机械臂、无人机 | 连续控制 |
| 自动驾驶 | 路径规划、决策 | 安全要求高 |
| 量化交易 | 自动交易策略 | 奖励设计是关键 |
第二部分:核心概念详解
2.1 Agent(智能体)
定义:做出决策并执行动作的主体。
Agent的组成:
- 策略(Policy):决定在给定状态下采取什么动作
- 价值函数(Value Function):评估状态或动作的好坏
- 模型(Model):对环境动态的认知(可选)
2.2 Environment(环境)
定义:Agent与之交互的外部系统。
环境的两个关键函数:
- 状态转移:St+1=P(St+1∣St,At)S_{t+1} = P(S_{t+1}|S_t, A_t)St+1=P(St+1∣St,At)
- 奖励函数:Rt=R(St,At,St+1)R_t = R(S_t, A_t, S_{t+1})Rt=R(St,At,St+1)
环境类型:
| 类型 | 说明 | 示例 |
|---|---|---|
| 完全可观测 | Agent知道所有信息 | 棋盘游戏 |
| 部分可观测 | Agent只能看到部分信息 | 扑克、股票市场 |
2.3 State(状态)
定义:描述环境在某个时刻的变量。
状态设计原则:
- 马尔可夫性:当前状态应包含做出决策所需的所有历史信息
- 充分性:状态应足够区分不同情况
- 简洁性:避免维度灾难
2.4 Action(动作)
定义:Agent可以执行的操作。
动作空间类型:
| 类型 | 示例 | 特点 |
|---|---|---|
| 离散动作 | 买、卖、持有 | 简单,易于实现 |
| 连续动作 | 仓位0-100% | 更灵活,更复杂 |
2.5 Reward(奖励)
定义:衡量动作好坏的即时反馈信号。
奖励设计原则:
- 对齐目标:奖励应反映最终目标
- 及时反馈:奖励应尽快给出
- 避免奖励破解:防止Agent钻空子
交易中的奖励设计:
- 简单奖励:每步收益
- 风险调整奖励:夏普比率
- 复合奖励:收益 - 惩罚(回撤、交易成本)
# 交易奖励函数示例
def calculate_reward(return_pct, position, cost):
reward = return_pct - cost # 净收益
# 可添加风险惩罚
if position > 0.8: # 高仓位惩罚
reward -= 0.001
return reward
第三部分:马尔可夫决策过程(MDP)
3.1 MDP的定义
MDP是强化学习问题的数学框架,由五元组定义:(S,A,P,R,γ)(S, A, P, R, \gamma)(S,A,P,R,γ)
- SSS:状态空间
- AAA:动作空间
- PPP:状态转移概率 P(st+1∣st,at)P(s_{t+1}| s_t, a_t)P(st+1∣st,at)
- RRR:奖励函数 R(st,at,st+1)R(s_t, a_t, s_{t+1})R(st,at,st+1)
- γ\gammaγ:折扣因子 [0,1][0,1][0,1]
3.2 MDP的交互流程
时刻 ttt:
- Agent 观察状态 StS_tSt
- Agent 根据策略选择动作 AtA_tAt
- 环境执行动作,转移到 St+1S_{t+1}St+1
- Agent 获得奖励 RtR_tRt
- 重复…
3.3 折扣因子 γ\gammaγ 的作用
公式:Gt=Rt+γRt+1+γ2Rt+2+⋯G_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdotsGt=Rt+γRt+1+γ2Rt+2+⋯
γ\gammaγ的影响:
| γ\gammaγ 值 | 含义 | 适用场景 |
|---|---|---|
| γ=0\gamma = 0γ=0 | 只看眼前 | 短视决策 |
| γ=0.9−0.99\gamma = 0.9 - 0.99γ=0.9−0.99 | 平衡 | 大多数任务 |
| γ=1\gamma = 1γ=1 | 同等重视未来 | 有限步任务 |
第四部分:策略与价值函数
4.1 策略(Policy)
定义:状态到动作的映射。
π(a∣s)=P(At=a∣St=s)\pi(a|s) = P(A_t = a | S_t = s)π(a∣s)=P(At=a∣St=s)
策略类型:
| 类型 | 特点 | 示例 |
|---|---|---|
| 确定性策略 | 给定状态→唯一动作 | μ(s)=a\mu(s)=aμ(s)=a |
| 随机策略 | 给定状态→动作分布 | π(a∣s)=0.7,0.2,0.1\pi(a|s) = 0.7, 0.2, 0.1π(a∣s)=0.7,0.2,0.1 |
为什么需要随机策略:
- 处理不确定性
- 平衡探索与利用
- 解决多模最优问题
4.2 价值函数
状态价值函数 $ V(s)$:从状态 sss 开始,遵循策略 π\piπ 的期望累积奖励。
Vπ(s)=Eπ[Gt∣St=s] V^\pi(s) = \mathbb{E}_\pi \left[ G_t \mid S_t = s \right] Vπ(s)=Eπ[Gt∣St=s]
**动作价值函数 **$ Q(s, a) $:在状态 $ s $ 采取动作 $ a $ 后的期望累积奖励。
Qπ(s,a)=Eπ[Gt∣St=s, At=a] Q^\pi(s, a) = \mathbb{E}_\pi \left[ G_t \mid S_t = s,\ A_t = a \right] Qπ(s,a)=Eπ[Gt∣St=s, At=a]
4.3 探索 vs 利用(Exploration vs Exploitation)
权衡:
- 利用(Exploitation):选择当前认为最优的动作
- 探索(Exploration):尝试未知动作以发现更好的策略
平衡方法:
| 方法 | 原理 | 示例 |
|---|---|---|
| ϵ-greedy | 以ϵ概率随机探索 | ϵ=0.1 |
| UCB | 考虑不确定性 | 置信上界 |
| 玻尔兹曼探索 | 根据价值软性选择 | Softmax |
第五部分:交易环境设计
5.1 交易环境的核心要素
状态空间:
state = [
current_price, # 当前价格
position, # 当前持仓(0:空仓, 1:持仓)
cash, # 现金余额
technical_features # 技术指标(可选)
]
动作空间:
| 动作 | 编码 | 含义 |
|---|---|---|
| 买入 | 1 | 用全部现金买入 |
| 卖出 | 2 | 卖出全部持仓 |
| 持有 | 0 | 不操作 |
奖励函数:
Rt=portfolio_valuet−portfolio_valuet−1−transaction_costR**t=portfolio_valuet−portfolio_valuet−1−transaction_cost
5.2 Gym环境结构
Gym是OpenAI开发的强化学习环境标准库。自定义环境需实现:
class TradingEnv(gym.Env):
def __init__(self):
self.action_space = spaces.Discrete(3) # 买/卖/持有
self.observation_space = spaces.Box(...)
def reset(self):
"""重置环境,返回初始状态"""
return state
def step(self, action):
"""执行动作,返回 (next_state, reward, done, info)"""
return next_state, reward, done, info
def render(self, mode='human'):
"""可视化"""
pass
5.3 Gym Anytrading简介
Gym Anytrading是一个专门为金融交易设计的开源库。
import gym
import gym_anytrading
env = gym.make('stocks-v0', df=df, frame_bound=(5, 100), window_size=5)
特点:
- 内置股票数据加载
- 自动计算持仓收益率
- 提供可视化功能
第六部分:随机策略与实现
6.1 随机策略的定义
随机策略输出动作的概率分布,而非确定动作。
class RandomPolicy:
def __init__(self, action_space):
self.action_space = action_space
def act(self, state):
# 均匀随机选择动作
return self.action_space.sample()
6.2 随机策略的作用
- 基准对比:评估复杂策略的效果
- 探索机制:在训练初期使用
- 环境测试:验证环境是否正确
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)