R 语言 金融风险管理 投资组合马科维茨模型 有效边界计算

R阿木 发布于 1 天前 3 次阅读


R 语言金融风险管理:投资组合马科维茨模型(有效边界计算)

在金融风险管理领域,投资组合管理是一个至关重要的环节。马科维茨模型(Mean-Variance Model)是投资组合理论的基础,它通过考虑投资组合的预期收益率和风险(通常用方差表示)来优化投资组合。本文将使用 R 语言实现马科维茨模型,并计算投资组合的有效边界。

马科维茨模型概述

马科维茨模型的核心思想是,投资者在追求收益最大化的也会关注风险。模型假设投资者是风险厌恶的,即他们更倾向于选择风险较低的投资组合。有效边界是指所有风险与收益权衡最优的投资组合集合。

模型假设

1. 投资者追求收益最大化,同时厌恶风险。
2. 投资组合的收益和风险可以用预期收益率和方差来衡量。
3. 投资者可以自由选择投资于不同的资产。

模型公式

马科维茨模型的目标函数为:

[ max_{w} E(R_p) - lambda sigma_p^2 ]

其中:
- ( E(R_p) ) 是投资组合的预期收益率。
- ( sigma_p^2 ) 是投资组合的方差。
- ( lambda ) 是风险厌恶系数。

投资组合的预期收益率和方差可以表示为:

[ E(R_p) = sum_{i=1}^{n} w_i E(R_i) ]
[ sigma_p^2 = sum_{i=1}^{n} w_i^2 sigma_i^2 + 2 sum_{i=1}^{n} sum_{j=i+1}^{n} w_i w_j sigma_{ij} ]

其中:
- ( n ) 是资产数量。
- ( w_i ) 是资产 ( i ) 的权重。
- ( E(R_i) ) 是资产 ( i ) 的预期收益率。
- ( sigma_i^2 ) 是资产 ( i ) 的方差。
- ( sigma_{ij} ) 是资产 ( i ) 和资产 ( j ) 的协方差。

R 语言实现

下面是使用 R 语言实现马科维茨模型和计算有效边界的代码。

r
加载必要的库
library(portfolio)
library(PerformanceAnalytics)

假设我们有以下资产的历史收益率
returns <- matrix(c(0.12, 0.10, 0.08, 0.05, 0.03,
0.15, 0.12, 0.10, 0.08, 0.06,
0.10, 0.08, 0.06, 0.04, 0.02,
0.08, 0.06, 0.04, 0.02, 0.01,
0.06, 0.04, 0.02, 0.01, 0.00),
nrow = 5, byrow = TRUE)

计算资产收益率的标准差和协方差矩阵
std_dev <- apply(returns, 1, sd)
cov_matrix <- cov(returns)

设置风险厌恶系数
lambda <- 1

计算有效边界
portfolios <- optimize_portfolio(returns, cov_matrix, method = "markowitz", risk_free_rate = 0, expected_return = lambda std_dev^2)

绘制有效边界图
plot(portfolios@expected_returns, portfolios@risk, type = "b", xlab = "Expected Return", ylab = "Risk (Standard Deviation)", main = "Efficient Frontier")

标记最优投资组合
points(portfolios@expected_returns[which.max(portfolios@risk)], portfolios@risk[which.max(portfolios@risk)], col = "red", pch = 4)

结论

本文使用 R 语言实现了马科维茨模型,并计算了投资组合的有效边界。通过调整风险厌恶系数,投资者可以找到适合自己的投资组合。在实际应用中,投资者需要根据市场情况和自身风险偏好来选择合适的资产和权重。

请注意,本文提供的代码是一个简化的示例,实际应用中可能需要考虑更多的因素,如交易成本、流动性、市场冲击等。历史收益率并不总是未来表现的可靠指标,因此在实际操作中应谨慎使用。