quantmod - getQuote () не работает для тикеров на разных биржах - PullRequest
0 голосов
/ 20 сентября 2018

Я просматриваю quantmod - getQuote(), чтобы найти решение проблемы, с которой сталкиваюсь (ссылка) .

Когда я запускаю следующее;

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

Я могу получить некоторые статистические данные о финансах Yahoo на 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() есть что изменить.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Проблема не с точкой в ​​имени тикера.Вы действительно нашли ошибку в функции.

Если вы запустите 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.

Обходной путь сейчас состоит в том, чтобы запускать ваш код на обмен вместо большого списка тикеров за один раз.

edit: добавлен выпуск github.

0 голосов
/ 20 сентября 2018

Я могу ошибаться, но я думаю, что ошибка произошла, так как у вас есть 2 счетчика от NASDAQ, но только один счетчик от HK Exchange (например, ошибка «аргументы подразумевают различное количество строк»).

КогдаЯ попытался получить финансовые данные двух счетчиков от 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
...