第二章 投资组合理论回顾:Markowitz均值-方差模型、有效前沿、资本市场线

好,咱们正式开始第二章。说实话,每次讲投资组合理论,我都有点感慨。Markowitz老爷子在1952年提出这套理论时,估计也没想到,它后来成了整个量化金融的基石。我自己刚入行时,第一件事就是啃他的论文——嗯,那会儿还没什么Python,全靠手算协方差矩阵,算得我头皮发麻。

但话说回来,这套理论到今天依然管用。你想想看,它解决了一个核心问题:如何在风险和收益之间做最优权衡。说白了,就是别把所有鸡蛋放在一个篮子里,但具体怎么放,得有个数学依据。

2.1 均值-方差模型的核心思想

Markowitz模型其实就两个输入:预期收益率风险(方差)。它假设投资者都是理性的——想要高收益,但又不喜欢波动。

数学上,一个投资组合的预期收益率是各资产收益率的加权平均:

E(R_p) = Σ w_i * E(R_i)

而组合的方差就没那么简单了:

σ²_p = Σ Σ w_i * w_j * Cov(R_i, R_j)

这里有个关键点:协方差。我在项目中遇到过不少新手,他们以为组合风险就是各资产风险的加权平均——大错特错!实际上,资产之间的相关性才是降低风险的关键。如果两个资产负相关,组合风险会大幅下降。

核心公式:组合方差 = 各资产方差贡献 + 两两协方差贡献

说白了,分散化投资能降低风险,靠的就是资产之间的低相关性甚至负相关性。

2.2 有效前沿的构建

有了均值-方差模型,我们就可以画出有效前沿了。它是一条曲线,代表在给定风险水平下,能获得的最高预期收益率。

我习惯用Python来演示这个过程。咱们先模拟一些数据:

import numpy as np
import matplotlib.pyplot as plt

# 假设有3个资产
returns = np.array([0.12, 0.08, 0.15])  # 预期收益率
cov_matrix = np.array([
    [0.1, 0.02, 0.04],
    [0.02, 0.08, 0.01],
    [0.04, 0.01, 0.12]
])

# 随机生成1000个组合
num_portfolios = 1000
results = np.zeros((3, num_portfolios))

for i in range(num_portfolios):
    weights = np.random.random(3)
    weights /= np.sum(weights)  # 归一化
    
    port_return = np.dot(weights, returns)
    port_vol = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights)))
    
    results[0, i] = port_return
    results[1, i] = port_vol
    results[2, i] = port_return / port_vol  # 夏普比率

# 找出有效前沿上的点
# 按风险排序,取每个风险水平下的最高收益
sorted_idx = np.argsort(results[1, :])
sorted_vol = results[1, sorted_idx]
sorted_ret = results[0, sorted_idx]

# 这里简化处理,实际需要用优化算法

嗯,这里要注意:随机生成组合只是用来可视化,真正找有效前沿需要做二次规划。我早期做项目时,直接用随机模拟去找最优组合,结果发现每次跑出来的前沿都不一样——后来才意识到,必须用优化器。

避坑指南:我曾经用随机模拟代替优化,结果回测时组合表现忽高忽低。后来改用scipy.optimize.minimize,才稳定下来。记住:随机模拟只能看个大概,精确求解必须用优化算法。

2.3 资本市场线(CML)

有效前沿假设投资者只能投资风险资产。但现实中,我们还有无风险资产,比如国债。引入无风险资产后,情况就变了。

资本市场线(CML)是从无风险利率出发,与有效前沿相切的一条直线。切点就是市场组合——理论上,所有理性投资者都应该持有这个组合,然后根据风险偏好,搭配无风险资产。

CML的公式很简单:

E(R_p) = R_f + (E(R_m) - R_f) / σ_m * σ_p

其中R_f是无风险利率,E(R_m)和σ_m是市场组合的预期收益和风险。

我个人的理解是:CML把投资决策分成了两步——先确定市场组合(资产配置),再决定杠杆比例(风险偏好)。这比直接选组合要清晰得多。

关键结论

  • 有效前沿上的所有组合,都是风险资产的最优组合
  • 引入无风险资产后,最优组合变成CML上的点
  • 市场组合是CML与有效前沿的切点

2.4 知识体系结构图

下面我用一张SVG图,把本章的核心逻辑串起来。你一看就明白:

投资组合理论核心逻辑 输入 预期收益率 + 协方差矩阵 均值-方差模型 Markowitz优化 有效前沿 风险-收益曲线 引入无风险资产 R_f(如国债利率) 资本市场线(CML) 市场组合 + 无风险资产配置 图:从均值-方差模型到资本市场线的推导路径

2.5 实际应用中的注意事项

理论讲完了,咱们聊聊实战中容易踩的坑。

问题 原因 我的建议
输入参数不稳定 预期收益率和协方差矩阵随时间变化 使用滚动窗口估计,定期重新优化
优化结果过于集中 样本内数据导致过度拟合 加入约束条件,比如单资产权重上限
忽略交易成本 频繁调仓会吃掉收益 在优化目标中加入惩罚项

重要提醒:Markowitz模型对输入参数极其敏感。我曾经用过去3年的数据做优化,结果下个月组合就崩了——因为市场风格变了。所以,永远不要迷信历史数据。建议结合基本面分析或另类数据来修正预期。

好了,这一章就到这里。记住:有效前沿和CML是量化投资的基础工具,但工具再好,也得看你怎么用。下一章咱们会动手用Python实现完整的优化流程——到时候你就知道,理论落地有多刺激了。


公众号:蓝海资料掘金营,微信deep3321