跳到正文

多期组合优化,Li-Ng 路线

均值-方差目标里的方差项让动态规划失效——Bellman 原理直接不成立。Li & Ng (2000) 的解法是换一个能分解的目标去解,再证明想要的解就在里面。推导、连续时间极限,以及为什么生产里多数人还是用短视近似。

第 2 篇 · 共 12 篇 约 14 分钟

这个模块前面每一篇都默认单期:今天定权重,持有一个周期,看到收益,再平衡。“一个周期”是一天、一个月还是一年不重要,结构一样。

但组合不是这么管的。你今天的配置决定了明天你能做什么。预期下个月就要再平衡的情况下卖 A 买 B,和打算拿五年的情况下做同一笔交易,含义完全不同。多期优化把这层依赖显式写进目标:优化的是整个期限 TT 上的均值-方差权衡,而不只是下一期。

麻烦在于,把”多期”这三个字写进目标之后,动态规划就不成立了——不是难解,是 Bellman 原理直接失效。Li 和 Ng (2000) 那篇论文真正的贡献就在这里:他们不是把这个问题解了,而是换了一个能解的问题,再证明你想要的解就在这个新问题的解集里。这篇文章讲清楚这个替换,然后看它在连续时间下变成什么样,最后说说为什么生产里多数人仍然用短视近似。

为什么动态规划不能直接用

设投资者初始财富 W0W_0、期限 TT 期。每期 tt 观察状态、选择权重 wtw_t,收益 rtr_t 实现,财富按下式演化:

Wt+1=Wt(1+wt⊤rt)W_{t+1} = W_t (1 + w_t^\top r_t)

约束是这条财富动态,加上可能的仓位约束(不许做空、预算约束等)。目标是终端财富的均值-方差权衡:

max⁡w0,…,wT−1 E[WT]−γ2Var(WT)\max_{w_0, \ldots, w_{T-1}} \ \mathbb{E}[W_T] - \frac{\gamma}{2} \mathrm{Var}(W_T)

问题出在方差上。Var(WT)=E[WT2]−(E[WT])2\mathrm{Var}(W_T) = \mathbb{E}[W_T^2] - (\mathbb{E}[W_T])^2,而那个”期望的平方”不是任何东西的期望。动态规划要求目标能写成逐期条件期望的嵌套,(E[WT])2(\mathbb{E}[W_T])^2 做不到——中间某期的最优续解会依赖于你在时刻 0 选定的那个无条件均值。换句话说,今天算出来的最优策略,明天站在新的信息集上重新算一遍就不再最优了。这是时间不一致,不是计算量的问题。

Li-Ng 的替换

Li 和 Ng 的做法是引入一个辅助问题:

max⁡w0,…,wT−1 E[WT−γ2WT2]\max_{w_0, \ldots, w_{T-1}} \ \mathbb{E}\left[ W_T - \frac{\gamma}{2} W_T^2 \right]

它和原目标只差一项——展开就能看到,辅助目标等于均值-方差目标减去 γ2(E[WT])2\frac{\gamma}{2}(\mathbb{E}[W_T])^2。但这一项的位置变了:现在整个目标是一个关于 WTW_T 的函数的期望,可以按期分解,Bellman 原理恢复成立,动态规划可以照常做。

剩下的是把两个问题接回去。Li 和 Ng 证明了嵌入关系:原均值-方差问题的每一个有效解,都是这个辅助问题在某个参数取值下的解。于是你只要把辅助问题的参数扫一遍,有效前沿就在结果里;具体想要哪个点,再解一个把参数和实现的 E[WT]\mathbb{E}[W_T] 联系起来的标量方程就能定位。这就是全部技巧——不是把难题解了,而是把它嵌进一族可解的问题里,再从解集中挑回来。后面所有推导都在辅助问题上进行。

顺手做一个归一化,让式子干净些。定义随财富成比例演化的变量 yty_t:

yt+1=yt+(wt⊤rt)yt=yt(1+wt⊤rt)y_{t+1} = y_t + (w_t^\top r_t) y_t = y_t (1 + w_t^\top r_t)

取 y0=1y_0 = 1,于是 yt=Wt/W0y_t = W_t / W_0,是累积收益乘数。期望终端财富和它的二阶矩分别是

E[WT]=W0⋅E[yT]\mathbb{E}[W_T] = W_0 \cdot \mathbb{E}[y_T]

和

E[WT2]=W02⋅E[yT2]\mathbb{E}[W_T^2] = W_0^2 \cdot \mathbb{E}[y_T^2]

辅助目标就写成

max⁡w W0E[yT]−γ2W02E[yT2]\max_w \ W_0 \mathbb{E}[y_T] - \frac{\gamma}{2} W_0^2 \mathbb{E}[y_T^2]

