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

有效前沿与切线组合

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

L1 把 N 资产的单期投资问题落到了一行目标函数 maxwwμ(γ/2)wΣw\max_w w' \mu - (\gamma/2) w' \Sigma w s.t. 1w=1\mathbf{1}' w = 1,又用两资产示例把代数走通。但 PM 周五拍着桌子要的不是一个孤立点——他要看一张图:横轴是组合波动率 σp\sigma_p,纵轴是组合预期收益 μp\mu_p,所有 MV 最优组合按 γ\gamma 串起来形成一条曲线;同时他要知道​​有没有一个最好的组合​​(无关 γ\gamma 的那种),以及加现金后这张图是怎么变的。

这堂课就是给这张图配齐数学。我们(a)用 Lagrange 乘子法把 L1 的目标函数解成 N 维闭式;(b)取 γ\gamma \to \infty 的极限得到全局最小方差组合(GMV);(c)用 γ\gamma 扫描出整条最小方差前沿(minimum-variance frontier),识别有效前沿(efficient frontier)就是上半枝;(d)引入无风险资产推出切线组合(tangency portfolio)与资本配置线(CAL);(e)证明两基金 / 一基金分离定理(two-fund / one-fund separation),为 L3 的 CAPM 均衡铺路。

术语对齐表

延续 L1 的规范译名,本课新增以下核心术语(全部出自 data/glossaries/quant-glossary.yaml):​​组合优化​​(portfolio optimization,挑选权重满足目标与约束的数值过程)、​​均值方差优化​​(mean-variance optimization, MVO,Markowitz 框架本身)、​​夏普比率​​(Sharpe ratio,(E[r]rf)/σ(E[r]-r_f)/\sigma,L2 切线组合最大化的目标)、​​协方差矩阵​​(covariance matrix)、​​对称矩阵​​(symmetric matrix)、​​半正定​​(positive semidefinite)、​​矩阵逆​​(matrix inverse)。后续散文与代码统一使用这些标准译名。​​向量​​(vector)ww 表示组合权重 wRNw \in \mathbb{R}^N

闭式 MV:Lagrange 乘子直接拉出来

把 L1 的目标函数和预算约束合成 Lagrangian:

