首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R-存储zoo/数据框架(股票投资组合)的最佳方式,以便使用迭代进行后续分析?

R-存储zoo/数据框架(股票投资组合)的最佳方式,以便使用迭代进行后续分析?
EN

Stack Overflow用户
提问于 2017-03-09 04:47:10
回答 1查看 65关注 0票数 0

我的脚本从5只股票中生成10个3股票投资组合,并将它们组合在一个列表中。我想最终分析每个投资组合(累积回报,方差等),我相当确定这个列表不是可行的。

我知道如何生成单独的数据帧并在没有迭代的情况下运行分析,但这将是繁琐的,但我不知道如何使用迭代来构建此结构。我曾考虑创建一个空的数据框,但不确定如何构造它。如有任何建议或建议,欢迎光临。

代码语言:javascript
运行
复制
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]]
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-09 06:32:26

我绝对会把它当做一个列表。

您可以简单地访问它:portfolios[1]

代码语言:javascript
运行
复制
    [[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

也可以在下面添加特定的查询字段进行查询:

代码语言:javascript
运行
复制
   portfolios[[1]][as.Date("2016-05-31")]

                  CIG           SO        CNP
2016-05-31 -0.2002144 -0.002067871 0.06280789

或者,您可以稍后将它们拆分成一个数据帧进行比较:

代码语言:javascript
运行
复制
    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循环遍历列表并稍后保存到数据帧中,或者直接访问列总和,或者比较每个列表元素的日期。除非您有特定的未来需求,否则这似乎是一种合理的方式来维护数据,而不会产生太多开销。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42681628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档