我正在通过 quantmod
-getQuote()
来找到我遇到的问题的解决方案 (link) .
当我运行以下命令时;
metrics <- yahooQF(c("Name", "Volume", "P/E Ratio", "Dividend Yield", "Shares Outstanding"))
symbols2 <- c("GOOG", "MSFT")
stats <- getQuote(symbols2, what = metrics)
我能够获得 GOOG
和 MSFT
上的一些雅虎财经统计数据。但是,当我将符号 3888.HK
添加到列表中时,出现错误。
symbols2 <- c("GOOG", "MSFT", "3888.HK")
stats <- getQuote(symbols2, what = metrics)
错误消息:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 2, 3
In addition: Warning message:
In getQuote.yahoo(Symbols = c("GOOG", "MSFT", "3888.HK"), what = list( :
symbols have different timezones; converting to local time
有人知道解决这个问题的方法吗,我似乎找不到在 getQuote()
函数中需要更改的内容。
最佳答案
问题不在于股票名称中的点。您实际上发现了该函数中的一个错误。
如果运行getQuote("3888.HK", What = Metrics)
,您会得到结果:
Trade Time Name Volume P/E Ratio Dividend Yield Shares Outstanding
3888.HK 2018-09-20 16:08:17 KINGSOFT 5549058 4.991025 0.000952381 1365229952
问题是时区不同。如果每个时区的代码不相等,您将收到错误消息。
这有效:
symbols2 <- c("GOOG", "MSFT", "0005.HK", "3888.HK")
symbols2 <- c("GOOG", "MSFT", "0005.HK", "3888.HK", "FAGR.BR", "AGFB.BR")
这不是
symbols2 <- c("GOOG", "MSFT", "FB", "0005.HK", "3888.HK")
symbols2 <- c("GOOG", "MSFT", "0005.HK", "3888.HK", "FAGR.AB")
问题出在这部分函数:
Qposix <- sapply(split(sq, sq$exchangeTimezoneName), convertTZ)
这将返回一个列表而不是时区向量。如果每个证券交易所的股票数量不相等,您将收到此错误。调整这个很简单,但需要更改 quantmod 包。我已经开通了issue在 github 上。
目前的解决方法是在每次交易所运行代码,而不是一次性运行一大堆代码。
编辑:添加了 github 问题。
关于r - quantmod - getQuote() 不适用于不同交易所的股票代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425092/