我是R的初学者,但是我试图使用Quantmod编写一个循环以拉出一系列日期(当前,6个月前,12个月前,18个月前)的调整后的股价。我想逐渐了解一下公司的健康状况。但是,我遇到了一个接一个的错误,所以要把我的财产拿出来,希望有人能帮上忙。我还无法使用getSymbols来获取任何内容,因此CompanyTickers仅来自.csv符号。
stocks <- (CompanyTickers$Symbol)
## Generate new environment stockEnv for results
stockEnv <- new.env()
##
## This pulls available stock data for the Symbols in the stock variable
## The try function keeps the code from quitting for defunct symbols
##
df <- try(getSymbols(stocks, src ='yahoo', env=stockEnv))
## Runs a loop on the data stored to stockEnv
## One Year ago
for (stock in ls(stockEnv)){
try(monthlyReturn(xtsTicker, subset='2017-09-18')
}
答案 0 :(得分:0)
您已将结果存储到环境中。当您使用ls
时,它仅获取该环境中对象的名称。您可以使用函数get
来获取对象并对其进行处理。
x <- new.env()
x$obj <- 1
for (i in ls(x)) {
message("Accessing ls() result:")
print(i)
message("Properly fetch from environment")
print(get(i, envir = x))
}
Accessing ls() result:
[1] "obj"
Properly fetch from environment
[1] 1
答案 1 :(得分:0)
下面的代码将帮助您入门。无需单独的环境,只需将所有内容存储在列表中,然后使用apply函数可以帮助您遍历所有数据。 MonthlyReturn数据需要指定的内容,例如“ 2017-09-18 ::”或“ 2017-09 ::”。不管您的开始日期是月中旬,月度收益计算都将使用该月的所有数据。
library(quantmod)
# stocklist with 1 bad stock
stocks <- c("MSFT", "MSFT2", "GIS")
# Get the data and name the list objects
stock_data <- lapply(stocks, function(x) try(getSymbols(x, src ='yahoo', auto.assign = FALSE)))
names(stock_data) <- stocks
# Show which stocks don't have any data
which(sapply(stock_data, is.character) == T)
MSFT2
2
# remove stocks that don't return any data.
stock_data <- stock_data[!sapply(stock_data, is.character)]
# One Year ago
monthly_return_data <- lapply(stock_data, function(x) monthlyReturn(x, subset = "2017-09-18::"))
出于数据质量目的,您可能需要检查源tiingo或Alphavantage(需要API密钥)。雅虎并不总是拥有正确的数据。