Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有更好的方法使用R'检索准确的每周和每月股价数据;s';quantmod';?_R_Quantmod_Yahoo Finance - Fatal编程技术网

是否有更好的方法使用R'检索准确的每周和每月股价数据;s';quantmod';?

是否有更好的方法使用R'检索准确的每周和每月股价数据;s';quantmod';?,r,quantmod,yahoo-finance,R,Quantmod,Yahoo Finance,我曾尝试使用BatchGetSymbols检索多个股票报价器的每周和每月价格数据(ohlc)的价格数据,但每周和每月函数无法返回正确的数据。使用“batchgetsymbols”“freq.data=“weekly”参数时,每周价格从周三开始,这对于每周价格数据是不正确的。每周ohlc数据应在每周末(周一至周五)开始 我发现最接近于检索正确的周/月数据的方法是使用带有“quantmod”的“getsymbols”函数,但目前仅限于搜索单个股票代码。是否有人能够帮助我更改此脚本以搜索和检索多个股票

我曾尝试使用BatchGetSymbols检索多个股票报价器的每周和每月价格数据(ohlc)的价格数据,但每周和每月函数无法返回正确的数据。使用“batchgetsymbols”“freq.data=“weekly”参数时,每周价格从周三开始,这对于每周价格数据是不正确的。每周ohlc数据应在每周末(周一至周五)开始

我发现最接近于检索正确的周/月数据的方法是使用带有“quantmod”的“getsymbols”函数,但目前仅限于搜索单个股票代码。是否有人能够帮助我更改此脚本以搜索和检索多个股票代码的周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)
}
>库(quantmod)

一种快速的方法是使用tidyquant。 在
getSymbols
中有一个每周和每月选项,在使用
tq\u get
时会调用该选项。不要注意TIBLE打印到屏幕上的方式,只需在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. 
更新2

对github版本的
BatchGetSymbols
进行更新后,每周的数字正确无误(请注意,日期将是一周的第一天(星期一))。您可以安装github版本的等待,直到cran上有更新可用

stocks_week <- BatchGetSymbols(stock_list, 
                           first.date = start_date, 
                           last.date = end_date, 
                           freq.data = "weekly", 
                           how.to.aggregate = 'last')

stocks\u week感谢您的帮助。这确实回答了我上面的问题,尽管我在输入超过10只股票时无法执行此脚本。是否有方法在1000个股票中运行此脚本而不收到错误?@Ronhamilton,请参阅答案中的更新。您可能遇到yahoo下载问题。
BatchGetSymbols
有一些问题避免这种情况的内部选项。非常感谢@phiver这很好。尽管我正在与一位非常了解batchgetsymbols的人交谈,但是否可以检索季度月度价格数据?3个月或季度OHLC数据将是另一个很好的功能。如果您希望我问一个新问题,我会这样做。
stocks_week <- BatchGetSymbols(stock_list, 
                           first.date = start_date, 
                           last.date = end_date, 
                           freq.data = "weekly", 
                           how.to.aggregate = 'last')