第二章 投资组合理论回顾: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图,把本章的核心逻辑串起来。你一看就明白:
2.5 实际应用中的注意事项
理论讲完了,咱们聊聊实战中容易踩的坑。
| 问题 | 原因 | 我的建议 |
|---|---|---|
| 输入参数不稳定 | 预期收益率和协方差矩阵随时间变化 | 使用滚动窗口估计,定期重新优化 |
| 优化结果过于集中 | 样本内数据导致过度拟合 | 加入约束条件,比如单资产权重上限 |
| 忽略交易成本 | 频繁调仓会吃掉收益 | 在优化目标中加入惩罚项 |
重要提醒:Markowitz模型对输入参数极其敏感。我曾经用过去3年的数据做优化,结果下个月组合就崩了——因为市场风格变了。所以,永远不要迷信历史数据。建议结合基本面分析或另类数据来修正预期。
好了,这一章就到这里。记住:有效前沿和CML是量化投资的基础工具,但工具再好,也得看你怎么用。下一章咱们会动手用Python实现完整的优化流程——到时候你就知道,理论落地有多刺激了。
公众号:蓝海资料掘金营,微信deep3321