想象你是一家五口的掌勺人。每周日下午你坐在餐桌前,对着一张食材清单犯愁:鸡胸肉、三文鱼、西兰花、大米、燕麦、牛肉……每样食材都有自己的「美味指数」和「价格波动率」。你不能只买最爱吃的,因为营养会失衡;也不能只看价格便宜的,因为家人会抗议;更不能超出预算,否则月底只能喝西北风。你的任务,是决定每种食材在采购单里占多大比例,让「美味」与「健康」的平衡最优。量化投资里的组合优化,做的正是同一件事:把股票、债券、黄金当作「食材」,把收益率当作「美味指数」,把波动风险当作「健康风险」,用数学方法算出一份最优的「资产菜单」。从马科维茨的有效前沿,到风险平价的均衡哲学,再到 Black-Litterman 的观点融合,本质都是在回答一个问题——这周到底怎么吃?

岗位关联

组合优化是量化投资从「单兵作战」走向「系统配置」的枢纽能力。掌握它,你就能看懂大机构的资产配置逻辑,为进入智能投顾、风控建模等 AI+金融岗位打下最硬的地基。

目录
  1. 可视化演示
  2. 设定目标:组合优化的起点
  3. 马科维茨:均值-方差框架
  4. 风险平价:让每份风险都均衡
  5. 观点融合:Black-Litterman 模型
  6. 约束求解:让方案落进现实
  7. 执行校正:从纸面到实盘
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示马科维茨有效前沿、风险平价均衡与Black-Litterman观点融合,理解风险约束下的最优资产配置方法。

本节配有交互动效(进入视口后自动加载,约 3KB)。

马科维茨:有效前沿 均值方差权衡 最优组合 min σ² s.t. E 风险约束下求最优收益

设定目标:组合优化的起点

周日下午,你打开冰箱盘点食材:鸡胸肉、三文鱼、西兰花、大米、燕麦,还有一点牛肉。你开始琢磨这周怎么吃。如果全买鸡胸肉,蛋白质是够了,但家人一定会吃腻——营养单一就是「风险」;如果全买三文鱼,美味指数很高,但价格贵、供应不稳定,「波动」太大。你心里清楚,在设计菜单之前,必须先想清楚目标:既要满足味蕾(收益),又要营养均衡(风险可控),还绝不能超预算(约束)。组合优化,就是把这份「想清楚」翻译成数学语言。

在量化投资里,组合优化做的事和配菜单一模一样。资产就是食材,权重就是每种食材的采购比例。要启动一次组合优化,你需要三样东西:第一,每类资产的「收益预期」,相当于美味指数;第二,「风险度量」,相当于价格波动的剧烈程度;第三,「权重约束」,相当于预算上限和忌口清单。有了这三样,数学就能替你在茫茫多的组合中筛选出最优解。

组合优化问题的标准写法其实并不复杂:在所有候选的权重向量里,找一个让组合风险最小的方案。这里的风险用组合收益率的方差来度量——方差刻画了收益偏离均值的幅度,既符合直觉又方便求导。把风险写成矩阵二次型,再加上各种约束条件,就得到了一个经典的二次规划问题。

把「菜单目标」翻译成「风险最小化」之后,数学就开始为你工作了。但只定目标还不够,就像只知道「要营养均衡」却不知道怎么配比。接下来我们看看华尔街最经典的那套「配菜公式」——马科维茨模型,是如何从目标走向答案的。

min⁡w12wTΣw\min_{\mathbf{w}} \frac{1}{2} \mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}
直白地说:在所有可行的权重分配中,找一组让整个资产组合波动最小的权重。前面的 1/2 只是为了让求导更整洁,不改变答案。
  1. 决策变量权重向量$\mathbf{w} = [w_1, w_2, \cdots, w_n]^T$ 是长度为 $n$ 的列向量,$w_i$ 表示第 $i$ 类资产在组合中的占比。它就像菜单上每种食材后面的采购克数。
    w=[w1,w2,⋯ ,wn]T\mathbf{w} = [w_1, w_2, \cdots, w_n]^T
  2. 协方差矩阵$\boldsymbol{\Sigma}$ 是资产收益率的协方差矩阵,对角线元素是各资产自身收益率的方差,非对角线元素描述两种资产收益率同涨同跌的联动强度。
    Σ=(σ12σ12⋯σ21σ22⋯⋮⋮⋱)\boldsymbol{\Sigma} = \begin{pmatrix} \sigma_1^2 & \sigma_{12} & \cdots \\ \sigma_{21} & \sigma_2^2 & \cdots \\ \vdots & \vdots & \ddots \end{pmatrix}
  3. 二次型展开$\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}$ 把权重和协方差相乘,得到的是组合收益率的方差。它同时考虑了每种食材的自身波动和食材之间的「搭配反应」。
    wTΣw=∑i=1n∑j=1nwiwjσij\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w} = \sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij}
  4. 最小化操作$\min_{\mathbf{w}}$ 表示在所有满足条件的权重里,挑出让组合方差最小的那一个,这就是「风险最小化」的数学表达。
    min⁡w  f(w)\min_{\mathbf{w}} \; f(\mathbf{w})

