Проблема не с точкой в имени тикера.Вы действительно нашли ошибку в функции.
Если вы запустите 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.