循环函数 & quantmod
Loop function & quantmod
嗨社区,这是我的代码。它 运行 没有错误或警告。
顺便说一下,如果您查看 x.df(最终数据库),SMA 和布林带列有问题。
他们都 "NA" 满了。然后,BBands 在合并后删除一些列。
怎么了?
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",符号,"SMA10","dn","mavg","up","pctB".
但是如果您 运行 代码,您可以在 SMA 列上看到 NA 值。
然后没有关于 "dn"、"mavg"、"up"、"pctB"(布林带值)的踪迹。
这更正了您代码中的一些错误:
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)
returns 值的基础矩阵,它按预期工作提供 NROW(SMA.n10) == NROW(x[[i]])
而 SMA.n10[[i]]
returns NA
,以及R 中的回收规则将在 data.frame(.....)
中创建一列 NA
值,这不是您所期望的。
如果您想在 x.df
中包含正确的 "time/date" 列(使用 x.df
的行名称来保存时间,那么这样的方法是一种更好的数据排列方式,正如您在代码中所做的那样,在跨符号绑定数据时给出无意义的值):
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
嗨社区,这是我的代码。它 运行 没有错误或警告。 顺便说一下,如果您查看 x.df(最终数据库),SMA 和布林带列有问题。 他们都 "NA" 满了。然后,BBands 在合并后删除一些列。 怎么了?
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",符号,"SMA10","dn","mavg","up","pctB".
但是如果您 运行 代码,您可以在 SMA 列上看到 NA 值。 然后没有关于 "dn"、"mavg"、"up"、"pctB"(布林带值)的踪迹。
这更正了您代码中的一些错误:
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)
returns 值的基础矩阵,它按预期工作提供 NROW(SMA.n10) == NROW(x[[i]])
而 SMA.n10[[i]]
returns NA
,以及R 中的回收规则将在 data.frame(.....)
中创建一列 NA
值,这不是您所期望的。
如果您想在 x.df
中包含正确的 "time/date" 列(使用 x.df
的行名称来保存时间,那么这样的方法是一种更好的数据排列方式,正如您在代码中所做的那样,在跨符号绑定数据时给出无意义的值):
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