如何在R中获得货币汇率

时间:2014-11-01 22:45:33

标签: r currency

是否有任何R套餐/功能可以实时获得汇率,例如来自Google财经?如果已经存在某些东西,宁愿避免使用RCurl或其他解析器。

具体来说,给定“从”和“到”货币符号的向量,我想知道费率。类似的东西:

IdealFunction(c("CAD", "JPY", "USD"), c("USD", "USD", "EUR"))

3 个答案:

答案 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)

看起来TFXquantmod具有此功能(感谢@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")

enter image description here