← 返回模块
4.4.1.4beta 可读 · 未来付费校验通过内容版本 2026-05-28

MV 的实践失败与收缩修正

4.4.1 · 均值方差与投资组合理论 · 量化全流程

某上海私募的初级量化:把 L2 的闭式 MV 直接套到 100 只 A 股、5 年月度数据上,优化器吐回的组合在三只票上占 90%(其中两只各做多 60%、一只做空 200%)。回测夏普 3.2,PM 拍板上线。半年后实盘亏 12%,同期沪深300 涨 8%。「教科书的东西在实盘上不工作」——但​​不是​​教科书错了,是​​他没装收缩​​(no shrinkage)。这堂课讲的就是:为什么这件事会发生(Michaud 1989 + Chopra-Ziemba 1993 + Marchenko-Pastur),四个标准修正(Ledoit-Wolf 收缩、Black-Litterman、重抽样有效前沿、鲁棒优化),并桥接到 4.4.2 / 4.4.3 的机构生产栈。

L1-L3 默认 μ\muΣ\Sigma 已知。L4 揭盖。

术语对齐表

本课新增的核心术语,与 data/glossaries/quant-glossary.yaml 标准译名一致:​​均值方差优化​​(mean-variance optimization, MVO)、​​组合优化​​(portfolio optimization)、​​协方差矩阵​​(covariance matrix)、​​矩阵逆​​(matrix inverse,Σ1\Sigma^{-1} — 决定 plug-in MV 噪声放大的精度矩阵)、​​半正定​​(positive semidefinite)、​​夏普比率​​(Sharpe ratio,样本内 / 样本外赛马的核心 KPI)、​​风险平价​​(risk parity,反波动率加权的多元化基线)、​​特征值​​(eigenvalue)、​​特征向量​​(eigenvector,Σ\Sigma 上做谱分解的两个基础概念)、​​条件数​​(condition number,σmax/σmin\sigma_{\max}/\sigma_{\min},矩阵的数值稳定性度量)、​​因子模型​​(factor model,LW 单因子目标与 Barra 风险模型的共同语言)。后续所有讨论用这些标准译名。

三个失败模式:Inline-code listing 中的顺序

error_maximisation:        w_naive_MV loads up on assets with highest estimation error in mu_hat; 80-95% of weight in 3-5 assets; unstable across re-fits
chopra_ziemba_sensitivity: errors in mu matter ~11x more than errors in Sigma; errors in Sigma ~2x more than errors in individual sigma_i; corollary: GMV is the most robust MV-family portfolio because it ignores mu
ill_conditioned_covariance: when N > T sample S is singular; for N/T = q in (0,1) the Marchenko-Pastur smallest eigenvalue is at (1 - sqrt(q))^2 * sigma^2; S^{-1} amplifies noise in the smallest-eigenvalue directions into the MV weights

规则:plug-in MV is systematically biased toward over-allocating to noise — never deploy unconstrained in production

误差最大化(Michaud 1989)

L2 的闭式解 w=(1/γ)Σ1(μλ1)w^* = (1/\gamma) \Sigma^{-1} (\mu - \lambda \mathbf{1})μ\mu 的线性函数;​​样本​ μ^\hat{\mu} 最高的资产分到最大权重。但 μ^=\hat{\mu} = 真实 μ\mu + 估计误差;最高 μ^\hat{\mu} 的资产​​一部分​​是真高,​​一部分​​是估计正误差。MV 区分不出来,所以它​​系统性地堆向有正向估计误差的资产​​——Michaud 1989 的标题《Markowitz optimization enigma: Is "optimized" optimal?》(FAJ)就是对这件事的反诘。

实证签名:80–95% 权重落在 N=50–500 中的 3–5 只资产上;权重极端正负(典型如 +120% / −80% 的多空账面);对 μ^\hat{\mu} 微小变动高度敏感(下滚 1 个月样本能翻一半权重);样本内夏普非常好(优化器就是样本内 MV 目标的极大化器);样本外夏普差(它堆上去的噪声在下期就消失了)。开头那个 12% 实盘亏损就是这个签名的现场。

Chopra-Ziemba 敏感性(1993)

