當每個代碼的時間週期相同時,我可以循環並計算週末/週末回報列表,每當我想查詢的時間段對於每個股票代碼都是不同的時候都會遇到麻煩。使用quantmod在循環中查找不同時間段的代號
例如,使用:
symbols <- c("AAPL", "GOOG"," MSFT")
dates <- as.Date(c("2015-01-04", "2015-01-05", "2015-01-06"))
example.df <- data.frame(tickers, dates)
example.df
tickers dates
1 AAPL 2015-01-04
2 GOOG 2015-01-05
3 MSFT 2015-01-06
我願意爲AAPL 2015-01-04和2015年1月5日之間的2015年1月5日和2015-01之間的隔夜收益,爲GOOG -06等。如果是星期五,我想要下個星期一。
我能得到什麼,我通過查找這樣每個人股票在尋找:
library(quantmod)
library(dplyr)
# date range accounts for weekends
getSymbols("AAPL", from = "2016-01-04", to = "2016-01-08")
data <- as.data.frame(AAPL)
colnames(data) <- c("open","high","low","close","volume","adj.")
# overnight return calculation
data$overnight.return <- data$open/lag(data$close, default = 0) - 1
data$overnight.return <- paste(round(data$overnight.return * 100, 3), "%",sep= "")
# the overnight/over-weekend returns for the specified date
data.df.final <- slice(data, 2)
當然,這是非常慢。 這裏至於我能得到試圖讓一個循環出來的:
# needs to be a loop itself and inside the other 'for' loop somehow I think
symbol.list <- example.df[,1]
start <- data[,2]
end <- data[,2] + days(3)
results <- NULL
for (i in symbol.list) {
data <- getSymbols(Symbols = i,
src = "yahoo",
from = start, to = end,
auto.assign = FALSE)
if (inherits(data, 'try-error')) next
colnames(data) <- c("open","high","low","close","volume","adj.")
data <- as.data.frame(data)
data <- cbind(date = rownames(data), data)
data$overnightRtn <- as.vector(data$open/lag(data$close, default = 0) - 1)
data$overnightRtn <- paste(round(data$overnightRtn * 100, 3), "%")
data <- slice(data, 2)
results <- bind_rows(results, data)
}
我如何可以添加日期循環方面對上述股票循環?
你好RyGuy。你可以添加一些例子/可重複的數據?另外,我不太瞭解這個問題。但是,如果您想彙總每個代碼的信息,並且您有一個包含值+日期和另一個代碼+代碼範圍日期的表格,我寧願加入這兩個表格,以便有關代碼,價值和日期的信息將與開始日期和結束日期。對於同一個表中的所有內容,您可以在dplyr或data.table中使用聚合或等價物來完成最終的數學運算。 –
@Carlos Alberto,感謝您的關注。在我的第一段之後「例如,用:」有我使用的示例數據框。我所具有的突出問題是 - 如果所有這些代碼都對應不同的日期,我怎麼才能使用Quant mod來循環查找數據框中的代碼?在我的例子中,我想在2015-01-04(和接下來的幾天)檢索AAPL的信息,2015-01-05(以及接下來的幾天)等等。然後將所有這些結果綁定在一起一個df。 – RyGuy