马科维茨:均值-方差框架

假设现在你决定只关心两件事:这桌菜的平均美味程度,以及每天美味程度的波动幅度。你会发现,鸡胸肉美味稳定却寡淡,三文鱼惊艳但时好时坏。马科维茨在 1952 年想明白了一个关键道理:不要单独评价每种食材,而要看它们「搭配在一起」后,整桌菜的期望美味与美味波动。这个视角的转变,让他拿到了诺贝尔经济学奖。

马科维茨的均值-方差框架用两个数字描述一个组合:均值(预期收益)和方差(风险)。它最伟大的贡献在于揭示「分散化效应」:两种食材单独看波动都大,但只要它们的价格涨跌不太同步,搭配在一起之后的整体波动反而变小了——就像三文鱼涨价时鸡肉正在降价,家里总有一道硬菜撑得住场面。这正是「不要把鸡蛋放在同一个篮子里」的数学证明。

在技术实现上,马科维茨模型在「目标收益固定」的前提下最小化组合方差;或对称地,在方差固定时最大化收益。把所有最优解画在风险-收益平面上,就形成了一条向左上方凸起的曲线——有效前沿。前沿上的每个组合都无可挑剔:在同样的风险水平下,没有其他组合比它收益更高。

有了有效前沿,你就像拿到了一份「最优菜单图鉴」:想吃得清淡些,选前沿左侧的组合;想追求惊艳,选前沿右上方的组合。具体落在哪个点,取决于你家的「风险偏好」。不过马科维茨有个软肋:它对输入参数极其敏感,收益预期差一点,最优配置就面目全非。于是聪明的资金开始寻找不那么「挑参数」的配法,这就是风险平价的登场。

min⁡w12wTΣws.t.wTμ=μp,    ∑i=1nwi=1\min_{\mathbf{w}} \frac{1}{2} \mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w} \quad \text{s.t.} \quad \mathbf{w}^T \boldsymbol{\mu} = \mu_p, \;\; \sum_{i=1}^{n} w_i = 1
意思是在锁定目标收益为 $\mu_p$、且把全部资金用完(权重和为 1)的前提下,选一组权重让组合方差最小。把目标收益从低到高扫一遍,每个最优解连起来就是有效前沿。
  1. 预期收益向量$\boldsymbol{\mu} = [\mu_1, \mu_2, \cdots, \mu_n]^T$ 是每类资产的预期收益,相当于每种食材的美味评分。它是模型的输入,通常由历史均值加基本面判断得到。
    μ=[μ1,μ2,⋯ ,μn]T\boldsymbol{\mu} = [\mu_1, \mu_2, \cdots, \mu_n]^T
  2. 目标收益约束$\mathbf{w}^T \boldsymbol{\mu} = \mu_p$ 要求组合的加权收益恰好等于目标收益 $\mu_p$。它像一个「口味底线」,告诉模型:无论你怎么配,整体美味必须达到这个分。
    wTμ=∑i=1nwiμi=μp\mathbf{w}^T \boldsymbol{\mu} = \sum_{i=1}^{n} w_i \mu_i = \mu_p
  3. 全资金约束$\sum_{i=1}^{n} w_i = 1$ 表示所有权重加起来必须等于 1,也就是把每一分钱都花出去,不能有现金闲置。
    ∑i=1nwi=1\sum_{i=1}^{n} w_i = 1
  4. 整体求解逻辑对每个目标收益 $\mu_p$ 解一次「最小方差」问题,得到前沿上的一个点;让 $\mu_p$ 从低到高连续变化,就描绘出完整的有效前沿曲线。
    Frontier={(w∗TΣw∗,  w∗Tμ)}\text{Frontier} = \left\{ \big( \sqrt{\mathbf{w}^{*T} \boldsymbol{\Sigma} \mathbf{w}^{*}},\; \mathbf{w}^{*T}\boldsymbol{\mu} \big) \right\}

风险平价:让每份风险都均衡

