有没有更好的方法可以用 R 的 'quantmod' 检索准确的每周和每月股价数据?
Is there a better way to retrieve accurate Weekly and Monthly stock price data with R's 'quantmod'?
我曾尝试使用 BatchGetSymbols 检索多个股票代码的每周和每月价格数据 (ohlc) 的价格数据,但每周和每月函数无法 return 更正数据。当使用 'batchgetsymbols' 'freq.data = "weekly' 参数时,每周价格从星期三开始,这对于每周价格数据是不正确的。 It Weekly ohlc 数据应该在每个周末(周一至周五)。
我发现最接近检索正确 weekly/monthly 数据的方法是将 'getsymbols' 函数与 'quantmod' 结合使用,但目前仅限于搜索一个代码。有谁能帮我修改这个脚本来搜索和检索多个代码的每周 ohlc 数据吗?例如:
> library(quantmod)
stock_list <- c("FB", "AAPL", "GOOG","BA","DAL","TSLA")
start_date <- Sys.Date()-14
end_date <- Sys.Date()
master_df <- NULL
for (idx in seq(length(stock_list))){
idx = 1
stock_index = stock_list[idx]
getSymbols(stock_index, verbose = TRUE, src = "yahoo",
from=start_date,to=end_date)
temp_df = as.data.frame(to.weekly(get(stock_index))) # weekly data
temp_df$Date = row.names(temp_df)
temp_df$Index = stock_index
row.names(temp_df) = NULL
colnames(temp_df) = c("Open", "High", "Low", "Close",
"Volume", "Adjusted", "Date", "Index")
temp_df = temp_df[c("Date", "Index", "Open", "High",
"Low", "Close", "Volume", "Adjusted")]
master_df = rbind(master_df, temp_df)
}
如有任何帮助,我们将不胜感激。
一个快速的方法是使用 tidyquant。
getSymbols
中有周和月选项,使用tq_get
时调用。不要注意小标题被打印到屏幕上的方式,只需检查 RStudio 查看器中的数据即可。
library(tidyquant)
library(dplyr)
stock_list <- c("FB", "AAPL", "GOOG","BA","DAL","TSLA")
start_date <- Sys.Date()-14
end_date <- Sys.Date()
stocks_weekly <- tq_get(stock_list, from = start_date, to = end_date, periodicity = "weekly")
stocks_weekly
# A tibble: 12 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 FB 2020-11-02 265. 297. 257. 293. 118206600 293.
2 FB 2020-11-09 290. 293. 264 277. 92433100 277.
3 AAPL 2020-11-02 109. 120. 107. 119. 609571800 118.
4 AAPL 2020-11-09 120. 122. 114. 119. 589577900 119.
5 GOOG 2020-11-02 1628. 1794. 1616. 1762. 11494700 1762.
6 GOOG 2020-11-09 1791. 1818. 1717. 1777. 8915800 1777.
7 BA 2020-11-02 146. 158. 143. 158. 58773000 158.
8 BA 2020-11-09 179 194. 172. 187. 165339400 187.
9 DAL 2020-11-02 30.6 32.3 29.7 31.4 65773500 31.4
10 DAL 2020-11-09 37.4 38.7 34.0 36.5 150014900 36.5
11 TSLA 2020-11-02 394 440 392. 430. 145636400 430.
12 TSLA 2020-11-09 440. 452. 396. 408. 122101100 408.
如果您想更好地查看数据,请使用print(as.data.frame(stocks_weekly))
更新:
获取正确的每周/每月数据的所有功能都存在一些问题。我正在创建(或添加信息)github 个问题。
下面的代码可以处理大量行情而不 运行 下载错误。
mutate 函数使用 time_tk 和 xts 中的函数来正确获取所有内容。我只使用需要的列,因为 BatchGetSymbols
也计算每日 returns。最后,我重命名了列以正确命名它们。所有 time_tk 函数都可以只替换为 base 和 xts 函数,但这节省了我一些时间。
library(BatchGetSymbols)
library(timetk)
library(xts)
library(dplyr)
library(tidyr)
library(purrr)
stocks <- BatchGetSymbols(stock_list,
first.date = start_date,
last.date = end_date,
freq.data = "daily")
stocks_weekly <- stocks$df.tickers %>%
group_by(ticker) %>%
nest() %>%
mutate(data = map(data, function(x) {x = tk_xts(x,
select = c(price.open, price.high, price.low, price.close, volume, price.adjusted),
date_var = ref.date)
tk_tbl(to.period(x, period = "weeks"))
})
) %>%
unnest(cols = c(data)) %>%
rename_with( ~ tolower(gsub("x.", "", .x)), starts_with("x."))
更新 2
对 BatchGetSymbols
的 github 版本的更新可以正确显示每周数据(请注意,日期将是一周的第一天(星期一))。您可以安装 github 版本的 wait until the update is available on cran.
stocks_week <- BatchGetSymbols(stock_list,
first.date = start_date,
last.date = end_date,
freq.data = "weekly",
how.to.aggregate = 'last')
我曾尝试使用 BatchGetSymbols 检索多个股票代码的每周和每月价格数据 (ohlc) 的价格数据,但每周和每月函数无法 return 更正数据。当使用 'batchgetsymbols' 'freq.data = "weekly' 参数时,每周价格从星期三开始,这对于每周价格数据是不正确的。 It Weekly ohlc 数据应该在每个周末(周一至周五)。
我发现最接近检索正确 weekly/monthly 数据的方法是将 'getsymbols' 函数与 'quantmod' 结合使用,但目前仅限于搜索一个代码。有谁能帮我修改这个脚本来搜索和检索多个代码的每周 ohlc 数据吗?例如:
> library(quantmod)
stock_list <- c("FB", "AAPL", "GOOG","BA","DAL","TSLA")
start_date <- Sys.Date()-14
end_date <- Sys.Date()
master_df <- NULL
for (idx in seq(length(stock_list))){
idx = 1
stock_index = stock_list[idx]
getSymbols(stock_index, verbose = TRUE, src = "yahoo",
from=start_date,to=end_date)
temp_df = as.data.frame(to.weekly(get(stock_index))) # weekly data
temp_df$Date = row.names(temp_df)
temp_df$Index = stock_index
row.names(temp_df) = NULL
colnames(temp_df) = c("Open", "High", "Low", "Close",
"Volume", "Adjusted", "Date", "Index")
temp_df = temp_df[c("Date", "Index", "Open", "High",
"Low", "Close", "Volume", "Adjusted")]
master_df = rbind(master_df, temp_df)
}
如有任何帮助,我们将不胜感激。
一个快速的方法是使用 tidyquant。
getSymbols
中有周和月选项,使用tq_get
时调用。不要注意小标题被打印到屏幕上的方式,只需检查 RStudio 查看器中的数据即可。
library(tidyquant)
library(dplyr)
stock_list <- c("FB", "AAPL", "GOOG","BA","DAL","TSLA")
start_date <- Sys.Date()-14
end_date <- Sys.Date()
stocks_weekly <- tq_get(stock_list, from = start_date, to = end_date, periodicity = "weekly")
stocks_weekly
# A tibble: 12 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 FB 2020-11-02 265. 297. 257. 293. 118206600 293.
2 FB 2020-11-09 290. 293. 264 277. 92433100 277.
3 AAPL 2020-11-02 109. 120. 107. 119. 609571800 118.
4 AAPL 2020-11-09 120. 122. 114. 119. 589577900 119.
5 GOOG 2020-11-02 1628. 1794. 1616. 1762. 11494700 1762.
6 GOOG 2020-11-09 1791. 1818. 1717. 1777. 8915800 1777.
7 BA 2020-11-02 146. 158. 143. 158. 58773000 158.
8 BA 2020-11-09 179 194. 172. 187. 165339400 187.
9 DAL 2020-11-02 30.6 32.3 29.7 31.4 65773500 31.4
10 DAL 2020-11-09 37.4 38.7 34.0 36.5 150014900 36.5
11 TSLA 2020-11-02 394 440 392. 430. 145636400 430.
12 TSLA 2020-11-09 440. 452. 396. 408. 122101100 408.
如果您想更好地查看数据,请使用print(as.data.frame(stocks_weekly))
更新:
获取正确的每周/每月数据的所有功能都存在一些问题。我正在创建(或添加信息)github 个问题。
下面的代码可以处理大量行情而不 运行 下载错误。
mutate 函数使用 time_tk 和 xts 中的函数来正确获取所有内容。我只使用需要的列,因为 BatchGetSymbols
也计算每日 returns。最后,我重命名了列以正确命名它们。所有 time_tk 函数都可以只替换为 base 和 xts 函数,但这节省了我一些时间。
library(BatchGetSymbols)
library(timetk)
library(xts)
library(dplyr)
library(tidyr)
library(purrr)
stocks <- BatchGetSymbols(stock_list,
first.date = start_date,
last.date = end_date,
freq.data = "daily")
stocks_weekly <- stocks$df.tickers %>%
group_by(ticker) %>%
nest() %>%
mutate(data = map(data, function(x) {x = tk_xts(x,
select = c(price.open, price.high, price.low, price.close, volume, price.adjusted),
date_var = ref.date)
tk_tbl(to.period(x, period = "weeks"))
})
) %>%
unnest(cols = c(data)) %>%
rename_with( ~ tolower(gsub("x.", "", .x)), starts_with("x."))
更新 2
对 BatchGetSymbols
的 github 版本的更新可以正确显示每周数据(请注意,日期将是一周的第一天(星期一))。您可以安装 github 版本的 wait until the update is available on cran.
stocks_week <- BatchGetSymbols(stock_list,
first.date = start_date,
last.date = end_date,
freq.data = "weekly",
how.to.aggregate = 'last')