yTy_T 沿收益路径是高度非线性的(它是一串随机因子的连乘),但这不要紧:yTy_T 的分布只取决于权重序列 w0,…,wT−1w_0, \ldots, w_{T-1},而目标只用到这个分布的前两阶矩。yty_t 可以直接当状态变量用。

逆向递归

定义值函数:

Vt(yt)=max⁡wt,…,wT−1E[yT−γW02yT2∣yt]V_t(y_t) = \max_{w_t, \ldots, w_{T-1}} \mathbb{E}\left[ y_T - \frac{\gamma W_0}{2} y_T^2 \mid y_t \right]

对应的 Bellman 方程是

Vt(y)=max⁡wtE[Vt+1(yt(1+wt⊤rt))∣yt]V_t(y) = \max_{w_t} \mathbb{E}\left[ V_{t+1}(y_t (1 + w_t^\top r_t)) \mid y_t \right]

终端条件 VT(y)=y−γW02y2V_T(y) = y - \frac{\gamma W_0}{2} y^2。

递归能不能算下去,取决于 VtV_t 会不会保持一个固定的函数形式。这里会:因为终端条件是二次的、财富演化对 yy 是线性的,二次形式在递归中封闭,

Vt(y)=at+bty+cty2V_t(y) = a_t + b_t y + c_t y^2

其中系数 (at,bt,ct)(a_t, b_t, c_t) 只依赖 tt,与 yy 无关。把它代回 Bellman 方程、按 yy 的幂次匹配系数,就得到一组关于 (at,bt,ct)(a_t, b_t, c_t) 的逆向递归,起点由终端条件给出:

cT=−γW02,bT=1,aT=0c_T = -\frac{\gamma W_0}{2}, \quad b_T = 1, \quad a_T = 0

每个逆向步骤做两件事:用当期的条件均值 μt\mu_t 和协方差 Σt\Sigma_t 解一个单期 MVO,拿到最优权重 wt⋆w_t^\star;再用它把系数更新到 (at,bt,ct)(a_t, b_t, c_t)。在这个二次值函数下,最优权重的形式是

wt⋆(yt)=−12ct+1ytΣt−1(μt−ct+1bt+11)w_t^\star(y_t) = -\frac{1}{2 c_{t+1} y_t} \Sigma_t^{-1}(\mu_t - c_{t+1} b_{t+1} \mathbf{1})

其中 ct+1<0c_{t+1} < 0,所以前面的标量为正。注意状态 yty_t 只以 1/yt1/y_t 的标量形式出现在括号外面——括号里那个向量完全不依赖当前财富。这是二次值函数带来的最大便利:每个逆向步骤归结为一个向量方程,而不是在整个状态空间上搜索。系数更新的完整闭式表达在 Li 和 Ng 的原文里,实现时对着抄比自己重推快。

最优策略长什么样

把上面的结构写得再直白一点:

wt⋆=12γW0Σt−1(μt+期际项)w_t^\star = \frac{1}{2 \gamma W_0} \Sigma_t^{-1} (\mu_t + \text{期际项})

Σt−1μt\Sigma_t^{-1}\mu_t 就是熟悉的单期 MVO 方向,前面的标量随时间变化,而”期际项”是多期问题独有的那部分——它捕捉对未来期的对冲需求。它非零的原因很朴素:今天投出去的这笔钱改变了明天的机会集,而值函数看得见这件事。T=1T = 1 时期际项消失,整个式子退回标准 MVO;TT 越大它越重要。

1/yt1/y_t 那个因子还有一层直观解释,值得单独说。财富涨上去之后,同一个括号里的向量除以更大的 yty_t,风险仓位反而缩小。多期均值-方差的行为因此更像”盯着一个终点在走”而不是”按比例配置”:离目标还远就多冒险,接近目标就收手。这跟固定比例的单期 MVO 是两种完全不同的动物,也是后面连续时间解会再次出现的模式。

状态变量与维度灾难

Li-Ng 的基本形式里唯一的状态是财富。实践中状态通常更多:当前财富 yty_t、当前持仓(决定了交易成本从哪儿算起)、时变的预期收益 μt\mu_t、时变的协方差 Σt\Sigma_t。每加一个状态变量,动态规划就多一维;值函数在财富方向上还是二次的,在其他状态方向上未必。Björk、Murgoci 和 Zhou 等人的扩展处理了多因子模型、状态依赖的风险厌恶和约束。

一旦状态表示定下来,多期问题就是一个标准的马尔可夫决策过程,按部就班地解:把连续状态空间离散化,从 t=Tt = T 逆向到 t=0t = 0 逐层算值函数,对每个状态和时间提取最优策略 wt⋆(x)w_t^\star(x),运行时观察状态、查表、执行。离散状态下这个递归是精确的;连续状态下值函数得近似——多项式基、神经网络或者核方法。