你很快发现马科维茨的菜单有个隐患:只要食材的「美味指数」估计稍微偏一点点,最优比例就剧烈震荡。于是你换了个思路——不追求「最美味」,而追求「最安心」:让每一种食材对整桌菜的营养风险贡献一样大。哪怕某种食材的美味评估错了,整桌配置也不会崩盘。

风险平价(Risk Parity)的核心思想正是「等风险贡献」:每种资产对组合总风险的边际贡献相等。注意,这与「等权重」完全是两码事。等权重是把钱分成三等份,但由于波动率大的资产会悄悄吃掉大部分风险,组合仍然很脆弱;风险平价则要求每份资金承担的风险一样多,于是波动大的资产配得少,波动小的资产配得多,整体风险被真正摊平。

具体操作时,先计算每类资产对组合总风险的贡献度,再不断调整权重,让所有资产的贡献度相等。这个模型不需要预测收益,只需要估计波动率和相关性,因此对参数误差的敏感度远低于马科维茨框架。在股票、债券这类相关性较低的大类资产配置中,风险平价可以显著增强组合的稳健性,这也是桥水全天候基金背后的核心逻辑。

如果用这套逻辑配菜单,波动剧烈的三文鱼只买一小块,温和的燕麦买一大袋,但它们给餐桌带来的「风险」一模一样。这样配置最大的好处是:即使有人对三文鱼的预测完全错了,整桌菜依然稳得住。当然,风险平价也留下遗憾——它完全不关心收益。如果你对某些资产有强烈的判断,就需要一个能融合「主厨观点」的模型了。

RCi=wi(Σw)iwTΣwRC_i = \frac{w_i (\boldsymbol{\Sigma} \mathbf{w})_i}{\sqrt{\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}}}
$RC_i$ 表示资产 $i$ 对组合总风险的贡献比例。分子是资产 $i$ 的「边际风险贡献」乘以其权重,分母是组合总风险。让所有资产的 $RC_i$ 相等,就是风险平价。
  1. 边际风险贡献$(\boldsymbol{\Sigma} \mathbf{w})_i$ 是协方差矩阵与权重向量相乘后的第 $i$ 个分量,表示增加一单位资产 $i$ 的权重时组合方差的变化量。它就像「再加一口三文鱼,整体饮食风险会变多少」。
    (Σw)i=∑j=1nσijwj(\boldsymbol{\Sigma} \mathbf{w})_i = \sum_{j=1}^{n} \sigma_{ij} w_j
  2. 权重乘边际贡献$w_i (\boldsymbol{\Sigma} \mathbf{w})_i$ 把资产 $i$ 的持仓量与其边际风险相乘,得到它对总风险的绝对贡献。这相当于「三文鱼买了多少 × 每口三文鱼带来的风险」。
    wi⋅∑j=1nσijwjw_i \cdot \sum_{j=1}^{n} \sigma_{ij} w_j
  3. 组合总风险$\sqrt{\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}}$ 是组合的标准差,作为分母把绝对贡献归一化成比例,方便不同资产之间直接比较。
    σp=wTΣw\sigma_p = \sqrt{\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}}
  4. 等风险配置目标令所有资产的 $RC_i$ 相等,即 $RC_1 = RC_2 = \cdots = RC_n$,解出的权重组合就是风险平价组合。
    RC1=RC2=⋯=RCn=1nRC_1 = RC_2 = \cdots = RC_n = \frac{1}{n}

观点融合:Black-Litterman 模型

家里最有经验的主厨对你有个独特判断:最近猪肉价格有上行迹象,牛肉可能要走弱。但你不确定自己的感觉有几分把握。这时,只按菜市场的均衡价格做菜单,会白白错过机会;完全跟着感觉走,又可能翻车。Black-Litterman 模型解决的正是这个难题——如何把「市场均衡」和「主厨观点」系统性地拧成一股绳。

Black-Litterman 模型由高盛的研究员提出。它先通过「逆优化」从市场市值权重里反推出隐含的均衡收益——这是在没有任何观点时最合理的收益预期,相当于菜市场用真金白银投票形成的价格。然后,把你对某些资产的看法(看涨、看跌或相对强弱)连同信心水平写成数学输入,与均衡收益做一次带权重的融合。

融合的产物是一个「后验收益向量」,它比纯市场均衡更贴近你对未来的判断,又比纯主观预测更稳健。融合的权重由置信度决定:你的观点越有把握,拉动后验收益的力量就越大;市场数据越充分,均衡收益的权重就越高。把后验收益再喂给马科维茨优化器,得到的权重会温和得多,不再出现「全仓押注某只股票」的极端方案。