L(w,λ)=wμγ2wΣwλ(1w1).L(w, \lambda) = w' \mu - \frac{\gamma}{2} w' \Sigma w - \lambda (\mathbf{1}' w - 1).

ww 求偏导并令其为零:L/w=μγΣwλ1=0\partial L / \partial w = \mu - \gamma \Sigma w - \lambda \mathbf{1} = 0,整理得

w=1γΣ1(μλ1).w = \frac{1}{\gamma} \Sigma^{-1} (\mu - \lambda \mathbf{1}).

把这个 ww 代回预算约束 1w=1\mathbf{1}' w = 1,解出 Lagrange 乘子 λ\lambda:

λ=1Σ1μγ1Σ11.\lambda = \frac{\mathbf{1}' \Sigma^{-1} \mu - \gamma}{\mathbf{1}' \Sigma^{-1} \mathbf{1}}.

数值实现一律推荐 numpy.linalg.solve(Sigma, x) 而不是 inv(Sigma) @ x——避免显式构造逆矩阵,减少误差累积。Σ\Sigma 必须可逆——这是承重假设,本课要求它正定;实务上当 N>TN > T(资产数超过样本数)样本协方差矩阵奇异,即便 N<TN < T 比率 N/TN/T 也会驱动病态(ill-conditioning),L4 用 Ledoit-Wolf 收缩(shrinkage)修复这一点。

精度矩阵(precision matrix)Σ1\Sigma^{-1} 在结构上控制谁拿大权重:对组合方差边际贡献小(即 Σ1ei\Sigma^{-1} e_i 的某行较大)的资产,在单位 μi\mu_i 下会拿到更多权重。

四个闭式公式:Inline-code listing 中的顺序

w_general(gamma) = (1/gamma) * Sigma^{-1} * (mu - lambda * ones) with lambda = (ones' Sigma^{-1} mu - gamma) / (ones' Sigma^{-1} ones)
w_gmv            = (Sigma^{-1} * ones) / (ones' * Sigma^{-1} * ones)
w_tan            = (Sigma^{-1} * (mu - r_f * ones)) / (ones' * Sigma^{-1} * (mu - r_f * ones))
S_tan            = sqrt((mu - r_f * ones)' * Sigma^{-1} * (mu - r_f * ones))

实现规则:use numpy.linalg.solve(Sigma, x) rather than inv(Sigma) @ x for numerical stability

全局最小方差组合(GMV)

γ\gamma \to \infty,或者等价地直接丢掉 wμw' \mu 项,问题变成 minwwΣw\min_w w' \Sigma w s.t. 1w=1\mathbf{1}' w = 1。Lagrange 一阶条件 Σw=λ1\Sigma w = \lambda \mathbf{1} 给出 w=λΣ11w = \lambda \Sigma^{-1} \mathbf{1},代回约束 1w=1\mathbf{1}' w = 1 解出 λ=1/(1Σ11)\lambda = 1 / (\mathbf{1}' \Sigma^{-1} \mathbf{1}),合起来

wgmv=Σ111Σ11.w_{\text{gmv}} = \frac{\Sigma^{-1} \mathbf{1}}{\mathbf{1}' \Sigma^{-1} \mathbf{1}}.

两条实务结论:(i) GMV 只是 Σ\Sigma 的函数,完全不依赖 μ\mu;(ii) 因为 μ\mu 是 MV 框架里​​误差最高​​的原语(Chopra-Ziemba 1993 给出量化结果:μ\mu 误差对最优权重的影响约是 Σ\Sigma 误差的 10 倍),GMV 经验上是 MV 家族中​​对估计误差最鲁棒​​的组合。很多机构默认把「GMV + Ledoit-Wolf 收缩」当作「对 μ\mu 不持观点」的基线组合;国内公募的低波 / 最小波动率产品就是这个工作流的实现。

最小方差前沿:几何形状

γ\gamma(0,)(0, \infty) 区间扫描,闭式 w(γ)w^*(\gamma)RN\mathbb{R}^N 中划出一条一维曲线;映射到 (σp,μp)(\sigma_p, \mu_p) 空间时是​​双曲线​​,在 (σp2,μp)(\sigma_p^2, \mu_p) 空间时是​​抛物线​​(代数更干净)。下面是 ​Inline-code listing​ 中按固定顺序的五条前沿几何断言:

frontier_parabola:  in (sigma_p^2, mu_p) space the minimum-variance frontier is a parabola
frontier_hyperbola: in (sigma_p, mu_p) space it is a hyperbola
gmv_leftmost:       the GMV is the leftmost point of the frontier (minimum sigma_p)
efficient_branch:   the efficient frontier is the upper branch above the GMV (the lower branch is dominated)
cal_tangent_line:   with a risk-free asset, the CAL is the half-line from (0, r_f) tangent to the efficient frontier at (sigma_tan, mu_tan); slope = S_tan = (mu_tan - r_f) / sigma_tan

规则:when tangency = market portfolio (the L3 CAPM equilibrium) the CAL is called the capital market line (CML)

实务读图:有效前沿上每个点都是相应 σp\sigma_p 下能达到的​​最高​ μp\mu_p;投资者选 γ\gamma 等价于选前沿上一点。下半枝(lower branch)被上半枝完全主导(同 σp\sigma_p,更低 μp\mu_p),没有理性投资者会选。

切线组合:把无风险资产并进来

按 L1 的无风险扩展,问题在风险资产权重上变成​​无约束​​的 maxww(μrf1)(γ/2)wΣw\max_w w' (\mu - r_f \mathbf{1}) - (\gamma/2) w' \Sigma w——预算约束被现金权重残差吸收。一阶条件 (μrf1)γΣw=0(\mu - r_f \mathbf{1}) - \gamma \Sigma w = 0 给出 w=(1/γ)Σ1(μrf1)w = (1/\gamma) \Sigma^{-1} (\mu - r_f \mathbf{1})。把它​​归一化​​为方向:

wtan=Σ1(μrf1)1Σ1(μrf1).w_{\text{tan}} = \frac{\Sigma^{-1} (\mu - r_f \mathbf{1})}{\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1})}.

切线组合​​不依赖 γ\gamma​​​——γ\gamma 只影响规模 (1/γ)(1Σ1(μrf1))(1/\gamma) (\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1})),即风险资产仓位相对现金的杠杆。

​断言​​:wtanw_{\text{tan}} 在所有满足 1w=1\mathbf{1}' w = 1 的风险组合 ww 中最大化夏普比率 (wμrf)/wΣw(w' \mu - r_f) / \sqrt{w' \Sigma w}

​证明梗概​​:Sharpe 关于 ww 的标量缩放不变,所以只需在 1w=1\mathbf{1}' w = 1 上找极值。对 Sharpe 求一阶条件可得 (μrf1)Σw(\mu - r_f \mathbf{1}) \propto \Sigma w,即 wΣ1(μrf1)w \propto \Sigma^{-1} (\mu - r_f \mathbf{1}),归一化即为 wtanw_{\text{tan}}。切线处的夏普 Stan=(μrf1)Σ1(μrf1)S_{\text{tan}} = \sqrt{(\mu - r_f \mathbf{1})' \Sigma^{-1} (\mu - r_f \mathbf{1})}——超额收益向量在精度矩阵下的二次型开根号。

资本配置线(CAL)

从全现金点 (0,rf)(0, r_f) 出发,沿着与有效前沿在 (σtan,μtan)(\sigma_{\text{tan}}, \mu_{\text{tan}}) 相切的直线向右上方走,这条​​半线​​就是 CAL。其上每一点都是「cc 份切线组合 + (1c)(1 - c) 份现金」的某个组合。代数:对位置 cwtan+(1c)cashc \cdot w_{\text{tan}} + (1 - c) \cdot \text{cash},σp=cσtan\sigma_p = c \cdot \sigma_{\text{tan}}μp=rf+c(μtanrf)\mu_p = r_f + c (\mu_{\text{tan}} - r_f),所以

μp=rf+σpσtan(μtanrf)=rf+Stanσp.\mu_p = r_f + \frac{\sigma_p}{\sigma_{\text{tan}}} (\mu_{\text{tan}} - r_f) = r_f + S_{\text{tan}} \cdot \sigma_p.

CAL 的斜率就是切线 Sharpe StanS_{\text{tan}}——风险的价格(price of risk)。CAL 对任何 σp\sigma_p 都主导无风险版本的前沿(CAL 在切点相切,两侧前沿都凹向下方)。当切线组合等于市场组合(L3 的 CAPM 均衡),CAL 改名叫资本市场线(CML)。

两基金 / 一基金分离定理:Inline-code listing 中的顺序

two_fund_separation: any frontier portfolio = a * w_A + (1 - a) * w_B for any two distinct frontier portfolios w_A, w_B
one_fund_separation: with a risk-free asset, every MV-optimal portfolio = c * w_tan + (1 - c) * cash for some c in R; the risky direction w_tan is gamma-invariant

规则:one-fund separation is the foundation for the CAPM aggregation in L3

​两基金分离(无风险资产)​​。前沿上任何组合都可以写成 w=awA+(1a)wBw = a w_A + (1 - a) w_B,其中 wAw_AwBw_B 是前沿上任意两个不同组合,aRa \in \mathbb{R}。证明:闭式 w(γ)w^*(\gamma)1/γ1/\gamma 上是仿射(affine)的;取 wA=w(γA)w_A = w^*(\gamma_A)wB=w(γB)w_B = w^*(\gamma_B);任何 w(γ)w^*(\gamma) 的组合权重由 (1/γ1/γB)/(1/γA1/γB)(1/\gamma - 1/\gamma_B) / (1/\gamma_A - 1/\gamma_B) 给出。实务后果:一家基金公司只要发两只 MV 前沿基金(一只保守型,接近 GMV;一只激进型),任何 MV 投资者都能用它们合成自己想要的组合,而不需要持有单只证券——这就是公募基金「股六债四」「股七债三」目标日期产品的理论根基。

​一基金分离(带无风险资产)​​。每个 MV 最优组合都是切线组合 wtanw_{\text{tan}} 与无风险资产的组合,所有投资者无论 γ\gamma 多少都持有同一个风险组合方向 wtanw_{\text{tan}}。证明已经在切线推导里:风险权重向量是 (1/γ)Σ1(μrf1)(1/\gamma) \Sigma^{-1} (\mu - r_f \mathbf{1}),其方向 wtanw_{\text{tan}}γ\gamma 无关;切线组合上的仓位 c=(1/γ)(1Σ1(μrf1))c = (1/\gamma) (\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1}))。这个定理是 L3 CAPM 推导的支点——如果所有投资者共享 (μ,Σ,rf)(\mu, \Sigma, r_f),所有人都持有同一个切线组合;市场出清(market clearing)强迫这个切线组合等于市场组合(market portfolio)。

