quantmod-getQuote()在不同的交易所不适用于股票行情

时间:2018-09-20 12:21:24

标签: r quantmod

我正在通过quantmod-getQuote()来找到解决我遇到的问题(link)的解决方案。

当我运行以下内容时;

metrics <- yahooQF(c("Name", "Volume", "P/E Ratio", "Dividend Yield", "Shares Outstanding"))
symbols2 <- c("GOOG", "MSFT")
stats <- getQuote(symbols2, what = metrics)

我能够在GOOGMSFT上获得一些雅虎财务统计信息。但是,当我将符号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()函数中找到要更改的内容。

2 个答案:

答案 0 :(得分:2)

问题不在于股票代号中的点。您实际上在函数中发现了一个错误。

如果运行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包进行更改。我在github上打开了issue

目前的解决方法是在每次交换时运行您的代码,而不是一次性运行大量的代码。

编辑:添加了github问题。

答案 1 :(得分:1)

我可能是错的,但我认为该错误是由于您有纳斯达克的2个柜台,而香港交易所只有1个柜台(例如“参数暗示行数不同”错误)。

当我尝试从纳斯达克(NASDAQ)获取两个柜台的财务信息并从香港交易所(HK Exchange)获取两个计数器的财务信息时,问题得到解决:

metrics <- yahooQF(c("Name", "Volume", "P/E Ratio", "Dividend Yield", "Shares Outstanding"))
symbols2 <- c("GOOG", "MSFT", "0005.HK", "3888.HK")
stats <- getQuote(symbols2, what = metrics)

Warning message:
In getQuote.yahoo(Symbols = c("GOOG", "MSFT", "0005.HK", "3888.HK" :
  symbols have different timezones; converting to local time

stats
             Trade Time                  Name   Volume P/E Ratio Dividend Yield Shares Outstanding
GOOG    2018-09-20 04:00:01         Alphabet Inc.  1077192 50.576115             NA          349883008
MSFT    2018-09-20 04:00:01 Microsoft Corporation 18559784 52.441310    0.014839678         7668219904
0005.HK 2018-09-20 16:08:17         HSBC HOLDINGS 15168181 18.303152    0.007505519        19422699520
3888.HK 2018-09-20 16:08:17              KINGSOFT  5549058  4.991025    0.000952381         1365229952

另一种选择是您可以通过交换获取财务信息;您不必同时从所有您感兴趣的交易所中获得所有计数器。意思是,您可以执行以下操作:

US_symbols <- c("GOOG", "MSFT")
HK_symbols <- c("0005.HK", "3888.HK")

US_stats <- getQuote(US_symbols, what = metrics)
HK_stats <- getQuote(HK_symbols, what = metrics)

US_stats
          Trade Time                  Name  Volume P/E Ratio Dividend Yield Shares Outstanding
GOOG 2018-09-20 09:39:47         Alphabet Inc.   91776  50.93889             NA          349883008
MSFT 2018-09-20 09:40:07 Microsoft Corporation 1956869  52.62911     0.01504029         7668219904

HK_stats
             Trade Time          Name   Volume P/E Ratio Dividend Yield Shares Outstanding
0005.HK 2018-09-20 16:08:17 HSBC HOLDINGS 15168181 18.303152    0.007505519        19422699520
3888.HK 2018-09-20 16:08:17      KINGSOFT  5549058  4.991025    0.000952381         1365229952