有了 Black-Litterman 模型,你既能聆听菜市场的声音,也能保留自己的主见,还清楚每个判断的把握有多大。不过,无论用哪个模型,算出的「理想菜单」终究只是纸面方案。现实里还有一堆规矩要遵守:预算上限、家人忌口、冰箱尺寸……这些约束如何揉进优化里,正是下一节的主题。

ΠBL=[(τΣ)−1+PTΩ−1P]−1[(τΣ)−1Π+PTΩ−1Q]\boldsymbol{\Pi}_{BL} = \left[ (\tau \boldsymbol{\Sigma})^{-1} + \mathbf{P}^T \boldsymbol{\Omega}^{-1} \mathbf{P} \right]^{-1} \left[ (\tau \boldsymbol{\Sigma})^{-1} \boldsymbol{\Pi} + \mathbf{P}^T \boldsymbol{\Omega}^{-1} \mathbf{Q} \right]
后验收益 = 市场均衡收益与主观观点的加权平均,权重完全由两边的不确定性决定:越不确定的信息在融合里越没分量,越确定的信息越有发言权。
  1. 市场均衡收益$\boldsymbol{\Pi}$ 是由市场市值权重逆推出来的隐含均衡收益。它是「没有主厨观点时,市场告诉我们的合理美味评分」。
    Π=λΣwmkt\boldsymbol{\Pi} = \lambda \boldsymbol{\Sigma} \mathbf{w}_{mkt}
  2. 观点矩阵与观点向量$\mathbf{P}$ 是观点矩阵,把观点映射到资产上;$\mathbf{Q}$ 是观点向量,写着「我看好猪肉、看空牛肉」这类具体判断。
    Pμ=Q+ε,ε∼N(0,Ω)\mathbf{P} \boldsymbol{\mu} = \mathbf{Q} + \boldsymbol{\varepsilon}, \quad \boldsymbol{\varepsilon} \sim \mathcal{N}(0, \boldsymbol{\Omega})
  3. 观点不确定性$\boldsymbol{\Omega}$ 是观点的协方差矩阵,反映主厨的信心水平——信心越弱,$\boldsymbol{\Omega}$ 越大,观点在融合中被稀释得越厉害。
    Ωkk=1confidencek⋅scale\Omega_{kk} = \frac{1}{confidence_k} \cdot \text{scale}
  4. 缩放因子$\tau$ 是一个很小的缩放参数,表示历史协方差 $\boldsymbol{\Sigma}$ 的相对可信度。它决定了均衡收益这碗「高汤」的浓度。
    τ∈[0.01,0.05]\tau \in [0.01, 0.05]
  5. 融合公式整体中括号里分别是「均衡收益的精度」和「观点的精度」,两项加权的分母是总精度,分子是两项信息的加权和。最终结果是贝叶斯意义下的最优融合。
    ΠBL=均衡信息+观点信息总信息量\boldsymbol{\Pi}_{BL} = \frac{\text{均衡信息} + \text{观点信息}}{\text{总信息量}}

约束求解:让方案落进现实

菜单终于算出来了:鸡胸肉 40%、三文鱼 15%、西兰花 25%、燕麦 20%。但现实马上给你泼冷水:冰箱塞不下这么多三文鱼;长辈不能吃太多海鲜;每周菜钱不能超过 600 块。这些「规矩」就是优化里的约束条件。没有约束的解叫理想解,带上约束的解才叫可行解——能真正落进购物车里的菜单,必然是可行解。

量化投资中的典型约束比比皆是:不能做空(权重非负)、单只股票仓位不能超过组合的 5%、单一行业占比上限、换手率必须低于某个阈值、组合相对基准的跟踪误差不能太大。每加一条约束,可行域就收缩一圈,最优解的位置也随之改变。就像菜单加上「海鲜每周至多一顿」之后,三文鱼的份额不得不让位给鸡肉。

从算法角度看,带约束的组合优化通常写成二次规划(Quadratic Programming, QP)形式。求解方法按约束类型分化:没有不等式约束时可以用拉格朗日乘子法直接求解析解;含不等式约束时用有效集法或内点法迭代求解;在 Python 里一行 scipy.optimize.minimize 就能搞定小规模问题。要特别警惕的是:约束不是越多越好——每加一条都在压缩可行域,加得太多可能导致「无解」,优化器只能两手一摊。

约束让菜单从「理想」变得「可执行」。但故事还没结束——就算你拿着最终菜单去菜市场,也可能发现鸡胸肉限购、三文鱼降价、回家做菜火候没把握好。菜单再好,执行走样,端上桌的味道照样和预期不符。这正是最后要聊的「执行偏差」。

