第四节:动态规划与资产配置——策略迭代、值迭代与贝尔曼方程

动态规划,说白了就是解决「多步决策」问题的数学框架。在资产配置里,我们面对的正是这类问题:今天怎么配,明天怎么调,后天怎么应对黑天鹅?

我个人习惯把动态规划看作「上帝视角的模拟器」。它假设你已知市场所有可能的状态和转移概率,然后反向推演出最优策略。当然,真实市场哪有这么完美?但理解这个理想模型,是理解强化学习的基石。

4.1 贝尔曼方程:资产配置的「核心方程」

贝尔曼方程,是动态规划的灵魂。它长这样:

V(s) = max_a [ R(s,a) + γ * Σ P(s'|s,a) * V(s') ]

别被符号吓到。我来拆解一下:

  • V(s):在状态 s 下的「价值」。比如,当前组合的夏普比率预期。
  • R(s,a):采取动作 a 后,立即获得的回报。比如,调仓后的当日收益。
  • γ:折扣因子。你更看重眼前收益,还是长远收益?
  • P(s'|s,a):从状态 s 执行动作 a 后,转移到 s' 的概率。
  • V(s'):未来状态的价值。

嗯,这里要注意:贝尔曼方程的核心思想是「当前价值 = 立即回报 + 未来价值的折现」。我在项目中遇到过不少新手,只盯着短期收益调仓,结果长期回撤惨不忍睹。说白了,就是忽略了未来价值的折现。

核心洞察: 贝尔曼方程把「多步优化」变成了「单步递归」。你不需要一次性想清楚未来100步,只需要想清楚「这一步怎么走,能让未来更好」。

4.2 策略迭代:先定策略,再评估

策略迭代的思路很直观:先随便定一个策略,然后评估它好不好,再改进,再评估……直到收敛。

具体分两步:

  1. 策略评估:固定当前策略,计算每个状态的价值函数 V(s)。
  2. 策略改进:根据 V(s),选择每个状态下能最大化未来回报的动作,更新策略。

举个例子。假设你只有两种资产:股票和债券。初始策略是「股票60%,债券40%」。策略评估就是算这个组合在各种市场状态下的预期收益。策略改进就是看看:如果改成「股票70%,债券30%」,会不会更好?

# 伪代码:策略迭代
def policy_iteration():
    policy = initial_policy()  # 初始策略
    while not converged:
        V = policy_evaluation(policy)  # 策略评估
        policy = policy_improvement(V) # 策略改进
    return policy, V

我的经验: 策略迭代收敛快,但每次评估都要扫遍所有状态。如果状态空间很大(比如连续资产价格),计算量会爆炸。我建议先在小规模问题上用策略迭代找感觉,再切换到更高效的方法。

4.3 值迭代:直接算价值,策略自然来

值迭代的思路更直接:我不显式维护策略,而是直接迭代计算最优价值函数 V*(s)。一旦 V* 算出来了,策略也就跟着出来了——选那个能让 V* 最大的动作就行。

值迭代的更新公式:

V_{k+1}(s) = max_a [ R(s,a) + γ * Σ P(s'|s,a) * V_k(s') ]

你看,它和贝尔曼方程几乎一样。区别在于:策略迭代是「评估-改进」交替,值迭代是「直接逼近最优价值」。

我曾经在回测框架里同时实现了两种方法。结果发现:值迭代在状态离散、动作有限的情况下,代码更简洁,调试更方便。但如果你需要解释「为什么这么配」,策略迭代给出的策略更直观。

避坑指南: 值迭代需要设定收敛阈值。阈值设太大,策略粗糙;设太小,计算慢。我一般从 1e-4 开始试,根据回测结果调整。另外,折扣因子 γ 不要设得太接近1,否则收敛极慢——我曾经吃过这个亏,跑了三天没跑完。

4.4 贝尔曼方程在投资中的具体应用

理论说完了,来点实际的。贝尔曼方程怎么用在资产配置里?

假设我们把市场状态离散化:

  • 状态 s:市场情绪(牛市、熊市、震荡市)
  • 动作 a:股票仓位(0%、30%、60%、100%)
  • 回报 R:该仓位下的预期收益率
  • 转移概率 P:从当前市场状态,转移到下一个状态的概率

那么,贝尔曼方程就变成了:

V(牛市) = max_a [ R(牛市, a) + γ * (P(牛市→牛市)*V(牛市) + P(牛市→熊市)*V(熊市) + P(牛市→震荡)*V(震荡)) ]

你想想看,这个方程其实在问:在当前市场状态下,选哪个仓位,能让「今天的收益 + 未来的期望收益」最大化?

我在做CTA策略时,就用过这个框架。把趋势状态分成「上升、下降、盘整」三种,动作是「做多、做空、空仓」。虽然转移概率估计得不准,但至少提供了一个系统性的决策框架,比拍脑袋强多了。

4.5 策略迭代 vs 值迭代:怎么选?

对比维度 策略迭代 值迭代
收敛速度 快(迭代次数少) 慢(需要更多迭代)
每次迭代计算量 大(需要扫遍所有状态) 小(只更新价值函数)
适用场景 状态空间小、需要解释策略 状态空间大、追求实现简单
输出结果 显式策略 + 价值函数 最优价值函数(策略需推导)

我个人习惯:如果状态数少于1000,用策略迭代;如果状态数上万,用值迭代。当然,真实场景中还有更高级的方法(比如近似动态规划),但那是后话了。

4.6 本章知识体系图

下面这张图,概括了动态规划在资产配置中的核心逻辑:

动态规划与资产配置核心逻辑 贝尔曼方程 V(s) = max[R + γ·ΣP·V(s')] 策略迭代 策略评估 → 策略改进 收敛快,可解释性强 值迭代 直接逼近最优价值 实现简单,适合大状态 资产配置应用 状态:市场情绪 | 动作:仓位调整 | 回报:预期收益 核心:将多步优化转化为单步递归决策

这张图把本章的核心脉络串起来了。从贝尔曼方程出发,分叉出策略迭代和值迭代两条路,最终都指向资产配置的实际应用。你想想看,不管选哪条路,本质都是在回答同一个问题:在当前状态下,做什么动作,能让长期收益最大化?

总结一下: 动态规划给了我们一个理论最优解。虽然真实市场不满足它的假设(状态转移概率未知、市场非平稳),但理解这个框架,能帮你建立「长期最优」的思维方式。下次调仓时,不妨问问自己:我这个动作,是在最大化立即回报,还是考虑了未来价值的折现?


专注资料整理