Day 20:强化学习入门与交易环境搭建

📋 目录

  1. 强化学习概述
  2. 核心概念详解(Agent, Environment, Reward)
  3. 马尔可夫决策过程(MDP)
  4. 策略与价值函数
  5. 交易环境设计
  6. 随机策略与探索

第一部分:强化学习概述

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与之交互的外部系统。

环境的两个关键函数

  1. 状态转移St+1=P(St+1∣St,At)S_{t+1} = P(S_{t+1}|S_t, A_t)St+1=P(St+1St,At)
  2. 奖励函数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+1st,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的交互流程

时刻 t+1

环境交互与反馈

时刻 t

动作 At

新状态 St+1 & 奖励 Rt

1. Agent 观察状态 St

2. Agent 根据策略选择动作 At

3. 环境执行动作,转移到 St+1

4. Agent 获得奖励 Rt

5. 重复下一轮交互...

时刻 ttt:

  1. Agent 观察状态 StS_tSt
  2. Agent 根据策略选择动作 AtA_tAt
  3. 环境执行动作,转移到 St+1S_{t+1}St+1
  4. Agent 获得奖励 RtR_tRt
  5. 重复…

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.90.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)π(as)=P(At=aSt=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π(as)=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π[GtSt=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π[GtSt=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 随机策略的作用

  1. 基准对比:评估复杂策略的效果
  2. 探索机制:在训练初期使用
  3. 环境测试:验证环境是否正确
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