min⁡wwTΣws.t.wTμ≥μ0,    1Tw=1,    0≤w≤c\min_{\mathbf{w}} \mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w} \quad \text{s.t.} \quad \mathbf{w}^T \boldsymbol{\mu} \ge \mu_0, \;\; \mathbf{1}^T \mathbf{w} = 1, \;\; \mathbf{0} \le \mathbf{w} \le \mathbf{c}
公式说明:在「收益不低于底线 $\mu_0$、权重总和为 1、每项权重介于 0 和上限 $\mathbf{c}$ 之间」三条约束下,寻找方差最小的组合。每一条约束都在模仿现实世界的规则。
  1. 收益下限约束$\mathbf{w}^T \boldsymbol{\mu} \ge \mu_0$ 表示组合的预期收益至少要达到某个底线,这是投资人的「口味下限」——不能为了安全什么都不吃。
    ∑i=1nwiμi≥μ0\sum_{i=1}^{n} w_i \mu_i \ge \mu_0
  2. 预算约束$\mathbf{1}^T \mathbf{w} = 1$ 中 $\mathbf{1}$ 是全 1 向量,该式等价于所有权重之和为 1,即资金全部投入使用,不允许大量闲置。
    ∑i=1nwi=1\sum_{i=1}^{n} w_i = 1
  3. 权重上下界$\mathbf{0} \le \mathbf{w} \le \mathbf{c}$ 每条权重不能为负(禁止做空),同时单资产权重不能超过上限 $c_i$(防止鸡蛋全放一个篮子)。
    0≤wi≤ci,i=1,2,⋯ ,n0 \le w_i \le c_i, \quad i = 1, 2, \cdots, n
  4. 数值求解这是一个凸二次规划,局部最优就是全局最优。内点法、有效集法等算法都可在多项式时间内求得精确解。
    QP:min⁡w12wTQw+qTws.t.Aw≤b\text{QP}: \quad \min_{\mathbf{w}} \frac{1}{2} \mathbf{w}^T \mathbf{Q} \mathbf{w} + \mathbf{q}^T \mathbf{w} \quad \text{s.t.} \quad \mathbf{A} \mathbf{w} \le \mathbf{b}

执行校正:从纸面到实盘

周日你拿着精心计算的菜单去采购,菜市场马上给你上了一课:鸡胸肉限购,只买到计划量的八成;三文鱼意外降价,你忍不住多买了半斤。回家做饭,一道菜火候过了,一道菜盐放多了。最终端上桌的晚餐,和你在纸上规划的那顿已经不是同一顿饭了。量化交易里,从「理论组合」到「实际持仓」的距离,就是执行偏差。

执行偏差的来源主要有三:第一是交易成本——每次调仓都要支付手续费和冲击成本,权重动得越猛,成本越昂贵;第二是预测误差——模型里的预期收益与未来真实值之间总有差距,市场会用现实教育每个模型;第三是随机冲击——建仓过程本身就在影响价格,实际成交价往往比决策价更差。这些偏差叠加起来,会让实际收益显著低于纸面收益。

为了把偏差压到最小,量化团队通常三管齐下。第一,在优化目标里直接加入交易成本惩罚项,让模型自己学会「少折腾」;第二,设置换手率约束,限制每次调仓的总变动幅度,相当于规定「一周最多大改一次菜单」;第三,建立定期再平衡机制,比如每月固定一天把实际权重拉回目标附近,而不是每天盯着行情频繁操作。跟踪误差则像一个标尺,衡量实际组合相对业绩基准的偏离程度,是执行质量的核心指标。

一份好的菜单只是起点,采购、下厨、上桌的每个环节都可能导致味道跑偏。优秀的量化团队从不天真地认为「模型算出什么就能赚到什么」,而是不断测量偏差、优化执行、定期再平衡——就像一位真正的大厨,永远根据火候和食材状态微调做法。这,才是组合优化从纸面走向实战的完整闭环。

