开始使用免费开始使用

使用目标收益率网格计算有效前沿

如您所见,一种计算有效前沿的方法是:先定义一组目标收益率的网格,然后对每个目标收益率,找到在方差尽可能小的情况下,期望收益等于该目标收益率的投资组合。

那么,怎样的目标收益率网格才合理呢?您将把最大目标收益率设为各只股票平均收益的最大值。理想情况下,最小目标收益率应设为最小方差组合的收益。不过由于您尚不知道该最小方差组合的收益,您将用所有股票的平均收益中的最小值来创建网格。

在本练习中,您将使用 for 循环计算潜在投资组合的均值、标准差和权重组成的网格。

本练习是课程的一部分

R 中的投资组合分析入门

查看课程

练习说明

  • 计算 returns 的列均值(使用 colMeans()),命名为 stockmu
  • 创建一个长度为 50 的序列(seq()),从无风险利率 1% 开始,结束于 stockmu 的最大值,命名为 grid
  • 使用 rep() 初始化两个与 grid 长度相同的空向量,用于存储投资组合的均值和标准差。命名为 vpmvpsd
  • 初始化一个 50 行 30 列的空矩阵,命名为 mweights。可使用 matrix() 函数完成。
  • 创建一个 for 循环,从 grid 的第一个值开始到最后一个值结束。for 循环应基于 returns 并以 grid 的目标收益率创建名为 opt 的投资组合。
  • 每次迭代中,for 循环应将 opt 中对应的值填入向量 vpm$pm)、vpsd$ps)。
  • 将投资组合权重逐行存入 mweights$pw)。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Calculate each stocks mean returns


# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)

# Create empty vectors to store means and deviations
vpm <- vpsd <- 

# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)

# Create your for loop
for(i in 1:length(grid)) {
  opt <- portfolio.optim(x = ___, pm = ___[i])
  vpm[i] <- ___$__
  vpsd[i] <- ___$__
  mweights[i, ] <- ___$__
}
编辑并运行代码