工作示例:5 资产前沿

5 资产 CN 战略资产配置(strategic asset allocation, SAA)样本宇宙:510300(沪深300 ETF,大盘股代理)、510500(中证500 ETF,中盘代理)、512100(中证1000 ETF,小盘代理)、511010(国债 ETF,久期代理)、518880(黄金 ETF,分散器)。无风险代理:7 日 SHIBOR 或 1 年国债 yield,这里取 rf=0.025r_f = 0.025

闭式实现(下面的 Fenced 代码块给出规范签名,内部统一用 numpy.linalg.solve 替代显式构造 Sigma 的​​矩阵逆​​):

import numpy as np

def efficient_frontier(mu: np.ndarray, Sigma: np.ndarray, r_f: float, gamma_grid: np.ndarray) -> dict:
    # GMV: w_gmv = solve(Sigma, ones) / ones' solve(Sigma, ones)
    ones = np.ones_like(mu)
    inv_Sigma_ones = np.linalg.solve(Sigma, ones)
    w_gmv = inv_Sigma_ones / np.sum(inv_Sigma_ones)
    # 切线组合: w_tan = solve(Sigma, mu - r_f * ones) / ones' solve(Sigma, mu - r_f * ones)
    excess = mu - r_f * ones
    inv_Sigma_excess = np.linalg.solve(Sigma, excess)
    w_tan = inv_Sigma_excess / np.sum(inv_Sigma_excess)
    # 切线夏普
    S_tan = float(np.sqrt(excess @ inv_Sigma_excess))
    # 用 gamma 扫描前沿
    frontier_sigma = np.empty_like(gamma_grid)
    frontier_mu = np.empty_like(gamma_grid)
    for i, gamma in enumerate(gamma_grid):
        lam = (ones @ np.linalg.solve(Sigma, mu) - gamma) / (ones @ inv_Sigma_ones)
        w_g = (1.0 / gamma) * np.linalg.solve(Sigma, mu - lam * ones)
        frontier_mu[i] = float(w_g @ mu)
        frontier_sigma[i] = float(np.sqrt(w_g @ Sigma @ w_g))
    return {
        "w_gmv": w_gmv,
        "w_tan": w_tan,
        "S_tan": S_tan,
        "frontier_sigma": frontier_sigma,
        "frontier_mu": frontier_mu,
    }