Chopra-Ziemba(1993,JPM)分别向 μ\muΣ\Sigmaσi\sigma_i 注入高斯误差,测量 γ=2.5\gamma = 2.5 投资者的效用损失。​​​μ\mu 误差的损失约是 Σ\Sigma 误差的 11 倍;Σ\Sigma 误差的损失约是单个 σi\sigma_i 误差的 2 倍​​。结论:估计预算应该砸在 μ\mu 上(alpha 信号研究,4.2 的题目);对 Σ\Sigma,与其多收一个月数据,不如做收缩。​​推论​​:GMV 在 MV 家族里最鲁棒,因为它不用 μ\mu 完全只用 Σ\Sigma——很多机构的最小波动率 / 风险平价产品本质上就是 GMV 的变体(国内的低波 ETF、低波公募基金都是这条路)。

协方差矩阵病态:Marchenko-Pastur

样本协方差 S=(1/T)XXS = (1/T) X' X(其中 XXT×NT \times N 去均值收益矩阵)渐近无偏,但有限 TT 下特征值嘈杂。N>TN > TSS 秩亏(秩至多 TT),S1S^{-1} 字面意义上不存在。即便 N<TN < T,比率 q=N/Tq = N/T 也驱动特征值扭曲。

Marchenko-Pastur 定理(1967):若总体协方差是 σ2I\sigma^2 I(所有特征值相等),样本特征值并不全是 σ2\sigma^2,而是按 MP 密度分布在 [(1q)2σ2,(1+q)2σ2][(1 - \sqrt{q})^2 \sigma^2, (1 + \sqrt{q})^2 \sigma^2] 上。对 q=0.5q = 0.5(如 50 资产 / 100 月观测),边界处特征值是 0.086σ20.086 \sigma^2(最小)和 2.91σ22.91 \sigma^2(最大)——最小特征值相对总体(1.0σ21.0 \sigma^2)被严重​​低估​​。S1S^{-1} 的特征值是 1/eigenvalue1/\text{eigenvalue},所以最小样本特征值取倒后变成最大;MV 权重被最小样本特征值的特征向量(也就是估计噪声最大的方向)主导。

直观:闭式 MV 把噪声方向当成「便宜的对冲机会」,顶上去满仓——这就是 μ^\hat{\mu} 误差通过 S1S^{-1} 被放大到极端权重的机制。

Ledoit-Wolf 收缩:把 S 拽向结构化目标

下面是 ​Inline-code listing​ 中按固定顺序的五条:

target_F:               identity scaled by mean variance (F = (trace(S)/N) * I) [default] OR constant-correlation OR single-factor model
shrinkage_intensity:    delta in [0, 1] chosen to minimise expected Frobenius distance to population covariance (closed-form)
estimator:              Sigma_LW = (1 - delta) * S + delta * F
canonical_implementation: from sklearn.covariance import LedoitWolf; lw = LedoitWolf().fit(returns_matrix); Sigma_LW = lw.covariance_; delta = lw.shrinkage_
typical_delta_range:    delta in [0.1, 0.6] for N/T in [0.1, 0.8]

规则:Sigma_LW is well-conditioned (smallest eigenvalue is at least delta * mean_variance) — Sigma_LW^{-1} is stable

Ledoit-Wolf(2003 JEF、2004a JMVA、2004b JPM)的洞察:把无偏但嘈杂的 SS 与有偏但稳定的结构化目标 FF 加权混合——

ΣLW=(1δ)S+δF,δ[0,1].\Sigma_{\text{LW}} = (1 - \delta) S + \delta F, \qquad \delta \in [0, 1].

三种规范目标:(i) ​​F=(tr(S)/N)IF = (\mathrm{tr}(S)/N) I​​​——单位矩阵按平均方差缩放(Ledoit-Wolf 2004a,「对跨资产相关性不持观点」目标,sklearn.covariance.LedoitWolf 默认就是这个);(ii) ​常相关目标​​——方差取自 SS,所有 pairwise 相关系数全设为样本平均相关系数(Ledoit-Wolf 2003,对单资产类股票宇宙特别适用);(iii) ​单因子模型​ F=BσM2B+diag(specific variances)F = B \sigma_M^2 B' + \mathrm{diag}(\text{specific variances})——以 CAPM 为结构化先验(Ledoit-Wolf 2004b,《Honey, I shrunk the sample covariance matrix》JPM)。

