是否有任何R套餐/功能可以实时获得汇率,例如来自Google财经?如果已经存在某些东西,宁愿避免使用RCurl或其他解析器。
具体来说,给定“从”和“到”货币符号的向量,我想知道费率。类似的东西:
IdealFunction(c("CAD", "JPY", "USD"), c("USD", "USD", "EUR"))
答案 0 :(得分:15)
您可以使用quantmod获取雅虎报价。 (我不确定雅虎外汇报价有多延迟,或者他们更新的频率。)
library(quantmod)
from <- c("CAD", "JPY", "USD")
to <- c("USD", "USD", "EUR")
getQuote(paste0(from, to, "=X"))
# Trade Time Last Change % Change Open High Low Volume
#CADUSD=X 2014-11-01 08:23:00 0.8875 N/A N/A N/A N/A N/A N/A
#JPYUSD=X 2014-11-01 08:23:00 0.0089 N/A N/A N/A N/A N/A N/A
#USDEUR=X 2014-11-01 08:23:00 0.7985 N/A N/A N/A N/A N/A N/A
或TFX,如果您注册免费帐户,可获得实时,毫秒带时间戳的报价。 (注意你必须使用市场惯例;即美元/日元而不是日元/美元)
library(TFX)
pairs <- paste(to, from, sep="/")
QueryTrueFX(ConnectTrueFX(pairs, "validUser", "anytext"))
# Symbol Bid.Price Ask.Price High Low TimeStamp
#1 USD/CAD 1.12651 1.12665 1.12665 1.12651 2014-10-31 20:45:00.559
#2 USD/JPY 112.34600 112.35900 112.35900 112.34600 2014-10-31 20:45:00.134
#3 EUR/USD 1.25234 1.25253 1.25253 1.25234 2014-10-31 20:45:00.598
或者,如果您有一个Interactive Brokers帐户,您可以使用IBrokers package或我的twsInstrument package(基本上只是IBrokers函数的包装器)
library(twsInstrument)
getQuote(paste0(to, from), src="IB") # only works when market is open.
答案 1 :(得分:3)
看起来TFX
和quantmod
具有此功能(感谢@RStudent和@KFB的提示)。我首选quantmod
,因为它不需要设置帐户,但AFAICT没有像我正在寻找的那样的矢量化当前快照功能。此函数GetExchangeRates
执行此操作:
GetExchangeRates <- function(from, to, dt=Sys.Date()) {
require(quantmod)
obj.names <- getFX(paste0(from, "/", to), from=dt, to=dt)
result <- numeric(length(obj.names))
names(result) <- obj.names
for (obj.name in obj.names) {
result[obj.name] <- as.numeric(get(obj.name))[1]
# Clean up
rm(obj.name)
}
return(result)
}
TestExchangeRates <- function() {
from <- c("CAD", "JPY", "USD")
to <- c("USD", "USD", "EUR")
GetExchangeRates(from, to)
}
答案 2 :(得分:0)
您可以使用priceR
库中的historical_exchange_rates()
。
例如获取2010年至2020年的每日澳元对美元汇率:
# install.packages("priceR")
library(priceR)
cur <- historical_exchange_rates("AUD", to = "USD",
start_date = "2010-01-01", end_date = "2020-06-30")
tail(cur)
date one_AUD_equivalent_to_x_USD
2020-06-25 0.688899
2020-06-26 0.686340
2020-06-27 0.686340
2020-06-28 0.685910
2020-06-29 0.687335
2020-06-30 0.690166
dim(cur)
[1] 3834 2
# Plot USD vs AUD last 10 years
library(ggplot2)
library(tidyverse)
cur %>%
tail(365 * 10) %>%
rename(aud_to_usd = one_AUD_equivalent_to_x_USD) %>%
mutate(date = as.Date(date)) %>%
ggplot(aes(x = date, y = aud_to_usd, group = 1)) +
geom_line() +
geom_smooth(method = 'loess') +
theme(axis.title.x=element_blank(),
axis.ticks.x=element_blank()) +
scale_x_date(date_labels = "%Y", date_breaks = "1 year")