CN 实证特点:股债相关性历史上接近零或在某些窗口转正(与 US 风险关闭时常见的 -0.3 不同),债券分散收益较小;中证500 / 中证1000 在前沿上比 US Russell 2000 类比物更高,因为 2018–2023 的 CN 小盘溢价 4–8% 远高于 US 的 1–2%;无约束 MV 解经常落在「30–50% 债 + 50–70% 沪深300 + 极小量中小盘 / 黄金」的切线组合。机构默认的「股六债四」定权重覆盖就是为了避免无约束 MV 解的高波动性。

Formula Explorer

Sigma^{-1} * (mu - r_f * ones)

练习

Exercise

给定 5 资产 2018-01 至 2023-12 月度收益(cn:510300 / 510500 / 512100 / 511010 / 518880),无风险年化 r_f = 0.025

(i) 计算样本 mu(乘 12 年化)、Sigma(乘 12 年化);用 np.all(np.linalg.eigvalsh(Sigma) > 0) 验证 Sigma 正定。

(ii) 用 numpy.linalg.solve 计算 GMV w_gmv;报告权重、mu_p = w_gmv @ musigma_p = sqrt(w_gmv @ Sigma @ w_gmv),观察 w_gmv 在五只资产上是否都为正(Sigma 条件良好时 GMV 是天然的多头分散器)。

(iii) 在超额收益系统上用 numpy.linalg.solve 计算切线组合 w_tan;报告权重(若 mu - r_f * 1 有负项,可能出现做空——无约束问题允许)、mu_p_tansigma_p_tan、切线夏普 S_tan = (mu_p_tan - r_f) / sigma_p_tan