ΔR=Rtarget−Ractual=wT(μ−μ^)−ctrans⋅∥w−w0∥\Delta R = R_{target} - R_{actual} = \mathbf{w}^T (\boldsymbol{\mu} - \hat{\boldsymbol{\mu}}) - c_{trans} \cdot \|\mathbf{w} - \mathbf{w}_0\|
理论收益与实际收益的差,由两块构成:一块是「预期没猜对」的损失,另一块是「调仓换手」的交易成本。两者共同决定了执行偏差的大小。
  1. 目标与实际收益差$\Delta R$ 是组合理论收益与实盘收益之间的缺口,它直接度量了「纸面富」与「现实富」之间的距离。
    ΔR=Rtarget−Ractual\Delta R = R_{target} - R_{actual}
  2. 预期误差项$\mathbf{w}^T (\boldsymbol{\mu} - \hat{\boldsymbol{\mu}})$ 表示模型输入的预期收益 $\boldsymbol{\mu}$ 与市场真实收益 $\hat{\boldsymbol{\mu}}$ 之间的偏差,按权重加权后就是预测失误带来的损失。
    wT(μ−μ^)=∑i=1nwi(μi−μ^i)\mathbf{w}^T (\boldsymbol{\mu} - \hat{\boldsymbol{\mu}}) = \sum_{i=1}^{n} w_i (\mu_i - \hat{\mu}_i)
  3. 交易成本项$c_{trans} \cdot \|\mathbf{w} - \mathbf{w}_0\|$ 是换手量乘以单位交易成本。$\|\mathbf{w} - \mathbf{w}_0\|$ 表示目标权重与当前权重的差距,差距越大,调仓越贵。
    cost=ctrans⋅∑i=1n∣wi−w0,i∣\text{cost} = c_{trans} \cdot \sum_{i=1}^{n} |w_i - w_{0,i}|
  4. 整体平衡把两项放在同一公式里,揭示了量化投资的本质——不是找到最优权重就结束,而是在「贴近目标」与「节省成本」之间走钢丝。
    min⁡  (预测损失+换手成本)\min \; \big( \text{预测损失} + \text{换手成本} \big)

AI 应用场景

智能投顾个性化资产配置

阶段:模型决策

解决的问题:传统理财顾问只服务高净值人群,普通用户很难获得科学的资产配置建议。AI 投顾用组合优化模型,根据用户的风险测评自动算出专属权重,把专业配置服务成本降到几乎为零。

具体案例:某互联网券商 App 让用户完成 10 道风险偏好问卷,后台根据评分在有效前沿上选取对应风险等级的组合,自动生成「稳健型」「进取型」等配置方案,并每月自动再平衡。

养老金与保险资金风险预算管理

阶段:数据建模

解决的问题:保险资金体量巨大且风险容忍度极低,用马科维茨优化器容易因参数误差产生极端仓位;风险平价天然分散风险,不需要精准的收益预测,适合长期资金。

具体案例:某养老基金把国内股票、债券、黄金、商品四类资产纳入风险平价框架,按「风险贡献相等」原则动态再平衡。在市场大幅波动时,该组合的回撤显著小于等权基准,守住了养老钱的底线。

量化基金观点融合调仓

阶段:策略生成

解决的问题:纯数据驱动的均值-方差模型对收益预测太敏感,而基金经理的深度研究观点又难以量化入模。Black-Litterman 模型让观点变成标准输入,与市场均衡收益科学融合。

具体案例:某量化团队每周把首席经济学家的宏观判断(如「未来一个季度看好成长股、看空周期股」)输入 BL 模型,输出更新后的目标权重,并自动驱动交易系统完成调仓。

Python 演示

python51 行
# -*- coding: utf-8 -*-"""Markowitz mean-variance portfolio optimization demo."""import numpy as np # Three assets: expected return, volatility, correlationmu = np.array([0.12, 0.08, 0.05])vol = np.array([0.25, 0.15, 0.08])corr = np.array([[1.0, 0.3, -0.1],                 [0.3, 1.0, 0.2],                 [-0.1, 0.2, 1.0]])cov = np.outer(vol, vol) * corr def port_return(w):    # Portfolio return = weighted sum of asset returns    return w @ mu def port_risk(w):    # Portfolio risk = sqrt(w^T * cov * w)    return np.sqrt(w @ cov @ w) def random_weights(num):    # Generate random non-negative weights that sum to 1    return np.random.dirichlet(np.ones(3), size=num) def frontier_weight(target_r):    # Lagrange multiplier solution for min variance at target return    n = len(mu)    ones = np.ones((n, 1))    A = np.block([        [cov, -mu.reshape(-1, 1), -ones],        [mu.reshape(1, -1), np.zeros((1, 1)), np.zeros((1, 1))],        [np.ones((1, n)), np.zeros((1, 1)), np.zeros((1, 1))]    ])    b = np.concatenate([np.zeros(n), [target_r], [1.0]])    x = np.linalg.solve(A, b)    return x[:n] if __name__ == "__main__":    ws = random_weights(2000)    points = [(port_risk(w), port_return(w)) for w in ws]    frontier = []    for tr in np.linspace(0.05, 0.12, 20):        try:            w = frontier_weight(tr)            frontier.append((port_risk(w), port_return(w), w))        except np.linalg.LinAlgError:            pass    print("Sampled points:", len(points))    print("Frontier points:", len(frontier))    for v, r, w in frontier[::4]:        print("risk=%.4f ret=%.4f weights=%s" % (v, r, np.round(w, 3)))
目的:用 numpy 实现马科维茨均值-方差优化,生成随机组合散点,并通过拉格朗日乘子法计算给定目标收益下的最小方差权重,从而描出有效前沿。
  1. mu = np.array([0.12, 0.08, 0.05])三只资产的预期收益,相当于食材的美味评分。
  2. cov = np.outer(vol, vol) * corr由波动率和相关系数构造协方差矩阵,描述资产之间的联动关系。
  3. return w @ mu组合预期收益等于权重向量与收益向量的内积。
  4. return np.sqrt(w @ cov @ w)组合风险是二次型开平方,体现分散化效应。
  5. np.random.dirichlet(np.ones(3), size=num)生成一组随机非负权重,总和自动为 1,用来模拟各种「随机菜单」。
  6. A = np.block([...])构造拉格朗日乘子法的增广矩阵,把带约束优化变成线性方程组。
  7. x = np.linalg.solve(A, b)求解线性方程组,得到最小方差权重和两个拉格朗日乘子。
  8. frontier.append((port_risk(w), port_return(w), w))收集前沿上的风险和收益点,用于绘图或分析。

