第 23 篇
MPT 模型的解析解(上)
sources/jq-quant-classroom-22-22-mpt-模型md 画出了有效前沿但没说怎么算。这篇用拉格朗日乘子法把「没有无风险资产的 MPT 方差最小化」解成闭合公式:最优权重 w = λ₁Σ⁻¹r + λ₂Σ⁻¹1,有效前沿 σ(μ) = √((cμ²−2bμ+a)/(ac−b²)),最小方差组合对应 μ=b/c。本篇是量化课堂第 23 篇(postId=4596,作者肖睿,编辑宏观经济算命师,难度进阶上,深度 level-1),MPT 解析解系列的上篇(本篇管无风险资产版,下篇管有无风险资产版)。素材见 raw/collections/jq-quant-classroom/23-23-mpt-模型的解析解上md.md。
这是什么
一篇标准的推导文:把 MPT 优化写成矩阵形式 → 用拉格朗日乘子法求最优权重 → 讨论两个矩阵什么时候可逆(保证解存在且唯一)→ 推出有效前沿的闭合公式与最小方差组合 → 用沪深 300 随机 5 股做完整数值算例。前置知识:线性代数、多元微积分、MPT(post 1991)、拉格朗日乘子法(post 3796,本系列 part 35)。
核心要点
问题与记号
- n 个风险资产,权重 w=(w₁,…,w_n),约束 Σw_i=1(w_i<0 = 卖空)。
- 组合收益期望 E[r_w] = Σ w_i·r̄_i;方差 Var[r_w] = ΣΣ w_i·w_j·Cov(r_i, r_j)。
- 优化问题:固定预期收益 μ,最小化方差。写成矩阵形式:最小化 ½wᵀΣw,约束 wᵀr=μ、wᵀ1_n=1。
- 系数 ½ 不改变解,只让求导更干净。Σ 是 n×n 协方差矩阵(对角线是各资产方差)。
解的存在性(凸性论证)
- 先证问题有解:方差是凸函数(Var[(X+Y)/2] ≤ (Var X + Var Y)/2,用柯西/平方展开证);可行集(两个线性约束)是凸集;凸函数在凸集上有极小点。
- 这个结论引用 数学规划简介(post 3293,W7),凸优化细节留到以后的文章。
拉格朗日乘子解法(关键推导链)
- 定义 L = ΣΣ w_i·w_j·Cov − λ₁(Σw_i·r̄_i − μ) − λ₂(Σw_i − 1)。
- 对 w、λ₁、λ₂ 求偏导并令梯度=0,得到三个方程:Σw − λ₁r − λ₂1_n = 0;wᵀr = μ;wᵀ1_n = 1。
- 若 Σ 可逆,由第一式得 w = λ₁Σ⁻¹r + λ₂Σ⁻¹1_n(†)——最优权重是两个基向量的线性组合。
- 把(†)代回两个约束,得 [μ; 1] = [[a, b],[b, c]]·[λ₁; λ₂],其中 a = rᵀΣ⁻¹r、b = 1ᵀΣ⁻¹r、c = 1ᵀΣ⁻¹1(用 Σ 对称 ⇒ Σ⁻¹ 对称)。
- 若 [[a,b],[b,c]] 也可逆,λ 唯一 → w 唯一 → 它是唯一极小点。
两个矩阵的可逆条件
- Σ 可逆:任何风险资产组合都配不出无风险资产(即没有能配出零方差的组合)⇒ Σ 可逆。若配得出零方差组合,本篇模型退化(原文说留到「有无风险资产版」处理)。
- [[a,b],[b,c]] 可逆:不是所有资产预期收益都相等(否则有效前沿退化成横线)。证明思路:Σ⁻¹ 是正定矩阵;a1_n − br ≠ 0 时,二次型 (a1_n−br)ᵀΣ⁻¹(a1_n−br) > 0,展开得 a(ac−b²)>0 ⇒ ac−b²≠0 ⇒ 行列式非零 ⇒ 可逆。
有效前沿的闭合公式
- 把 Var[r_w] 写成 λ 的二次型,再代 λ = [[a,b],[b,c]]⁻¹[μ;1],化简得:
- Var = (cμ² − 2bμ + a)/(ac − b²),即 σ(μ) = √((cμ²−2bμ+a)/(ac−b²))。
- 这就是有效前沿的闭合式(抛物线在 (σ,E) 平面)。
最小方差组合
- 对 σ(μ) 求导令 0:cμ = b ⇒ 最小方差组合的预期收益 μ = b/c。代回优化问题即得权重。
数值算例(沪深 300 随机 5 股、两年日收益)
- r = [1.063, 2.834, 4.133, 2.326, 2.788]×10⁻³;σ = [2.490, 2.700, 3.379, 3.511, 3.607]×10⁻²;Σ(×10⁻⁴)原文给 5×5 全矩阵。
- Numpy 算:a=0.02651、b=6.724、c=2724。
- 有效前沿:σ(μ) = √(99.41μ² − 0.4865μ + 9.593×10⁻⁴)。
- 最小方差组合:μ_min = b/c = 2.447×10⁻³;λ=[−2.776×10⁻¹⁷; 3.640×10⁻⁴](λ₁≈0,因为此时只受 Σw=1 约束主导);权重 w=[0.3499, 0.2594, 0.2523, 0.1914, −0.05298]——第五只股票权重为负,要做空。
- 核对:该组合预期收益 = 2.447×10⁻³、σ_min = 1.908×10⁻²,点正好落在有效前沿最顶端(最小风险处)。
- 穷举出的所有可行组合都在有效前沿右侧;只有用解析公式求出的最小方差组合落在前沿上——闭合公式比穷举/蒙特卡洛更快更准。
机制 / 论证
- 为什么最优权重是两个向量的组合:目标(方差)是 w 的二次型、约束是线性,拉格朗日一阶条件把问题变成解线性方程;Σ⁻¹r 与 Σ⁻¹1 是只依赖协方差矩阵与收益的两个「骨架向量」,λ 按目标 μ 在两者间插值。
- 为什么 λ 是 μ 的函数:约束 wᵀr=μ 把 μ 编码进 λ 的线性方程,μ 变 → λ 变 → w 变,整条有效前沿由 μ 一个参数扫出来。
- 为什么 σ(μ) 是抛物线:Var 是 λ 的二次型,λ 又线性依赖 μ,代进去 Var 是 μ 的二次多项式——所以 (σ,E) 图上有效前沿是抛物线。
- 为什么最小方差点收益 = b/c:抛物线顶点处 dσ/dμ=0,等价 cμ=b。
- 算例教训:连「最小风险」组合都要做空第五只股票——严格 MPT 与「只能做多」的现实约束差很远,落地必须加约束(那是 数学规划简介 与 拉格朗日乘子 的话题)。
可操作
- 可直接套用的计算流程(矩阵公式):
- 由资产收益数据算协方差矩阵 Σ、收益向量 r。
- 算 a=rᵀΣ⁻¹r、b=1ᵀΣ⁻¹r、c=1ᵀΣ⁻¹1(numpy)。
- 任意目标收益 μ:λ = [[a,b],[b,c]]⁻¹[μ;1],w = λ₁Σ⁻¹r + λ₂Σ⁻¹1。
- 有效前沿整条曲线:σ(μ)=√((cμ²−2bμ+a)/(ac−b²));最小方差组合取 μ=b/c。
- 数值工具:numpy 矩阵运算即可;文中演示了 5 股小规模手算,几十只以上应交给程序。
- 前提检查(原文两条件):组合里不能有「能复制无风险资产」的冗余;各资产预期收益不能全相等。
- 本文只做「没有无风险资产」版;带 r_f 的资本市场线解析解在「下篇」(本系列后续文章,未入库)。
术语
- 解析解/闭合公式:不用数值迭代、直接由公式算出的精确解(相对穷举/蒙特卡洛)。
- 拉格朗日乘子:把带等式约束的最优化转成无约束问题的工具(λ₁、λ₂ 是乘子)。
- 协方差矩阵 Σ:第 (i,j) 项是资产 i、j 收益协方差的方阵(对角线=方差)。
- 正定/半正定矩阵:对任意非零向量二次型 >0 / ≥0 的对称矩阵;协方差矩阵一定半正定。
- 二次型:形如 xᵀAx 的式子。
- 最小方差组合:有效前沿最左端、波动最小的组合(可能要卖空某些资产)。
- 卖空:借入资产卖出、赌它跌回来再买还(w_i<0)。
不确定 / 待验证
- 原文一处矩阵偏导写成「Σr − λ₁r − λ₂1」(应为 Σw),本篇按前后文与数学惯例记为 Σw;不影响结论 [需要验证]。
- 有效前沿「上半段有效」的边界(μ=b/c 是最小方差点)在本篇推导中自然出现,但与 MPT 模型 的图示描述一致。
- 5 股示例数字与 part 22 的 5 股示例不同(随机抽股/窗口不同),不要混用。
- 「有无风险资产版」的下篇未在本库(post 未知),CML 的解析解与市场组合计算公式以本系列后续文章为准。
- 本篇假设 Σ 可逆且可卖空;现实中协方差估计误差、卖空约束、交易成本都会让解析解偏离实操。
- 引用到 无约束非线性规划:线搜索方法(正定矩阵定义)与 33/35(W7),本篇只用到其结论。
相关
- MPT 模型 — MPT 模型(本篇要解析的优化问题来源)
- CAPM 模型和公式 — MPT 之上推 CAPM(本篇推导链的下一步应用)
- MPT 模型与有效前沿(均值-方差分析) — MPT 与有效前沿共享概念页(含本篇闭合公式)
- 拉格朗日乘子 — 拉格朗日乘子法理论(W7,本篇直接前置)
- 数学规划简介 — 凸函数/凸集与解存在性(W7)
- 聚宽量化课堂(低频量化策略 43 篇) — 量化课堂 43 篇总览
更新 2026-09-06