halo 的技术博客

返回

现代投资组合理论的基石#

1952年,哈里·马科维茨(Harry Markowitz)在《金融杂志》发表了题为《投资组合选择》的论文,标志着现代投资组合理论(Modern Portfolio Theory, MPT)的诞生。这一理论彻底改变了投资者对风险和收益的理解,从单一资产分析转向资产配置的系统化方法。

核心思想:分散化降低风险#

马科维茨理论的核心洞察是:投资者应该关注投资组合的整体风险,而非单个资产的风险。通过组合相关性较低甚至负相关的资产,可以在不降低预期收益的情况下降低投资组合的整体风险。

马科维茨均值方差模型示意图

均值方差优化的数学框架#

1. 基本假设#

马科维茨模型基于以下关键假设:

  • 投资者是风险厌恶的:在相同的预期收益下,投资者偏好风险更小的投资组合
  • 收益率服从正态分布:可以用均值和方差完全描述
  • 投资者只关注单一持有期:通常以期望收益率和标准差作为决策依据
  • 市场是有效的:所有投资者都能免费获得相同的信息

2. 数学模型#

对于由 nn 个资产组成的投资组合,定义:

  • wiw_i : 资产 ii 的权重,i=1nwi=1\sum_{i=1}^n w_i = 1
  • μi\mu_i : 资产 ii 的预期收益率
  • σi\sigma_i : 资产 ii 收益率的标准差
  • σij\sigma_{ij} : 资产 iijj 收益率的协方差

投资组合的预期收益率

E(Rp)=i=1nwiμiE(R_p) = \sum_{i=1}^n w_i \mu_i

投资组合的方差

σp2=i=1nj=1nwiwjσij=wTΣw\sigma_p^2 = \sum_{i=1}^n \sum_{j=1}^n w_i w_j \sigma_{ij} = \mathbf{w}^T \Sigma \mathbf{w}

其中 Σ\Sigman×nn \times n 的协方差矩阵。

3. 优化问题#

均值方差优化可以表示为以下数学规划问题:

最小化风险(方差)给定收益目标

minwwTΣws.t.wTμ=μpi=1nwi=1wi0(不允许卖空)\begin{aligned} \min_{\mathbf{w}} \quad & \mathbf{w}^T \Sigma \mathbf{w} \\ \text{s.t.} \quad & \mathbf{w}^T \boldsymbol{\mu} = \mu_p \\ & \sum_{i=1}^n w_i = 1 \\ & w_i \geq 0 \quad (\text{不允许卖空}) \end{aligned}

Python实战:构建均值方差优化模型#

下面用Python完整实现一个均值方差优化系统,使用真实股票数据。

1. 数据准备#

2. 计算期望收益和协方差矩阵#

# 计算年化收益率(假设252个交易日)
annual_factor = 252
mean_returns = returns.mean() * annual_factor
cov_matrix = returns.cov() * annual_factor

# 计算相关系数矩阵
corr_matrix = returns.corr()

print("年化预期收益率:")
print(mean_returns.round(4))
print("\n年化波动率:")
print(np.sqrt(np.diag(cov_matrix)).round(4))
python

3. 投资组合优化函数#

def portfolio_performance(weights, mean_returns, cov_matrix):
    """计算投资组合的收益和风险"""
    returns = np.sum(mean_returns * weights)
    std = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights)))
    return returns, std

def negative_sharpe_ratio(weights, mean_returns, cov_matrix, risk_free_rate=0.03):
    """负夏普比率(用于优化)"""
    p_returns, p_std = portfolio_performance(weights, mean_returns, cov_matrix)
    return -(p_returns - risk_free_rate) / p_std

def portfolio_variance(weights, cov_matrix):
    """投资组合方差"""
    return np.dot(weights.T, np.dot(cov_matrix, weights))
python

4. 约束条件和边界#

# 约束条件:权重之和为1
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})

# 边界条件:不允许卖空(权重在0到1之间)
bounds = tuple((0, 1) for _ in range(len(tickers)))

# 初始猜测:等权重
initial_weights = np.array([1/len(tickers)] * len(tickers))
python

