我的脚本从5只股票中生成10个3股票投资组合,并将它们组合在一个列表中。我想最终分析每个投资组合(累积回报,方差等),我相当确定这个列表不是可行的。
我知道如何生成单独的数据帧并在没有迭代的情况下运行分析,但这将是繁琐的,但我不知道如何使用迭代来构建此结构。我曾考虑创建一个空的数据框,但不确定如何构造它。如有任何建议或建议,欢迎光临。
library(quantmod)
startDate = '2016-03-10'
endDate = '2017-03-10'
# Download 1-yr data
stocks <- suppressWarnings(getSymbols(c("CIG",
"SO", "CNP", "NRG", "AES"),from=startDate, to=endDate))
# combine adjusted close data
prices <- merge.zoo(CIG[,6], SO[,6], CNP[,6], NRG[,6], AES[,6])
# Calculate Monthly returns
mo_end_pxs <- prices[endpoints(prices,on='months'),] # get monthly endpoints
monthly_ret <- ROC(mo_end_pxs,type='discrete') # calculate monthly returns
monthly_ret <- monthly_ret[!is.na(monthly_ret)] # remove NA from first month
colnames(monthly_ret) <- c("CIG", "SO", "CNP", "NRG", "AES")
# generate all possible portfolios
poss_ports <- combn(stocks,3)
portfolios <- list()
for (i in 1:ncol(poss_ports)){
portfolios[[i]] <- monthly_ret[,poss_ports[,i]]
}发布于 2017-03-09 06:32:26
我绝对会把它当做一个列表。
您可以简单地访问它:portfolios[1]
[[1]]
CIG SO CNP
2016-04-29 -0.13274370 -0.0315097796 0.025334600
2016-05-31 -0.20021441 -0.0020678714 0.062807886
2016-06-30 0.48322121 0.0847492493 0.065246332
2016-07-29 0.25339362 -0.0024240452 -0.003333349
2016-08-31 -0.03610090 -0.0302915203 -0.049819374
2016-09-30 -0.02996270 -0.0005845002 0.033822879
2016-10-31 0.16602306 0.0052631794 -0.018510575
2016-11-30 -0.25496674 -0.0814869561 0.058405282
2016-12-30 0.05517647 0.0506193682 0.032690654
2017-01-31 0.24561404 0.0048790762 0.063717516
2017-02-28 0.16197183 0.0401680053 0.052930938
2017-03-07 0.12121212 -0.0082644235 0.024890190也可以在下面添加特定的查询字段进行查询:
portfolios[[1]][as.Date("2016-05-31")]
CIG SO CNP
2016-05-31 -0.2002144 -0.002067871 0.06280789或者,您可以稍后将它们拆分成一个数据帧进行比较:
y<-as.data.frame(portfolios[3])
str(y)
'data.frame': 12 obs. of 3 variables:
$ CIG: num -0.1327 -0.2002 0.4832 0.2534 -0.0361 ...
$ SO : num -0.03151 -0.00207 0.08475 -0.00242 -0.03029 ...
$ AES: num -0.04501 -0.00627 0.12534 -0.00154 -0.02267 ...如果您将其留在列表中,则可以要求它使用for循环遍历列表并稍后保存到数据帧中,或者直接访问列总和,或者比较每个列表元素的日期。除非您有特定的未来需求,否则这似乎是一种合理的方式来维护数据,而不会产生太多开销。
https://stackoverflow.com/questions/42681628
复制相似问题