4、强化学习基础:马尔可夫决策过程(MDP)、状态、动作、奖励与策略、价值函数与贝尔曼方程
好,咱们今天来啃一块硬骨头——强化学习的数学基础。说实话,我当年刚接触这块时,也被一堆符号和公式搞得头晕。但后来在实盘交易中踩过几次坑才明白,这些理论不是用来装点门面的,而是真正能帮你赚钱的底层逻辑。
你想想看,一个交易员做决策时,是不是总在问自己:现在该不该加仓?要不要止损?下一分钟行情会怎么走?这些问题,其实都可以用强化学习的框架来建模。说白了,MDP就是给交易决策穿上数学的外衣。
核心一句话:马尔可夫决策过程是强化学习的数学骨架,它把交易问题拆解成状态、动作、奖励三个要素,然后通过策略和价值函数来求解最优交易行为。
4.1 马尔可夫决策过程(MDP)——交易世界的数学建模
先说说马尔可夫性。这个概念其实很简单:未来只取决于现在,与过去无关。我在做高频交易策略时,经常用这个假设——当前时刻的订单簿状态已经包含了所有历史信息,不需要再往前翻10笔成交记录。
一个完整的MDP由五元组定义:
(S, A, P, R, γ)
其中:
- S:状态空间,所有可能的市场状态集合
- A:动作空间,所有可执行的操作集合
- P:状态转移概率,P(s'|s,a) 表示在状态s执行动作a后,转移到s'的概率
- R:奖励函数,R(s,a,s') 表示在状态s执行动作a并转移到s'获得的即时奖励
- γ:折扣因子,0≤γ≤1,控制未来奖励的重要性
嗯,这里要注意:交易中的状态转移概率P,其实很难精确知道。我刚开始做强化学习交易时,总想把这个概率算得特别准,结果发现市场是非平稳的,历史概率根本不管用。后来我改用无模型方法,直接通过采样来学习,反而效果更好。
4.2 状态、动作与奖励——交易三要素
咱们把这三个概念映射到交易场景中,你就明白了。
状态(State)
状态就是交易员眼中的市场快照。我个人习惯把状态分为三类:
- 市场状态:当前价格、成交量、波动率、技术指标等
- 持仓状态:当前仓位、持仓成本、浮动盈亏等
- 账户状态:可用资金、风险敞口、杠杆倍数等
举个例子,一个简单的状态向量可能是:
s = [close_price, volume, rsi_14, position_size, unrealized_pnl, cash_balance]
避坑指南:我曾经把状态维度设得特别高,用了50多个特征,结果模型训练了三天都不收敛。后来才明白,状态设计要遵循"够用就好"原则,一般5-15个关键特征就足够了。
动作(Action)
动作就是交易员能做的操作。常见的有:
- 离散动作:买入、卖出、持有(最常用)
- 连续动作:买入多少手、卖出多少手(更精细但更难学)
- 混合动作:先决定方向,再决定数量
我建议初学者先从离散动作开始。为什么?因为连续动作空间太大,探索效率极低。我记得第一次用连续动作做回测,跑了100万步还没找到赚钱的策略,后来换成离散动作,10万步就出效果了。
奖励(Reward)
奖励是强化学习的"指挥棒"。设计不好,模型就会学歪。常见的奖励设计:
| 奖励类型 | 公式 | 特点 |
|---|---|---|
| 简单收益 | r = pnl | 容易理解,但忽略风险 |
| 夏普比率 | r = (pnl - rf) / σ | 考虑风险调整,更稳健 |
| 对数收益 | r = ln(1 + return) | 避免大亏,适合复利 |
| 混合奖励 | r = pnl - λ * risk | 可调节风险偏好 |
警告:千万别只用累计收益做奖励!我见过一个策略,为了追求高收益,疯狂加杠杆,最后回撤超过80%。奖励函数一定要包含风险惩罚项,否则模型会学会"赌徒式"交易。
4.3 策略——交易员的决策规则
策略π就是状态到动作的映射。用数学语言说:π(a|s) = P(A=a|S=s)。
策略分两种:
- 确定性策略:每个状态对应唯一动作。比如"当RSI低于30时买入"
- 随机性策略:每个状态对应动作的概率分布。比如"当RSI低于30时,80%概率买入,20%概率持有"
交易中我更喜欢随机性策略。为什么?因为市场有噪声,确定性策略容易过拟合。我曾经用确定性策略做回测,夏普比率高达3.0,结果实盘直接崩了——模型太"自信"了,遇到没见过的市场状态就乱来。随机性策略天然带有探索性,鲁棒性更好。
4.4 价值函数——给状态和动作打分
价值函数是强化学习的核心。它回答一个问题:当前状态(或状态-动作对)到底有多好?
状态价值函数 V(s)
表示从状态s开始,按照策略π行动,能获得的期望累计折扣奖励:
Vπ(s) = Eπ[ Σ γ^k * r_{t+k+1} | S_t = s ]
动作价值函数 Q(s,a)
表示在状态s执行动作a后,再按照策略π行动,能获得的期望累计折扣奖励:
Qπ(s,a) = Eπ[ Σ γ^k * r_{t+k+1} | S_t = s, A_t = a ]
这两个函数的关系很简单:V(s) = max_a Q(s,a)。也就是说,状态的价值等于该状态下所有动作中最好的那个Q值。
实战经验:我在做多资产组合交易时,用Q函数来评估每个资产的操作。比如当前持有BTC和ETH,Q(s, "加仓BTC") = 0.8,Q(s, "加仓ETH") = 0.6,那显然应该优先加仓BTC。这种"打分机制"比人工判断要客观得多。
4.5 贝尔曼方程——价值函数的自洽性
贝尔曼方程是强化学习的"牛顿定律"。它揭示了价值函数之间的递归关系:
V(s) = max_a [ R(s,a) + γ * Σ P(s'|s,a) * V(s') ]
翻译成人话:当前状态的价值 = 当前动作的即时奖励 + 未来状态价值的折扣和。
这个方程为什么重要?因为它给了我们一个迭代求解的方法。你想想看,如果直接计算V(s),需要知道所有未来状态的分布,这几乎不可能。但有了贝尔曼方程,我们可以从后往前推,或者用动态规划逐步逼近。
我记得第一次用贝尔曼方程做策略评估时,写了个简单的迭代程序:
# 伪代码:价值迭代
V = zeros(num_states)
while not converged:
for s in all_states:
V_new[s] = max_a [ R(s,a) + γ * Σ P(s'|s,a) * V[s'] ]
if max(|V_new - V|) < epsilon:
break
V = V_new
这个代码虽然简单,但跑起来特别慢。后来我改用Q-learning,直接从经验中学习,不需要知道P(s'|s,a),效率高了很多。
小技巧:贝尔曼方程中的折扣因子γ很关键。γ=0时,模型只看眼前利益,适合高频交易;γ=0.99时,模型考虑长远收益,适合趋势跟踪。我一般设γ=0.9,兼顾短期和长期。
4.6 本章知识体系总览
下面这张图总结了MDP的核心逻辑,我画了好几个版本才定稿,希望能帮你建立整体认知:
这张图把MDP的五个核心要素串起来了。你从状态出发,经过策略选择动作,环境反馈奖励并转移到新状态,同时价值函数和贝尔曼方程在背后支撑着整个决策优化过程。
说实话,我当年学到这里时,最大的感悟是:交易本质上就是一个MDP。每个时刻你都在观察市场状态,做出买卖决策,获得盈亏反馈,然后进入下一个时刻。强化学习只是把这个过程数学化、自动化了。
下一节我们会把这些理论落地到代码中,用Python实现一个简单的MDP交易环境。到时候你会发现,这些看似抽象的数学概念,其实离实盘交易并不远。
公众号:蓝海资料掘金营,微信deep3321