收缩强度 δ\delta 有闭式最优解,最小化期望 Frobenius 距离 EΣLWΣpopF2E\lVert \Sigma_{\text{LW}} - \Sigma_{\text{pop}} \rVert_F^2;sklearn 自动计算并暴露为 lw.shrinkage_。CN 大盘宇宙上 δ0.4\delta \approx 0.40.60.6,比 US 同级宇宙 δ0.2\delta \approx 0.20.40.4 偏大,因为 A 股协方差有更强的单因子结构(L3 的发现延伸到协方差矩阵层面),目标捕获了更多真相。

实现(下面的 Fenced 代码块给出 lw_shrunk_mv 的规范签名,使用 sklearn.covariance.LedoitWolf):

import numpy as np
import pandas as pd
from sklearn.covariance import LedoitWolf

def lw_shrunk_mv(returns_df: pd.DataFrame, gamma: float = 5.0, target: str = "identity") -> dict:
    # 样本均值,乘 12 年化
    mu_hat = returns_df.mean().values * 12.0
    # Ledoit-Wolf 收缩;默认 target='identity'
    lw = LedoitWolf().fit(returns_df.values)
    Sigma_LW = lw.covariance_ * 12.0
    delta = float(lw.shrinkage_)
    # 闭式 MV: w = (1/gamma) * Sigma_LW^{-1} * (mu - lambda * 1) with 1' w = 1
    ones = np.ones_like(mu_hat)
    inv_Sigma_ones = np.linalg.solve(Sigma_LW, ones)
    inv_Sigma_mu = np.linalg.solve(Sigma_LW, mu_hat)
    lam = (inv_Sigma_mu.sum() - gamma) / inv_Sigma_ones.sum()
    w = (1.0 / gamma) * (inv_Sigma_mu - lam * inv_Sigma_ones)
    mu_p = float(w @ mu_hat)
    var_p = float(w @ Sigma_LW @ w)
    sharpe = mu_p / np.sqrt(var_p)
    return {
        "weights": w,
        "mu_hat": mu_hat,
        "Sigma_LW": Sigma_LW,
        "shrinkage_delta": delta,
        "expected_return": mu_p,
        "variance": var_p,
        "sharpe": sharpe,
    }

Black-Litterman:贝叶斯把先验和观点合并

下面是 ​Inline-code listing​ 中按固定顺序的五步:

equilibrium_prior:   pi = gamma * Sigma * w_mkt
views:               P * mu = Q + epsilon_view; epsilon_view ~ N(0, Omega)
prior_distribution:  mu ~ N(pi, tau * Sigma)
posterior_mean:      mu_BL = M^{-1} * ((tau * Sigma)^{-1} * pi + P' * Omega^{-1} * Q) with M = (tau * Sigma)^{-1} + P' * Omega^{-1} * P
final_MV:            solve standard MV with mu_BL replacing mu_hat

规则:BL converts qualitative views into a well-specified mu_BL that gives well-behaved portfolio weights anchored to the market-equilibrium prior

Black-Litterman(1992,FAJ,《Global portfolio optimization》)的四步走:

​Step 1:均衡隐含先验​​。​​反推​ L3 CAPM 均衡——假设观察到的市值权重 wmktw_{\text{mkt}}(沪深300 成分股市值占比)就是 MV 最优,在 γ2.5\gamma \approx 2.5 下解出隐含的预期收益向量 π=γΣwmkt\pi = \gamma \Sigma w_{\text{mkt}}

​Step 2:投资者观点​​。把观点写成线性约束 Pμ=Q+ϵviewP \mu = Q + \epsilon_{\text{view}}:PPK×NK \times N 观点加载矩阵(每行一个观点,如「资产 1 跑赢资产 2 共 3%」),QQ 是 K 维观点收益向量,ϵviewN(0,Ω)\epsilon_{\text{view}} \sim N(0, \Omega) 是观点不确定性;对角 Ω\Omega 是惯用做法。

​Step 3:贝叶斯更新​​。先验 μN(π,τΣ)\mu \sim N(\pi, \tau \Sigma)(典型 τ=0.05\tau = 0.05),观点是观测,后验是 μBLN(μBL,M1)\mu_{\text{BL}} \sim N(\mu_{\text{BL}}, M^{-1}),其中

μBL=M1[(τΣ)1π+PΩ1Q],M=(τΣ)1+PΩ1P.\mu_{\text{BL}} = M^{-1} \big[ (\tau \Sigma)^{-1} \pi + P' \Omega^{-1} Q \big], \qquad M = (\tau \Sigma)^{-1} + P' \Omega^{-1} P.

​Step 4:用 μBL\mu_{\text{BL}} 替换 μ^\hat{\mu},跑常规 MV​​。

优势:μBL\mu_{\text{BL}} 锚定在市场均衡先验上,只在显式观点方向偏离;最终组合在无观点维度上贴近市场,在观点方向上按「观点强度 + 观点置信度」倾斜;权重良好(无极端集中)且​​可解释​​(每个倾斜都能追溯到某条声明的观点)。

其他修正(只点名)

​(i) 重抽样有效前沿(resampled efficient frontier)​​(Michaud 1998《Efficient Asset Management》)——从历史数据 bootstrap 重抽样 B=500B = 500(μb,Σb)(\mu_b, \Sigma_b),在每份重抽样上跑 MV,按 γ\gamma 把权重平均。Michaud 的美国专利(US Patent 6,003,018)限制了机构在美国的采用,但学术推导公开。

​(ii) 鲁棒优化(robust optimisation)​​(Goldfarb-Iyengar 2003,MOR,《Robust portfolio selection problems》)——在 (μ,Σ)(\mu, \Sigma) 周围定义不确定性集 UU,求 maxwmin(μ,Σ)Uwμ(γ/2)wΣw\max_w \min_{(\mu, \Sigma) \in U} w' \mu - (\gamma/2) w' \Sigma w。常用形式:盒约束 μi[μ^ikSEi,μ^i+kSEi]\mu_i \in [\hat{\mu}_i - k \cdot \text{SE}_i, \hat{\mu}_i + k \cdot \text{SE}_i],或椭球约束 (μμ^)Σμ1(μμ^)k2(\mu - \hat{\mu})' \Sigma_\mu^{-1} (\mu - \hat{\mu}) \le k^2。鲁棒解会倾向于在整个不确定性集上表现都好的资产,而不是单点样本最好的资产。

​(iii) μ\mu 上的收缩​​——James-Stein(1961)收缩,把 μ^\hat{\mu} 朝整体均值收缩 μJS=μgrand+(1shrinkage)(μ^μgrand)\mu_{\text{JS}} = \mu_{\text{grand}} + (1 - \text{shrinkage}) \cdot (\hat{\mu} - \mu_{\text{grand}});理论动机充分但实务上不如 LW + BL 常用。

​实务默认​​:机构生产栈是 ​​Σ\Sigma 上的 Ledoit-Wolf 收缩 + Black-Litterman 或因子模型 alpha 用于 μ\mu + Barra 风格风险归因(4.4.2) + 在长期 / 换手 / 行业约束下的转手成本感知 MV(4.4.3)​​。比 plug-in MV 至少要做的:LW + 长期 + 行业上限。CN 还要加涨跌停感知再平衡 + 印花税成本模型。

工作示例:四组合 horse-race

下面的 Fenced 代码块给出 horse_race 的规范签名,把样本内 / 样本外回测与权重诊断打成一张 DataFrame:

import numpy as np
import pandas as pd
from sklearn.covariance import LedoitWolf

def horse_race(returns_in_sample: pd.DataFrame, returns_oos: pd.DataFrame, gamma: float = 5.0) -> pd.DataFrame:
    N = returns_in_sample.shape[1]
    mu_hat = returns_in_sample.mean().values * 12.0
    sigma_hat = returns_in_sample.std().values * np.sqrt(12.0)
    # 1) Naive plug-in MV with sample S
    S = returns_in_sample.cov().values * 12.0
    ones = np.ones(N)
    inv_S_ones = np.linalg.solve(S, ones)
    inv_S_mu = np.linalg.solve(S, mu_hat)
    lam_n = (inv_S_mu.sum() - gamma) / inv_S_ones.sum()
    w_naive = (1.0 / gamma) * (inv_S_mu - lam_n * inv_S_ones)
    # 2) Ledoit-Wolf-shrunk MV
    lw_out = lw_shrunk_mv(returns_in_sample, gamma=gamma, target="identity")
    w_lw = lw_out["weights"]
    # 3) Equal-weight 1/N
    w_1N = np.ones(N) / N
    # 4) Risk-parity (inverse-volatility)
    w_rp = (1.0 / sigma_hat) / (1.0 / sigma_hat).sum()

    portfolios = {"naive_MV": w_naive, "lw_shrunk_MV": w_lw,
                  "equal_weight": w_1N, "risk_parity": w_rp}
    rows = []
    for name, w in portfolios.items():
        # 样本内 / 样本外 Sharpe
        r_is = returns_in_sample.values @ w
        r_oos = returns_oos.values @ w
        in_sample_sharpe = r_is.mean() / r_is.std() * np.sqrt(12)
        oos_sharpe = r_oos.mean() / r_oos.std() * np.sqrt(12)
        # Herfindahl 集中度
        herfindahl = float((w ** 2).sum())
        # 月换手率:OOS 期假设每月再平衡到目标 w(简化:静态 w 下取 0)
        # 这里给一个简化代理:|w| 总和(资金调动量)
        turnover = float(np.abs(w).sum() - 1.0)
        rows.append({"in_sample_sharpe": in_sample_sharpe, "oos_sharpe": oos_sharpe,
                     "herfindahl": herfindahl, "turnover": turnover})
    return pd.DataFrame(rows, index=["naive_MV", "lw_shrunk_MV", "equal_weight", "risk_parity"])

CN 规范结果(30 资产中信一级行业各取市值最大两只 + 2018–2022 样本内 / 2023 样本外、γ=5\gamma = 5):naive_MV 样本内夏普约 2.0–3.0(过拟合签名)、样本外接近零或负;lw_shrunk_MV 样本内低于 naive_MV 但样本外胜出;equal_weight 样本内最低、样本外最稳;risk_parity Herfindahl 最低(最分散)且换手最低。这是 DeMiguel-Garlappi-Uppal(2009,RFS,《Optimal versus naive diversification》)的规范结果。

Formula Explorer

\Sigma_{LW} = (1 - \delta) S + \delta F

练习

Exercise

给定 30 资产大盘宇宙月度收益(cn:CSI 300 行业龙头篮 — 中信一级 15 个行业各取市值最大两只)分为样本内 2018-01 至 2022-12 与样本外 2023-01 至 2023-12。

(i) 跑 horse_race(returns_in_sample, returns_oos, gamma=5.0);收集结果 DataFrame。

(ii) 验证规范签名:naive_MVin_sample_sharpe 最高(可能 > 2.0;过拟合签名),oos_sharpe 最低(常接近零或负);lw_shrunk_MV 的样本内夏普低于 naive_MV 但样本外更高;equal_weight(1/N)样本内最低但样本外最稳;risk_parity Herfindahl 最低(最分散),换手最低。

(iii) 报告样本内 Ledoit-Wolf 收缩强度 delta;评论是否落在典型 [0.1, 0.6] 区间以及对应的 N/T 比(此处 N = 30T = 60,所以 N/T = 0.5)。

(iv) 计算样本 S 与 Ledoit-Wolf Sigma_LW 的矩阵条件数 cond(S) = max_eigenvalue / min_eigenvalue;验证 cond(Sigma_LW) < cond(S) 大幅下降(典型 cond(S) > 1000cond(Sigma_LW) < 100);一句话解释为什么更低的条件数能给出更稳定的 MV 权重。

(v) 找出 naive_MV 中权重绝对值最大的三只资产,以及 lw_shrunk_MV 中权重绝对值最大的三只;评论 naive_MV 前三是否像一个像样的分散仓位(通常不像——经常是两只高杠杆多头加一只巨幅空头)。

提示
注意 sklearn.covariance.LedoitWolf 接受​​月度​​矩阵,内部用样本估计;年化 Sigma_LW * 12 是手工做的,因为 sklearn 不知道你的频率。
提示
(iv) 的解释:Sigma^{-1} 把最小特征值映为最大;ΣLW\Sigma_{\text{LW}} 的最小特征值至少有 δmean_variance\delta \cdot \text{mean\_variance} 作为下限(因为 (1δ)S+δF(1-\delta) S + \delta F 把最小特征值往上抬),所以 ΣLW1\Sigma_{\text{LW}}^{-1} 不会爆炸;权重也就不会爆炸。

国内私募 / 公募的实际落地清单

把以上工具搬到国内的真实工作流,你会发现还要做几件不在论文里、但生产线上不可少的事:

​清单一:数据预处理​​。国内主板的涨跌停规则让收益序列在极端日呈现「锯齿状截断」——某只新能源车票连续三个涨停板期间,日收益看起来都是 +10% 的常数,这会让样本 ​协方差矩阵​ SS 的对应特征值估计严重偏低。预处理时通常把跌停 / 涨停日做异常值剔除,或把月度收益做温莎化(winsorize)在 1% / 99% 分位。这一步不在 Ledoit-Wolf 论文里,但直接影响最后的 ​条件数​ cond(S) 是否过高。

​清单二:样本窗口长度​​。L1–L3 的「μ\muΣ\Sigma 已知」假设之下,TT 是无限大的;实务上 TT 是个工程决策。CSI 300 月度数据,5 年只有 T=60T = 60,N/TN/T 比率敏感;若把窗口拉到 10 年 T=120T = 120,​​矩阵逆​ 后的权重稳定性会显著提升,但代价是更老的样本可能跨越了制度变迁(注册制改革、量化新规、个股 T+0 试点等)而失去代表性。所以工程上的折衷常常是「5 年滚动 + Ledoit-Wolf 收缩」——窗口短但收缩兜底。

​清单三:收益结构假设​​。Ledoit-Wolf 单位目标 F=(tr(S)/N)IF = (\mathrm{tr}(S)/N) I 假设「所有资产对称、跨资产相关性不可知」,这对国内 30 只龙头组合是稍嫌粗的——CSI 300 龙头跨行业 ​因子模型​ 结构很强,单因子 LW 目标 F=BσM2B+diag(specific)F = B \sigma_M^2 B' + \mathrm{diag}(\text{specific}) 通常给出更高的收缩强度 δ0.5\delta \approx 0.50.60.6,样本外 ​夏普比率​ 也更稳。常相关目标在跨行业宇宙上次之,但实现成本最低。

​清单四:与风险归因接口​​。LW 收缩之后的 ΣLW\Sigma_{\text{LW}} 是一个稠密矩阵,不直接给出「市场 beta、市值 beta、行业 beta」的归因——所以国内成熟的私募会把 ΣLW\Sigma_{\text{LW}} 与 Barra 风险模型并行运行:用 ΣLW\Sigma_{\text{LW}} 求权重,用 Barra Σ=BΣFB+D\Sigma = B \Sigma_F B' + D 做事后归因。这是 4.4.2 的题目;在 L4 这里你只需要知道这条接口存在。

​清单五:实施与监控​​。无论是 LW 还是 ​风险平价​​,任何对 Σ\Sigma 的修正都要做事后监控:每月观察新组合的 Herfindahl 集中度、​​特征值​ 谱(最小特征值在哪里)、​​特征向量​ 的稳定性(主成分方向有没有大幅旋转)。一旦最小 ​特征值​ 突然下降一个数量级,通常意味着某个资产价格出现剧烈跳变,需要触发再平衡或人工核查。这套监控是国内任何中型以上量化私募的标准做法。

通向 4.4.2 与 4.4.3:模块收尾

本课收尾的同时也收尾整个 4.4.1 模块。三句话:

  1. ​L1 给目标函数​​:maxwwμ(γ/2)wΣw\max_w w' \mu - (\gamma/2) w' \Sigma w subject to 1w=1\mathbf{1}' w = 1,以及 vNM / 二次效用 / 高斯收益的辩护路径。
  2. ​L2 给闭式几何​​:N 维 Lagrange 解、GMV、切线组合、有效前沿、CAL、两基金 / 一基金分离定理。
  3. ​L3 给均衡定价含义​​:一基金 + 市场出清 → CAPM SML;系统性 vs 非系统性风险分解;Jensen alpha 检验;Roll 批判 → 多因子模型(4.3.1)。
  4. ​L4(本课)给生产化修正​​:误差最大化的 Michaud 诊断、Chopra-Ziemba 敏感性、Marchenko-Pastur 病态、Ledoit-Wolf 收缩、Black-Litterman 贝叶斯;DeMiguel-Garlappi-Uppal 的 horse-race。

接下来:4.4.2 把 Σ\Sigma 从样本估计换成 Barra 风格的多因子风险模型(Σ=BΣFB+D\Sigma = B \Sigma_F B' + D),加上 VaR / CVaR / FRTB 的尾部风险机器;4.4.3 把无约束 MV 升级到带长期 / 换手 / 行业 / 转手成本约束的 QP,并接入鲁棒优化与制度感知再平衡。本课的 LW + GMV 是这条生产线的起点。