多期组合优化,Li-Ng 路线
均值-方差目标里的方差项让动态规划失效——Bellman 原理直接不成立。Li & Ng (2000) 的解法是换一个能分解的目标去解,再证明想要的解就在里面。推导、连续时间极限,以及为什么生产里多数人还是用短视近似。
这个模块前面每一篇都默认单期:今天定权重,持有一个周期,看到收益,再平衡。“一个周期”是一天、一个月还是一年不重要,结构一样。
但组合不是这么管的。你今天的配置决定了明天你能做什么。预期下个月就要再平衡的情况下卖 A 买 B,和打算拿五年的情况下做同一笔交易,含义完全不同。多期优化把这层依赖显式写进目标:优化的是整个期限 上的均值-方差权衡,而不只是下一期。
麻烦在于,把”多期”这三个字写进目标之后,动态规划就不成立了——不是难解,是 Bellman 原理直接失效。Li 和 Ng (2000) 那篇论文真正的贡献就在这里:他们不是把这个问题解了,而是换了一个能解的问题,再证明你想要的解就在这个新问题的解集里。这篇文章讲清楚这个替换,然后看它在连续时间下变成什么样,最后说说为什么生产里多数人仍然用短视近似。
为什么动态规划不能直接用
设投资者初始财富 、期限 期。每期 观察状态、选择权重 ,收益 实现,财富按下式演化:
约束是这条财富动态,加上可能的仓位约束(不许做空、预算约束等)。目标是终端财富的均值-方差权衡:
问题出在方差上。,而那个”期望的平方”不是任何东西的期望。动态规划要求目标能写成逐期条件期望的嵌套, 做不到——中间某期的最优续解会依赖于你在时刻 0 选定的那个无条件均值。换句话说,今天算出来的最优策略,明天站在新的信息集上重新算一遍就不再最优了。这是时间不一致,不是计算量的问题。
Li-Ng 的替换
Li 和 Ng 的做法是引入一个辅助问题:
它和原目标只差一项——展开就能看到,辅助目标等于均值-方差目标减去 。但这一项的位置变了:现在整个目标是一个关于 的函数的期望,可以按期分解,Bellman 原理恢复成立,动态规划可以照常做。
剩下的是把两个问题接回去。Li 和 Ng 证明了嵌入关系:原均值-方差问题的每一个有效解,都是这个辅助问题在某个参数取值下的解。于是你只要把辅助问题的参数扫一遍,有效前沿就在结果里;具体想要哪个点,再解一个把参数和实现的 联系起来的标量方程就能定位。这就是全部技巧——不是把难题解了,而是把它嵌进一族可解的问题里,再从解集中挑回来。后面所有推导都在辅助问题上进行。
顺手做一个归一化,让式子干净些。定义随财富成比例演化的变量 :
取 ,于是 ,是累积收益乘数。期望终端财富和它的二阶矩分别是
和
辅助目标就写成
沿收益路径是高度非线性的(它是一串随机因子的连乘),但这不要紧: 的分布只取决于权重序列 ,而目标只用到这个分布的前两阶矩。 可以直接当状态变量用。
逆向递归
定义值函数:
对应的 Bellman 方程是
终端条件 。
递归能不能算下去,取决于 会不会保持一个固定的函数形式。这里会:因为终端条件是二次的、财富演化对 是线性的,二次形式在递归中封闭,
其中系数 只依赖 ,与 无关。把它代回 Bellman 方程、按 的幂次匹配系数,就得到一组关于 的逆向递归,起点由终端条件给出:
每个逆向步骤做两件事:用当期的条件均值 和协方差 解一个单期 MVO,拿到最优权重 ;再用它把系数更新到 。在这个二次值函数下,最优权重的形式是
其中 ,所以前面的标量为正。注意状态 只以 的标量形式出现在括号外面——括号里那个向量完全不依赖当前财富。这是二次值函数带来的最大便利:每个逆向步骤归结为一个向量方程,而不是在整个状态空间上搜索。系数更新的完整闭式表达在 Li 和 Ng 的原文里,实现时对着抄比自己重推快。
最优策略长什么样
把上面的结构写得再直白一点:
就是熟悉的单期 MVO 方向,前面的标量随时间变化,而”期际项”是多期问题独有的那部分——它捕捉对未来期的对冲需求。它非零的原因很朴素:今天投出去的这笔钱改变了明天的机会集,而值函数看得见这件事。 时期际项消失,整个式子退回标准 MVO; 越大它越重要。
那个因子还有一层直观解释,值得单独说。财富涨上去之后,同一个括号里的向量除以更大的 ,风险仓位反而缩小。多期均值-方差的行为因此更像”盯着一个终点在走”而不是”按比例配置”:离目标还远就多冒险,接近目标就收手。这跟固定比例的单期 MVO 是两种完全不同的动物,也是后面连续时间解会再次出现的模式。
状态变量与维度灾难
Li-Ng 的基本形式里唯一的状态是财富。实践中状态通常更多:当前财富 、当前持仓(决定了交易成本从哪儿算起)、时变的预期收益 、时变的协方差 。每加一个状态变量,动态规划就多一维;值函数在财富方向上还是二次的,在其他状态方向上未必。Björk、Murgoci 和 Zhou 等人的扩展处理了多因子模型、状态依赖的风险厌恶和约束。
一旦状态表示定下来,多期问题就是一个标准的马尔可夫决策过程,按部就班地解:把连续状态空间离散化,从 逆向到 逐层算值函数,对每个状态和时间提取最优策略 ,运行时观察状态、查表、执行。离散状态下这个递归是精确的;连续状态下值函数得近似——多项式基、神经网络或者核方法。
维度灾难在这里是硬墙。超过三四个连续状态变量,没有强结构的话动态规划就不可行了。绕开的办法有三条:假设值函数属于某个参数族(二次、多项式)然后估参数;仿真大量路径、用回归估值函数;或者干脆当成 MDP 用强化学习学策略。后两条在高维问题上扩展性更好,代价是要喂更多数据。对典型的组合优化问题——状态少、期限中等——直接做动态规划仍然是可行的;高频或者超长期限才需要往仿真那边走。
连续时间极限
再平衡频率趋于无穷时,离散时间的 Li-Ng 问题收敛到一个连续时间随机控制问题。目标还是终端财富的均值-方差:
同样用嵌入换成可解的辅助目标。财富动态是
其中 是布朗运动, 是无风险利率。解法走 Hamilton-Jacobi-Bellman 方程:
对 求一阶条件,得到
这里的 就是有效相对风险厌恶,它随时间和财富变化——这正是多期问题和单期问题在结构上的差别:单期 MVO 的风险厌恶是外生给定的常数,多期问题里它是值函数曲率的产物。
Zhou 和 Li (2000) 在线性二次框架下给出了显式解。写成投在风险资产上的金额 (而不是权重)最清楚:
其中 是由目标期望终端财富定出的常数。风险敞口正比于”当前财富距离目标还差多少”:离目标远就多承担风险,越接近目标敞口越小,恰好达到目标时降到零。这就是前面 那个因子在连续时间下的完整版本,也是均值-方差在多期设定下最反直觉的一个性质——一旦财富超过目标,括号变负,最优解要求你反向持有风险资产。方差惩罚不区分上行和下行,超额也是偏离,这个后果得自己看清楚再决定用不用它。
落到离散时间
真实系统在离散时间里跑,所以离散的 Li-Ng 问题可以看成对连续时间解的近似。日度再平衡、1 年期限就是 ,近似相当好;月度再平衡、5 年期限是 ,近似粗糙得多。
再平衡频率本身就是一个待优化的量:调得越频繁越贴近连续时间最优,交易成本也越高。最优频率是这两者的平衡点,而它取决于你的成本结构,不存在一个通用答案。
加进交易成本
上一篇讲了交易成本感知的优化。多期框架对它是天然友好的:每一期的成本取决于旧权重和新权重,而多期问题本来就把两期连着看。离散时间的写法是
仍然约束于财富动态。代价是状态空间里必须带上当前持仓,值函数不再只依赖财富,精确求解要在完整状态空间上做动态规划,很贵。
Gârleanu 和 Pedersen (2013) 的框架本质上是这个问题的连续时间版本:数学更重,但结论干净——最优策略是朝一个”目标组合”部分收敛,收敛速度由成本和信号衰减速度共同决定。对从业者来说,离散时间和连续时间这两条路的联系主要是理论上的,仔细实现的话结果相似,选哪条取决于你手上有什么工具。实务里多数机构用的是短视近似:每一期解一个带交易成本惩罚的单期 MVO,丢掉期际结构换取简单。养老金、主权财富基金这类赌注够大的场景,才值得为完整多期解付那份计算成本。
状态切换与负债
两个常见扩展,都属于”把状态空间加宽”这一类。
收益经常表现出状态切换:牛市和熊市,高波动和低波动。标准 Li-Ng 假设单一状态,扩展的写法是让矩依赖于状态
其中 是状态空间上的马尔可夫链。投资者观察当前状态,据此选 ,动态规划递归相应变成
其中 由马尔可夫链的转移概率生成。要解它,你得知道转移概率和状态条件矩,实践中一般用隐马尔可夫模型之类的方法从历史数据里估。好处是组合能随状态调整,代价是你现在要估的东西多了一整套,而状态识别本身就有滞后。
另一个扩展是负债。养老金有一串未来义务和一个资产组合,目标不是最大化财富而是以最小成本覆盖负债。把 Li-Ng 推广过去,状态空间同时包含资产财富 和负债现值 ,目标变成最小化财富相对负债的期望短缺——这就是负债驱动投资(LDI),优化在”低短缺概率”和”高预期收益”两个目标之间平衡。生产中它一般实现为多阶段随机规划,阶段数由负债结构决定;典型养老金是 20 到 40 个年度阶段。
二次效用的代价
Li-Ng 用的是二次效用,这是均值-方差的来源,也带着一个众所周知的毛病:二次函数是开口向下的抛物线,过了顶点之后边际效用为负——财富越多越不开心。所以二次效用只在顶点以下的那一段有意义,用之前要确认你关心的财富区间落在这一段里。多数组合应用中这不构成实际约束,但它是个真实的理论缺陷,不该假装不存在。
替代品有几个,各自给出不同的最优策略:对数效用 的边际效用恒正,是连续时间文献里的标准选择;幂效用 给出 CRRA 偏好;指数效用 给出 CARA 偏好,在机构风险管理里很常见。均值-方差在组合优化中用得最多,但它不是唯一选项,也不是最有道理的那个。
生产里怎么做,以及短视为什么常常赢
完整的多期解在生产里很少见。常见的是三种近似。最简单的是短视优化:每期用当前估计解一个单期 MVO,完全忽略多期结构。对期限长、换手低的投资者,这个近似的损失比想象中小。第二种是在期初解一次多期问题、假设 和 恒定,然后整个期限持有这个策略——本质是一个初始配置比较讲究的买入持有。第三种是滚动多期:每次再平衡都解一个较短期限(比如 12 个月)的多期问题,介于前两者之间,也是多数愿意上多期的机构实际在用的形式。
代码上,一个最简的多期优化器大致长这样:
import numpy as np
def multi_period_mvo(mu, Sigma, T, gamma, W0):
"""
Li-Ng multi-period mean-variance.
mu: (T, N) expected returns for each period
Sigma: (T, N, N) covariances for each period
T: horizon length
gamma: risk aversion
W0: initial wealth
"""
N = len(mu[0])
# Backward recursion for value function coefficients
# V_t(y) = a_t + b_t * y + c_t * y^2
c = np.zeros(T + 1)
b = np.zeros(T + 1)
a = np.zeros(T + 1)
c[T] = -gamma * W0 / 2
b[T] = 1
a[T] = 0
# Precompute inverse covariances
Sigma_inv = [np.linalg.inv(Sigma[t]) for t in range(T)]
weights = []
for t in range(T - 1, -1, -1):
# Optimal weight at time t
w_t = -1 / (gamma * W0) * Sigma_inv[t] @ mu[t] # + intertemporal term
# (Intertemporal term omitted for clarity)
weights.append(w_t)
return list(reversed(weights))
注释里那句 “intertemporal term omitted” 不是偷懒的托词,它就是这段代码和真正的 Li-Ng 之间的全部差距:完整版本要把 的逆向递归真的跑起来,期际对冲需求才会出现。上面这段跑出来的其实是逐期短视解。
那么多期到底比反复跑单期好在哪?四件事上:它看得见今天的交易如何改变明天的机会(期际对冲);它能处理 和 随时间变化,而单期只用当前估计;它能建模随财富变化的风险厌恶,单期用的是固定值;交易成本两边都能处理,但多期处理得更自然,因为它看得见未来轨迹。差异在期限短、换手高、或者有强期际依赖的场景(养老金的负债驱动投资是典型)里最明显。
但理论上更优不等于实践中更好,短视近似赢的次数比多期支持者愿意承认的多。原因排在第一位的是估计误差累积:每一期的 和 都是估出来的,多期解把这些误差沿着期限一路复合,比单期对估计误差更敏感。其次是模型风险——多期公式假设你知道数据生成过程,至少知道收益的条件分布;模型错了,最优策略跟着错,而且你还把一层可能根本不存在的期际依赖烘焙进了策略。再次是计算成本:短视快,多期慢。最后是行为现实性:真实投资者不会对着 60 个月的期限做优化,多期解算出来的路径经常和机构实际能坚持执行的行为对不上。
所以诚实的结论是:多期 MVO 在理论上是正确的框架,在实际实现中收益常常小于成本。高赌注、长期限、有明确负债结构的场景(养老金、主权财富基金)值得付这个成本;短期限、高换手的策略(高频、市场中性)用短视就够了。
前沿
近年的扩展主要在四个方向上。一是把组合管理当成 MDP、用深度强化学习学策略和值函数(Jiang, Xu & Liang, 2017;Deng 等, 2017);二是把目标从均值-方差换成多期 CVaR,通过引入辅助变量后仍可用动态规划处理;三是把稳健优化和多期结合,在不确定集和未来各期上优化最坏情形;四是把交易成本完整整合进多期框架,连续时间的写法最干净。
四条路线都有清楚的理论动机,也都难落地。多期组合优化的前沿,实际上就是”带现实约束的随机控制”这个更大问题的前沿。
收尾
这是组合构造模块的最后一篇。十二篇文章从 Markowitz 走到多期优化,中间是估计误差、收缩、稳健优化、风险平价、层次风险平价、CVaR、Black-Litterman、交易成本和因子构造。
如果要从这一篇里带走一件事:多期均值-方差的难点不在计算,在于均值-方差目标本身和动态规划不兼容,而 Li-Ng 的处理方式——换一个能分解的目标,解完再映射回来——是随机控制里的通用套路,值得记住的是这个套路,不是那组系数递归。
文献
- Li & Ng (2000). “Optimal Dynamic Portfolio Selection: Multi-Period Mean-Variance Formulation.” Mathematical Finance 10(3): 387-406. 开创性论文。
- Markowitz (1959). Portfolio Selection: Efficient Diversification of Investments. Wiley. 均值-方差基础。
- Björk, Murgoci & Zhou (2014). “Mean-Variance Portfolio Optimization with State-Dependent Risk Aversion.” Mathematical Finance 24(1): 1-24. 状态依赖扩展。
- Zhou & Li (2000). “Continuous-Time Mean-Variance Portfolio Selection: A Stochastic LQ Framework.” Applied Mathematics and Optimization 42(1): 19-33. 连续时间版本。
- Cui, Li, Lu & Li (2012). “Multi-Period Mean-Variance Portfolio Optimization with Markovian Regime Switching.” Journal of Mathematical Analysis and Applications 387(1): 101-109.
- Gârleanu & Pedersen (2013). “Dynamic Trading with Predictable Returns and Transaction Costs.” Journal of Finance 68(6): 2309-2340. 连续时间含成本。