首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环函数& quantmod

循环函数& quantmod
EN

Stack Overflow用户
提问于 2017-02-08 03:00:46
回答 1查看 439关注 0票数 1

Hy社区,这是我的代码。它运行时没有任何错误或警告。顺便说一句,如果你看一下x.df (最终数据库),就会发现SMA & Bollinger band列出了问题。它们都是"NA“填充的。然后,BBands在合并后删除一些列。出什么事了?

代码语言:javascript
运行
复制
library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in
tickers <- c("AAPL","GOOG","YHOO","FB") # choose Symbols
start_date <- as.Date("2014-01-01") #Set start date
getSymbols(tickers, src="yahoo", env=stockData, from=start_date) # get data
x <- list() 

# loop on tickers
for (i in 1:length(tickers)) {
x[[i]] <- get(tickers[i], pos=stockData)   # get data from stockData environment  
colnames(x[[i]]) <- c("Open", "High", "Low", "Close","Volume", "Adjusted")  # rename Header for all tables in list
x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100   # Daily gain loss percentage
SMA.n10 <- SMA(x[[i]][,4],n = 10)  # Calculate moving averages (MA) on "Close Price" <-column(4)
BBands<- BBands(x[[i]][,2:4])
x[[i]]$Symbol<- 0   # create "0" vector for Symbol name
x[[i]]$Symbol<- tickers[[i]]  # add Symbol name
x[[i]]<-data.frame(x[[i]],SMA.n10[[i]],BBands[[i]])  # merge data
}
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe

谢谢

编辑:我的目标是获得包含以下列的单个数据帧(x.df):

"Open","High","Low","Close","Volume","Adjusted",Symbol,"SMA10","dn","mavg","up","pctB“。

但是,如果运行代码,您可以看到SMA列上的NA值。ThentThere没有关于"dn","mavg","up","pctB“(布林线带值)的踪迹。

EN

Stack Overflow用户

回答已采纳

发布于 2017-02-08 05:34:52

这会纠正代码中的一些错误:

代码语言:javascript
运行
复制
x <- list() 

# loop on tickers
for (i in 1:length(tickers)) {
    x[[i]] <- get(tickers[i], pos=stockData)   # get data from stockData environment  
    colnames(x[[i]]) <- c("Open", "High", "Low", "Close","Volume", "Adjusted")  # rename Header for all tables in list
    x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100   # Daily gain loss percentage
    SMA.n10 <- SMA(x[[i]][,4],n = 10)  # Calculate moving averages (MA) on "Close Price" <-column(4)
    BBands<- BBands(x[[i]][,2:4])
    x[[i]]$Symbol<- 0   # create "0" vector for Symbol name
    x[[i]]$Symbol<- tickers[i]  # add Symbol name
    x[[i]]<-data.frame(x[[i]], coredata(SMA.n10), coredata(BBands))  # merge data
}
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe

您应该了解使用[][[]]设置向量、列表、数据帧的子集之间的区别。我推荐这个资源来了解更多信息:http://adv-r.had.co.nz/Subsetting.html

coredata(SMA.n10)返回底层的值矩阵,如果提供NROW(SMA.n10) == NROW(x[[i]]),而SMA.n10[[i]]返回NA,则该矩阵的工作方式与预期相同,并且在R中使用循环规则将在data.frame(.....)中创建一列NA值,而不是您所期望的。

如果您想在x.df中包含正确的“时间/日期”列,这样的代码是安排数据的更好方法(使用x.df的行名来保存时间,就像您在代码中所做的那样,在跨符号绑定数据时会给出无意义的值):

代码语言:javascript
运行
复制
x <- list() 

# loop on tickers
for (i in 1:length(tickers)) {
    tmp <- get(tickers[i], pos=stockData)   # get data from stockData environment  
    colnames(tmp) <- c("Open", "High", "Low", "Close","Volume", "Adjusted")  # rename Header for all tables in list
    tmp$gl <-((Cl(tmp)-Op(tmp))/Op(tmp))*100   # Daily gain loss percentage
    SMA.n10 <- SMA(tmp[,4],n = 10)  # Calculate moving averages (MA) on "Close Price" <-column(4)
    BBands<- BBands(tmp[,2:4])
    tmp <- merge(tmp, SMA.n10, BBands)

    x[[i]]<-data.frame("time" = index(tmp), coredata(tmp), "Symbol" = tickers[i])  # merge data

}
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42097817

复制
相关文章

相似问题

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