(iv) 用对数网格 np.logspace(-1, 2, 50) 扫描 gamma 描出有效前沿;每个 gamma 计算 w_gmu_gsigma_g;画 (sigma_g, mu_g) 前沿曲线,标记 GMV(最左)、标记切线,从 (0, r_f)(sigma_p_tan, mu_p_tan) 画 CAL。

(v) 找出一般 MV 组合恰好与切线组合重合的 gamma 值(提示:即预算约束乘子 lambda = 0 时的 gamma,γtan=1Σ1μrf1Σ11\gamma_{\text{tan}} = \mathbf{1}' \Sigma^{-1} \mu - r_f \cdot \mathbf{1}' \Sigma^{-1} \mathbf{1});数值验证。

提示
始终用 np.linalg.solve(Sigma, x),不要写 np.linalg.inv(Sigma) @ x——前者数值更稳;两者数学等价但前者避免显式构造 Σ1\Sigma^{-1}
提示
(v) 的数值验证:对你算出的 γtan\gamma_{\text{tan}},把 w_g(gamma_tan)w_tan 的方向 w_tan / w_tan.sum() 对照,前两位小数应当一致。

实务延伸:把 L2 当成 4.4 整个子学科的入口

L2 是 ​组合优化​ 这一学科里最经典的闭式解之一,但它的承重价值不在「公式好看」——而在三件事:

​第一​​,​​精度矩阵​ Σ1\Sigma^{-1} 是 MV 把信号转成权重的真正机制。L1 给的两资产玩具是 N=2N = 2 的特例,这里 N 维 Lagrange 解 wΣ1(μrf1)w \propto \Sigma^{-1} (\mu - r_f \mathbf{1}) 让你看到完整图景:每多一只资产,优化器都在 N 维空间里做一次「​​协方差矩阵​​结构 vs 预期收益​​向量​​」的几何权衡。L3 用同一个 Σ1\Sigma^{-1} 推出 SML;L4 修正 plug-in MV 失败时,就是修复 Σ\SigmaNN 接近 TT 时被 plug-in 估计导致的​​矩阵逆​​爆炸——理解 L2 的 Σ1\Sigma^{-1} 角色,L4 的 Ledoit-Wolf 收缩才会有具体动机。

​第二​​,​​切线组合是 Sharpe-maximizer​​——「最高夏普比率(Sharpe ratio)的风险组合」这件事不是修辞,而是数学定理(本课已证)。无论是机构的目标波动率书、零售的 60/40、还是激进的 130/30 长短策略,从概念上看都是「切线组合 + 现金 / 杠杆」的不同 cc 取值——这正是一基金分离的结论。

​第三​​,​​对称矩阵​​与​​半正定​​性质把这套机器钉在凸优化的舒服区:目标函数关于 ww 是凸二次型,KKT 条件等价于一阶条件,Lagrange 乘子法把约束 QP 化成线性方程组。任何对 Σ\Sigma 的修正——LW 收缩、Barra 风格 Σ=BΣFB+D\Sigma = B \Sigma_F B' + D、收缩到常相关结构——都必须保持半正定;否则整个 QP 就从凸跳到非凸,Lagrange 法不再适用,你得改投鲁棒优化或元启发式。

通向 L3:把一基金分离搬上均衡舞台

切线组合的「所有投资者持有同一个风险方向」结论已经摆好。L3 把这件事推到均衡:如果 NN 个投资者全都共享 (μ,Σ,rf)(\mu, \Sigma, r_f),每人都持有 wtanw_{\text{tan}};市场出清要求这 NN 份持有的总和等于市值加权的市场组合,所以 wtan=wmarketw_{\text{tan}} = w_{\text{market}}。把这一身份代回 CAL,就能跑出证券市场线(security market line, SML),也就是教科书写的 E[ri]rf=βi(E[rM]rf)E[r_i] - r_f = \beta_i (E[r_M] - r_f)。L3 走的就是这条路。在那一课,​​均值方差优化​ 的均衡推论会把整个市场组合带到舞台中央;在 L4,plug-in ​组合优化​ 的失败模式与 Ledoit-Wolf 收缩、Black-Litterman 修复一起出现——L2 的闭式解是后两课无法绕过的中转站。