我有以下日期列表
list_of_dates <- as.Date(c("2002-07-08",
"2002-07-09",
"2002-07-10",
"2002-07-11"))
和下面的xts
对象
> tsmom
_3 _6 _9 _12
2002-07-05 -0.08097534 -0.04842372 -0.2072821 -0.2794321
2002-07-08 -0.07335450 -0.04190741 -0.1987623 -0.2696833
2002-07-09 -0.05530222 -0.03595881 -0.2095236 -0.2617205
2002-07-10 -0.06106435 -0.03665648 -0.2147289 -0.2674964
2002-07-11 -0.07711360 -0.03323385 -0.2231438 -0.2835645
>
我正在尝试创建一个for循环,该循环首先计算从xts
对象(2002-07-05
)的开始日期到list_of_dates
中的日期的协方差矩阵。然后,这些协方差矩阵将在另一个函数中使用,并将输出存储在矩阵中:
Optimal_weights <- matrix(data = NA, nrow = length(list_of_dates), ncol = 4,
dimnames = list(list_of_dates,c("C3", "C6", "C9", "C12")))
但是我不确定如何在开始日期和日期列表之间进行子集化。通常,当有两个日期和xts
对象时,我会使用"/2002-07-08"
,但不适用于list_of_dates[[i]]
。我也尝试插入
subset(tsmom, "2002-07-05" & list_of_dates[[i]])
这是我的for-loop票价:
for (i in 1:length(list_of_dates)) {
sigma[[i]] <- lwShrink(tsmom["/list_of_dates[[i]]"])$cov
Optimal_weights[[i,]] <- optimalPortfolio(Sigma = sigma[[i]],
control = list(type = 'maxdiv', constraint = 'lo'))
}
解决方案
我找到了一个解决方案,方法是使用tsmom[paste("/",list_of_dates[i],sep="")]
并更改循环,使其变为:
for (i in 1:length(list_of_dates)) {
Optimal_weights[i,] <- optimalPortfolio(Sigma = lwShrink(tsmom[paste("/",list_of_dates[i],sep="")])$cov,
control = list(type = 'maxdiv', constraint = 'lo'))
}