维度灾难在这里是硬墙。超过三四个连续状态变量,没有强结构的话动态规划就不可行了。绕开的办法有三条:假设值函数属于某个参数族(二次、多项式)然后估参数;仿真大量路径、用回归估值函数;或者干脆当成 MDP 用强化学习学策略。后两条在高维问题上扩展性更好,代价是要喂更多数据。对典型的组合优化问题——状态少、期限中等——直接做动态规划仍然是可行的;高频或者超长期限才需要往仿真那边走。

连续时间极限

再平衡频率趋于无穷时,离散时间的 Li-Ng 问题收敛到一个连续时间随机控制问题。目标还是终端财富的均值-方差:

max⁡w E[WT]−γ2Var(WT)\max_w \ \mathbb{E}[W_T] - \frac{\gamma}{2} \mathrm{Var}(W_T)

同样用嵌入换成可解的辅助目标。财富动态是

dWt=Wt[(rf+wt⊤(μ−rf1))dt+wt⊤Σ1/2dZt]dW_t = W_t \left[ \left( r_f + w_t^\top (\mu - r_f \mathbf{1}) \right) dt + w_t^\top \Sigma^{1/2} dZ_t \right]

其中 ZtZ_t 是布朗运动,rfr_f 是无风险利率。解法走 Hamilton-Jacobi-Bellman 方程:

0=Vt+max⁡w{VWW(rf+w⊤(μ−rf1))+12VWWW2w⊤Σw}0 = V_t + \max_w \left\{ V_W W \left( r_f + w^\top (\mu - r_f \mathbf{1}) \right) + \frac{1}{2} V_{WW} W^2 w^\top \Sigma w \right\}

对 ww 求一阶条件,得到

wt⋆=−VWW VWWΣ−1(μ−rf1)w_t^\star = -\frac{V_W}{W \, V_{WW}} \Sigma^{-1} (\mu - r_f \mathbf{1})

这里的 −WVWW/VW-W V_{WW} / V_W 就是有效相对风险厌恶,它随时间和财富变化——这正是多期问题和单期问题在结构上的差别:单期 MVO 的风险厌恶是外生给定的常数,多期问题里它是值函数曲率的产物。

Zhou 和 Li (2000) 在线性二次框架下给出了显式解。写成投在风险资产上的金额 πt⋆\pi_t^\star(而不是权重)最清楚:

πt⋆=Σ−1(μ−rf1)(ζe−rf(T−t)−Wt)\pi_t^\star = \Sigma^{-1} (\mu - r_f \mathbf{1}) \left( \zeta e^{-r_f (T-t)} - W_t \right)

其中 ζ\zeta 是由目标期望终端财富定出的常数。风险敞口正比于”当前财富距离目标还差多少”:离目标远就多承担风险,越接近目标敞口越小,恰好达到目标时降到零。这就是前面 1/yt1/y_t 那个因子在连续时间下的完整版本,也是均值-方差在多期设定下最反直觉的一个性质——一旦财富超过目标,括号变负,最优解要求你反向持有风险资产。方差惩罚不区分上行和下行,超额也是偏离,这个后果得自己看清楚再决定用不用它。

落到离散时间

真实系统在离散时间里跑,所以离散的 Li-Ng 问题可以看成对连续时间解的近似。日度再平衡、1 年期限就是 T=252T = 252,近似相当好;月度再平衡、5 年期限是 T=60T = 60,近似粗糙得多。

再平衡频率本身就是一个待优化的量:调得越频繁越贴近连续时间最优,交易成本也越高。最优频率是这两者的平衡点,而它取决于你的成本结构,不存在一个通用答案。

加进交易成本

上一篇讲了交易成本感知的优化。多期框架对它是天然友好的:每一期的成本取决于旧权重和新权重,而多期问题本来就把两期连着看。离散时间的写法是

max⁡wE[WT−γ2WT2−∑t=0T−1c∥wt+1−wt∥1]\max_w \mathbb{E}\left[ W_T - \frac{\gamma}{2} W_T^2 - \sum_{t=0}^{T-1} c \|w_{t+1} - w_t\|_1 \right]

仍然约束于财富动态。代价是状态空间里必须带上当前持仓,值函数不再只依赖财富,精确求解要在完整状态空间上做动态规划,很贵。