常见误区

误区很多人以为风险平价就是把每类资产平均分钱,比如买了 5 只股票就每只买 20%,买 4 类资产就每类 25%。

正解风险平价追求的是「每类资产对组合总风险的贡献相等」,而不是资金分配相等。波动大的资产在等权配置中会默默占据大部分风险,风险平价会压低它的权重、提高稳健资产的仓位。用菜单打比方:等权是每种食材买一样多,风险平价是每种食材带来的「饮食风险」一样大——所以菠菜买一大筐、帝王蟹只买一只,很合理。

为何常见:名字里带「平均」二字,加上很多科普图用均匀扇区示意,让人直觉地把「均衡」误解为「平均」。

误区觉得只要算出有效前沿,照着上面的点买就行,模型给什么权重就买什么权重,买入后就能稳定赚到那条曲线上的收益。

正解有效前沿建立在预期收益和协方差的估计之上,参数一错,前沿全错;而且它天然忽略了交易成本、流动性和持仓限制。华尔街的实践是先用 Black-Litterman 修正收益输入,再叠加约束和成本惩罚,最后才能交给交易系统。纸面上的前沿只是「导航地图」,不是「自动驾驶方向盘」。

为何常见:教材里的前沿曲线画得太完美,让人误以为它是可以随手点选的高德地图,而忘了地图背后是充满噪声的估计。

误区以为 BL 模型融合了「内幕观点」,应该天然获得超额收益,模型越高级,赚钱越稳。

正解BL 只是把观点融入得「更聪明」的框架,观点的质量决定 Alpha 的有无。如果主厨对食材的判断本身是错的,融合手法再精妙,菜也不会变好吃。BL 的真正价值是让配置更稳健、避免极端权重,而不是凭空创造收益。市场是称重机,模型是秤,秤再准也改变不了物体的重量。

为何常见:把「更好的信息处理工具」误当成「稳赚的印钞机」,低估了投资观点本身的重要性。

误区觉得约束越贴近真实世界就越安全,于是把能做空的限制、行业上限、个股上限、流动性约束、换手率约束一口气全部加上。

正解约束过多会严重收缩可行域,轻则让最优解被完全卡死,重则直接「无解」;更隐蔽的是,约束会放大参数敏感度,让解在约束边界上剧烈跳动。合理做法是只加对风险有本质影响的少数硬约束(非负、持仓上限、换手率),其余用惩罚项软性处理。约束像菜谱上的忌口,太少会翻车,太多就无菜可做。

为何常见:人的直觉是「限制越多越安全」,却忽略了优化理论中可行域与最优解之间的结构性关系。

误区回测显示组合年化收益 15%,就觉得实盘也应该赚到 15%,赚不到就是模型有问题。

正解模型收益是理想毛收益,实盘还要扣除交易成本、冲击成本、延迟成本,而且模型参数随时间老化,市场结构也在变化。量化团队通常用「执行偏差」指标持续监控实际与理论的差距,并定期再平衡校准。就像菜谱的热量算得再精确,实际出锅时油多一勺、盐少一撮,热量都不再是纸上那个数。