5. 三种优化策略#

(1) 最小化风险(全局最小方差组合)#

(2) 最大化夏普比率#

(3) 给定收益目标下最小化风险#

构建有效前沿#

有效前沿(Efficient Frontier)是均值方差优化的核心概念,表示在给定风险水平下能够获得最大预期收益的所有投资组合。

投资组合有效前沿可视化

实战中的关键问题#

1. 估计误差问题#

均值方差优化对输入参数(预期收益率和协方差矩阵)非常敏感。历史数据估计的参数可能存在较大误差,导致优化结果不稳定。

解决方案

  • 使用收缩估计量(Shrinkage Estimator)改进协方差矩阵估计
  • 使用黑-利特曼(Black-Litterman)模型结合投资者观点
  • 采用稳健优化方法
from sklearn.covariance import LedoitWolf

# 使用Ledoit-Wolf收缩估计
lw = LedoitWolf()
lw.fit(returns)
shrunk_cov = lw.covariance_ * annual_factor

print("原始协方差矩阵条件数:", np.linalg.cond(cov_matrix))
print("收缩后协方差矩阵条件数:", np.linalg.cond(shrunk_cov))
python

2. 卖空限制和权重约束#

实际应用中通常不允许卖空,且可能对单个资产权重设限。

3. 交易成本考虑#

频繁调仓会产生交易成本,应在优化中考虑。

def portfolio_turnover_cost(old_weights, new_weights, transaction_cost_rate=0.001):
    """计算调仓成本"""
    turnover = np.sum(np.abs(new_weights - old_weights))
    cost = turnover * transaction_cost_rate
    return cost

# 示例:从等权重组合调整到最优组合
old_weights = np.array([1/len(tickers)] * len(tickers))
transaction_cost = portfolio_turnover_cost(old_weights, max_sharpe_weights)

print(f"调仓交易成本: {transaction_cost:.4f} ({transaction_cost:.2%})")
print(f"净预期收益率: {max_sharpe_return - transaction_cost:.4f}")
python

绩效评估#

构建投资组合后,需要进行严格的绩效评估。

投资组合累计收益对比

结论与最佳实践#

主要发现#

  1. 分散化价值:通过组合相关性较低的资产,可以显著降低投资组合风险
  2. 风险-收益权衡:有效前沿直观展示了不同风险水平下的最优收益
  3. 参数敏感性:优化结果对预期收益率和协方差估计非常敏感

实战建议#

  1. 使用稳健的估计方法:采用收缩估计量或指数加权协方差矩阵
  2. 考虑实际约束:加入卖空限制、权重上限、交易成本等实际约束
  3. 定期再平衡:设定再平衡频率(如季度或半年),避免过度交易
  4. 结合定性判断:量化模型应作为决策工具,而非完全替代人工判断
  5. 压力测试:使用历史危机时期数据测试投资组合稳健性

局限性#

  1. 正态分布假设:实际收益率往往具有肥尾特征
  2. 静态优化:传统均值方差优化是单期模型,不考虑动态调整
  3. 参数不确定性:历史估计的参数在未来可能失效

完整代码资源#

本文完整Python代码已上传至GitHub,包含:

  • 数据获取模块
  • 均值方差优化核心函数
  • 有效前沿可视化
  • 回测框架
  • 绩效评估报告

通过系统掌握均值方差优化,投资者可以构建更科学、更稳健的投资组合,在控制风险的同时追求长期稳定收益。


参考文献

  1. Markowitz, H. (1952). Portfolio Selection. The Journal of Finance, 7(1), 77-91.
  2. Ledoit, O., & Wolf, M. (2004). Honey, I shrunk the sample covariance matrix. The Journal of Portfolio Management, 30(4), 110-119.
  3. Black, F., & Litterman, R. (1992). Global portfolio optimization. Financial Analysts Journal, 48(5), 28-43.
马科维茨均值方差优化实战:用Python构建高效投资组合
https://blog.halo26812.eu.org/blog/markowitz-portfolio-optimization
Author halo
Published at 2026年6月2日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