Gârleanu 和 Pedersen (2013) 的框架本质上是这个问题的连续时间版本:数学更重,但结论干净——最优策略是朝一个”目标组合”部分收敛,收敛速度由成本和信号衰减速度共同决定。对从业者来说,离散时间和连续时间这两条路的联系主要是理论上的,仔细实现的话结果相似,选哪条取决于你手上有什么工具。实务里多数机构用的是短视近似:每一期解一个带交易成本惩罚的单期 MVO,丢掉期际结构换取简单。养老金、主权财富基金这类赌注够大的场景,才值得为完整多期解付那份计算成本。

状态切换与负债

两个常见扩展,都属于”把状态空间加宽”这一类。

收益经常表现出状态切换:牛市和熊市,高波动和低波动。标准 Li-Ng 假设单一状态,扩展的写法是让矩依赖于状态

μt=μ(zt),Σt=Σ(zt)\mu_t = \mu^{(z_t)}, \quad \Sigma_t = \Sigma^{(z_t)}

其中 ztz_t 是状态空间上的马尔可夫链。投资者观察当前状态,据此选 wtw_t,动态规划递归相应变成

Vt(y,z)=max⁡wE[Vt+1(y′,z′)∣y,z,w]V_t(y, z) = \max_{w} \mathbb{E}\left[ V_{t+1}(y', z') \mid y, z, w \right]

其中 z′z' 由马尔可夫链的转移概率生成。要解它,你得知道转移概率和状态条件矩,实践中一般用隐马尔可夫模型之类的方法从历史数据里估。好处是组合能随状态调整,代价是你现在要估的东西多了一整套,而状态识别本身就有滞后。

另一个扩展是负债。养老金有一串未来义务和一个资产组合,目标不是最大化财富而是以最小成本覆盖负债。把 Li-Ng 推广过去,状态空间同时包含资产财富 WtW_t 和负债现值 LtL_t,目标变成最小化财富相对负债的期望短缺——这就是负债驱动投资(LDI),优化在”低短缺概率”和”高预期收益”两个目标之间平衡。生产中它一般实现为多阶段随机规划,阶段数由负债结构决定;典型养老金是 20 到 40 个年度阶段。

二次效用的代价

Li-Ng 用的是二次效用,这是均值-方差的来源,也带着一个众所周知的毛病:二次函数是开口向下的抛物线,过了顶点之后边际效用为负——财富越多越不开心。所以二次效用只在顶点以下的那一段有意义,用之前要确认你关心的财富区间落在这一段里。多数组合应用中这不构成实际约束,但它是个真实的理论缺陷,不该假装不存在。

替代品有几个,各自给出不同的最优策略:对数效用 U(W)=log⁡WU(W) = \log W 的边际效用恒正,是连续时间文献里的标准选择;幂效用 U(W)=W1−γ/(1−γ)U(W) = W^{1-\gamma}/(1-\gamma) 给出 CRRA 偏好;指数效用 U(W)=−exp⁡(−γW)U(W) = -\exp(-\gamma W) 给出 CARA 偏好,在机构风险管理里很常见。均值-方差在组合优化中用得最多,但它不是唯一选项,也不是最有道理的那个。

生产里怎么做,以及短视为什么常常赢

完整的多期解在生产里很少见。常见的是三种近似。最简单的是短视优化:每期用当前估计解一个单期 MVO,完全忽略多期结构。对期限长、换手低的投资者,这个近似的损失比想象中小。第二种是在期初解一次多期问题、假设 μ\mu 和 Σ\Sigma 恒定,然后整个期限持有这个策略——本质是一个初始配置比较讲究的买入持有。第三种是滚动多期:每次再平衡都解一个较短期限(比如 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 之间的全部差距:完整版本要把 (at,bt,ct)(a_t, b_t, c_t) 的逆向递归真的跑起来,期际对冲需求才会出现。上面这段跑出来的其实是逐期短视解。

那么多期到底比反复跑单期好在哪?四件事上:它看得见今天的交易如何改变明天的机会(期际对冲);它能处理 μt\mu_t 和 Σt\Sigma_t 随时间变化,而单期只用当前估计;它能建模随财富变化的风险厌恶,单期用的是固定值;交易成本两边都能处理,但多期处理得更自然,因为它看得见未来轨迹。差异在期限短、换手高、或者有强期际依赖的场景(养老金的负债驱动投资是典型)里最明显。

但理论上更优不等于实践中更好,短视近似赢的次数比多期支持者愿意承认的多。原因排在第一位的是估计误差累积:每一期的 μt\mu_t 和 Σt\Sigma_t 都是估出来的,多期解把这些误差沿着期限一路复合,比单期对估计误差更敏感。其次是模型风险——多期公式假设你知道数据生成过程,至少知道收益的条件分布;模型错了,最优策略跟着错,而且你还把一层可能根本不存在的期际依赖烘焙进了策略。再次是计算成本:短视快,多期慢。最后是行为现实性:真实投资者不会对着 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. 连续时间含成本。