为何常见:回测框架常常忽略滑点和交易成本,给人制造了「生动但骗人」的模拟盘幻觉。

面试题

Q1. 马科维茨组合优化理论的核心产出是什么?

单选题 · easy

  • A.有效前沿← 正确答案
  • B.市场时机
  • C.技术指标
  • D.交易算法

答案:A。马科维茨均值-方差框架产出一系列帕累托最优组合,它们在风险-收益平面上连成有效前沿。市场时机、技术指标和交易算法都不是该理论的直接产物。

Q2. 风险平价模型的核心目标是什么?

单选题 · easy

  • A.等权重配置
  • B.等风险贡献← 正确答案
  • C.最大化收益
  • D.最小化成本

答案:B。风险平价追求每类资产对组合总风险的贡献相等,而不是资金等分,也不追求收益最大化或成本最小化。

Q3. 有效前沿上的组合具有哪些特征?

多选题 · mid

  • A.相同风险下收益最高← 正确答案
  • B.相同收益下风险最低← 正确答案
  • C.所有组合中风险最低
  • D.风险收益比率最大

答案:AB。前沿上的点都是帕累托最优:给定风险水平收益最高,或给定收益水平风险最低。C 只对应最小方差组合这个特例,D 描述的是夏普比率最大的切点组合,都不是前沿上每个点的共性特征。

Q4. Black-Litterman 模型相比马科维茨的突出优势是什么?

单选题 · mid

  • A.融合主观观点← 正确答案
  • B.提高计算速度
  • C.消除所有风险
  • D.不需要任何数据

答案:A。BL 模型把市场均衡收益与投资者主观观点按置信度加权融合,解决了马科维茨模型对收益输入过度敏感的问题;它仍然需要数据,也不消除风险,更不能缩短计算时间。

Q5. 马科维茨模型的标准优化目标是什么?

单选题 · hard

  • A.给定收益下最小化风险← 正确答案
  • B.直接最大化组合收益
  • C.最小化所有资产波动率
  • D.找一个收益最高的单一资产

答案:A。标准形式是在目标收益约束和权重和约束下最小化组合方差。B 忽略了风险,C 的对象是单个资产而非组合,D 与分散化思想背道而驰。

Q6. 添加「禁止做空」约束会带来什么影响?

单选题 · mid

  • A.缩小可行解搜索范围← 正确答案
  • B.一定会提高组合收益
  • C.一定降低组合风险
  • D.对最优解没有任何影响

答案:A。非负权重约束把可行域限制在所有权重非负的子空间,会改变最优解的位置;但它不保证收益更高、风险更低,约束只能缩小可行域,不可能扩大。

Q7. 组合再平衡的主要目的是什么?

单选题 · easy

  • A.维持目标权重← 正确答案
  • B.增加交易频率
  • C.提高短期收益
  • D.减少资产种类

答案:A。市场涨跌会让实际权重偏离目标权重,组合的风险属性随之漂移;定期再平衡把实际权重拉回目标附近,让风险敞口重新回到设计好的比例,而不是追逐短期利润或频繁交易。

Q8. 组合优化的基本要素有哪些?

多选题 · mid

  • A.预期收益估计← 正确答案
  • B.风险协方差矩阵← 正确答案
  • C.约束条件设置← 正确答案
  • D.行情展示界面

答案:ABC。收益预期决定优化方向,协方差矩阵度量组合风险,约束条件圈定可行域,三者是组合优化的标准输入。行情展示界面只是工程前端,不属于优化模型要素。

Q9. 理论最优组合在实际交易中发生偏差的原因有哪些?

多选题 · hard

  • A.参数估计存在误差← 正确答案
  • B.交易成本不可忽略← 正确答案
  • C.市场数据全部精确
  • D.模型完全贴近现实

答案:AB。实际收益与理论收益的差距主要来自预期参数与真实实现不符,以及调仓时付出的手续费和冲击成本。C、D 都是理想化假设,在真实市场中并不成立。

Q10. 风险平价中资产 i 的风险贡献公式的分母是什么?

单选题 · extreme

  • A.资产 i 的波动率
  • B.组合总的风险← 正确答案
  • C.组合总收益的平方
  • D.资产收益率的协方差

答案:B。$RC_i = \dfrac{w_i (\boldsymbol{\Sigma} \mathbf{w})_i}{\sqrt{\mathbf{w}^T \boldsymbol{\Sigma} \mathbf{w}}}$,分母是组合总风险(标准差),用于把每个资产的贡献归一化为占比。A 是单个资产属性,C 与风险维度无关,D 只是分子中的局部项。