本学期我正在学习R,这是我的第一个任务。我想使用for循环在设定的日期范围内检索每月调整后的股票报价。一旦我能够做到这一点,我想将所有数据合并到一个数据框中。
我的代码到目前为止检索了设定日期范围内5个股票代码的每日股票报价,它将对象分配给指定的环境,并且只将.Adjusted列放在列表中。
有人能指出我在获得月度报价方面的更好方向吗?我的代码是正确的。
感谢。
#Packages
library(quantmod)
#Data structure that contains stock quote objects
ETF_Data <- new.env()
#Assign dates to set range for stock quotes
sDate <- as.Date("2007-08-31")
eDate <- as.Date("2014-09-04")
#Assign a vector of ticker symbols.
ticker_symbol <- c("IVW","JKE","QQQ","SPYG","VUG")
#Assign number of ticker symbols.
total_ticker_symbols <- length(ticker_symbol)
#Assign empty list to for each object contained in my environment.
Temp_ETF_Data <- list()
#Assign integer value to counter.
counter <- 1L
#Loop and retrieve each ticker symbols quotes from Yahoo's API
for(i in ticker_symbol)
{
getSymbols(
i,
env = ETF_Data,
reload.Symbols = FALSE,
from = sDate,
to = eDate,
verbose = FALSE,
warnings = TRUE,
src = "yahoo",
symbol.lookup = TRUE)
#Add only Adjusted Closing Prices for each stock or object into list.
Temp_ETF_Data[[i]] <- Ad(ETF_Data[[i]])
if (counter == length(ticker_symbol))
{
#Merge all the objects of the list into one object.
ETF_Adj_Daily_Quotes <- do.call(merge, Temp_ETF_Data)
ETF_Adj_Monthly_Quotes <- ETF_Adj_Daily_Quotes[endpoints(ETF_Adj_Daily_Quotes,'months')]
}
else
{
counter <- counter + 1
}
}
答案 0 :(得分:2)
不需要for
循环。您可以使用eapply
getSymbols(ticker_symbol, env=ETF_Data, from=sDate, to=eDate)
# Extract the Adjusted column from all objects,
# then merge all columns into one object
ETF_Adj_Data <- do.call(merge, eapply(ETF_Data, Ad))
# then extract the monthly endpoints
Monthly_ETF_Adj_Data <- ETF_Adj_Data[endpoints(ETF_Adj_Data,'months')]
答案 1 :(得分:0)
我知道这是一个老问题,但是此答案可能会帮助潜在的未来用户寻求更好的答案。
quantmod
现在introduced是getSymbols
函数的另外一个参数,称为periodicity
,该函数可以采用daily
,weekly
, monthly
。
我测试了以下内容,它似乎可以按需工作:
getSymbols("EURGBP=X", from = starting, src = 'yahoo', periodicity = 'monthly')
答案 2 :(得分:-1)
只需使用
to.monthly(your_ticker)