使用目标收益率网格计算有效前沿
如您所见,一种计算有效前沿的方法是:先定义一组目标收益率的网格,然后对每个目标收益率,找到在方差尽可能小的情况下,期望收益等于该目标收益率的投资组合。
那么,怎样的目标收益率网格才合理呢?您将把最大目标收益率设为各只股票平均收益的最大值。理想情况下,最小目标收益率应设为最小方差组合的收益。不过由于您尚不知道该最小方差组合的收益,您将用所有股票的平均收益中的最小值来创建网格。
在本练习中,您将使用 for 循环计算潜在投资组合的均值、标准差和权重组成的网格。
本练习是课程的一部分
R 中的投资组合分析入门
练习说明
- 计算
returns的列均值(使用colMeans()),命名为stockmu。 - 创建一个长度为 50 的序列(seq()),从无风险利率 1% 开始,结束于
stockmu的最大值,命名为grid。 - 使用 rep() 初始化两个与
grid长度相同的空向量,用于存储投资组合的均值和标准差。命名为vpm和vpsd。 - 初始化一个 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, ] <- ___$__
}