如何在R中获得货币汇率

Max*_*nis 11 currency r

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

具体来说,给定"从"和"到"货币符号的向量,我想知道费率.就像是:

IdealFunction(c("CAD", "JPY", "USD"), c("USD", "USD", "EUR"))
Run Code Online (Sandbox Code Playgroud)

GSe*_*See 20

您可以使用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
Run Code Online (Sandbox Code Playgroud)

或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
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个Interactive Brokers帐户,您可以使用IBrokers包或我的twsInstrument包(它基本上只是IBrokers函数的包装器)

library(twsInstrument)
getQuote(paste0(to, from), src="IB") # only works when market is open.
Run Code Online (Sandbox Code Playgroud)

  • 实际上你可以在没有TrueFX用户名的情况下使用:`qt < - QueryTrueFX(); qt [qt $符号%in%paste(to,from,sep ="/"),]`,但是您仍然需要知道是否需要反向引用的对,或者有一些逻辑来查看哪个存在. (2认同)
  • 这就是为什么r是最好的 (2认同)
  • 一个问题:如何使用“quantmod”获取特定日期(例如 2019-12-31)的 yahoo 报价? (2认同)

use*_*745 7

您可以historical_exchange_rates()priceR图书馆使用。

例如,获取 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更多示例可以在此处此处找到。

  • 很棒的包!谢谢 (2认同)

Max*_*nis 5

看起来像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)
}
Run Code Online (Sandbox Code Playgroud)

  • `getFX` 非常适合历史请求,但它只会每天更新。 (2认同)
  • 但是,历史数据仅提供过去 180 天的数据。有没有办法也获取旧数据? (2认同)