Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用R从Oanda获取3年历史价格系列?_R_Quantmod - Fatal编程技术网

如何使用R从Oanda获取3年历史价格系列?

如何使用R从Oanda获取3年历史价格系列?,r,quantmod,R,Quantmod,我想用R处理比特币价格,但我无法从雅虎和谷歌下载time serie 从BTCUSD历史时间序列缺失,并且当符号为“货币:欧元兑美元”时,谷歌无法识别由getSymbols格式化的URL。我知道R希望“:”是一个列表,所以我应用了一个在Stakeoverflow中找到的解决方法来转换货币:EURUSD in CURRENCY.EURUSD,但Google仍然无法处理该请求 从Oanda下载就像一个符咒,但请求不能超过500天。我尝试此解决方法以绕过限制,但它无法正确填充包含其他符号的prices

我想用R处理比特币价格,但我无法从雅虎和谷歌下载time serie

从BTCUSD历史时间序列缺失,并且当符号为“货币:欧元兑美元”时,谷歌无法识别由
getSymbols
格式化的URL。我知道R希望“:”是一个列表,所以我应用了一个在Stakeoverflow中找到的解决方法来转换货币:EURUSD in CURRENCY.EURUSD,但Google仍然无法处理该请求

从Oanda下载就像一个符咒,但请求不能超过500天。我尝试此解决方法以绕过限制,但它无法正确填充包含其他符号的
prices
对象:

  • 由于某些原因,2012年和2013年部分时间的BTCUSD价格缺失
  • 此外,符号列表中的符号在wo中获得NA
尾部(价格)
(带下面的循环波纹管)

打印摘录(价格)
(带下面的循环)

尾部(价格)
(不带下面的循环)

这个代码有什么问题?德克萨斯州

require(quantmod)
require(PerformanceAnalytics)

symbols <- c(
  "UUP",
  "FXB",
  "FXE",
  "FXF",
  "FXY",
  "SLV",
  "GLD"
)

getSymbols(symbols, from="2004-01-01")

prices <- list()
for(i in 1:length(symbols)) {
  prices[[i]] <- Cl(get(symbols[i]))  
}

BTC <- list()
for(i in 1:2) {
  BTC[[1]] <- getFX("BTC/USD",
                       from = Sys.Date() -499 * (i + 1),
                       to = Sys.Date() - 499 * i,
                       env = parent.frame(),
                       auto.assign = FALSE)
}
BTC[[1]] <- getFX("BTC/USD",
                  from = Sys.Date() -499,
                  to = Sys.Date(),
                  env = parent.frame(),
                  auto.assign = FALSE)

prices[[length(symbols)+1]] <- BTC[[1]]
prices <- do.call(cbind, prices)

colnames(prices) <- gsub("\\.[A-z]*", "", colnames(prices))
ep <- endpoints(prices, "months")

prices <- prices[ep,]
prices <- prices["1997-03::"]
require(quantmod)
要求(性能分析)

符号您的
for
循环未使用
i
,然后在
for
循环后,您将覆盖结果(列表长度为1,因为
BTC[[1]]
是硬编码的)

试试这个

btc <- do.call(rbind, lapply(0:2, function(i) {
  getFX("BTC/USD", 
        from = Sys.Date() -499 * (i + 1),
        to = Sys.Date() - 499 * i,
        env=NULL)
}))

prices <- do.call(cbind, c(prices, list(btc)))

btc这些日期是否可能没有价格?你真的能看到网页上的数据并确认它在那里吗?你是说它是
BTC[[i]]@kristang在Oanda网站上有2010年12月的价格。@GSee的问题和我使用'BTC[[i]]时的问题是一样的,我想我明白了。符号列表中的符号不适用,因为相应的日期指向周六或周日,我想Oanda API不会在2013年9月之前提供数据。非常感谢GSee。它的工作原理很有魅力,但端点(价格,“月”)]返回一个星期六或星期天,其中BTC的值为,但所有其他货币的值为N/a。例如2014-11-30和2014-11-30。您认为有可能排除这些周末吗?我在回答中使用了
na.locf
,用前面的值填充NAs。如果要删除所有具有NAs的行,可以使用
na.omit
,或者可以删除像这样的周末行
prices[!timeDate::isWeekend(index(prices))]
prices[!平日(index(prices))%c(“周六”、“周日”)]
prices[!as.POSIXlt(index(prices))$wday%c(0,6)]
Hi GSee,由于某种原因,上面的完整代码在下载数据时返回一个错误,我不知道Oanda有什么变化<代码>1:在download.file中(粘贴(oanda.URL,from.date,to.date,“exch=,currency.pair[1],:ouverture不可能:le statut HTTPétait'404 Not Found
@user3423825我可以确认,无论何时调用
getFX
,我都会收到404 Not Found错误(例如
getFX(“USD/JPY”)
给出相同的错误)。看起来他们可能更改了API。@user3423825请参见
             UUP    FXB    FXE    FXF   FXY   SLV    GLD
2014-08-29 22.02 163.23 129.54 106.42 93.61 18.71 123.86
2014-09-30 22.87 159.33 124.48 102.26 88.80 16.35 116.21
2014-10-31 23.09 157.20 123.49 101.45 86.65 15.50 112.66
2014-11-28 23.47 153.46 122.46 101.00 82.01 14.83 112.11
2014-12-31 23.97 153.06 119.14  98.16 81.21 15.06 113.58
2015-01-23 25.21 147.23 110.33 110.95 82.57 17.51 124.23
require(quantmod)
require(PerformanceAnalytics)

symbols <- c(
  "UUP",
  "FXB",
  "FXE",
  "FXF",
  "FXY",
  "SLV",
  "GLD"
)

getSymbols(symbols, from="2004-01-01")

prices <- list()
for(i in 1:length(symbols)) {
  prices[[i]] <- Cl(get(symbols[i]))  
}

BTC <- list()
for(i in 1:2) {
  BTC[[1]] <- getFX("BTC/USD",
                       from = Sys.Date() -499 * (i + 1),
                       to = Sys.Date() - 499 * i,
                       env = parent.frame(),
                       auto.assign = FALSE)
}
BTC[[1]] <- getFX("BTC/USD",
                  from = Sys.Date() -499,
                  to = Sys.Date(),
                  env = parent.frame(),
                  auto.assign = FALSE)

prices[[length(symbols)+1]] <- BTC[[1]]
prices <- do.call(cbind, prices)

colnames(prices) <- gsub("\\.[A-z]*", "", colnames(prices))
ep <- endpoints(prices, "months")

prices <- prices[ep,]
prices <- prices["1997-03::"]
btc <- do.call(rbind, lapply(0:2, function(i) {
  getFX("BTC/USD", 
        from = Sys.Date() -499 * (i + 1),
        to = Sys.Date() - 499 * i,
        env=NULL)
}))

prices <- do.call(cbind, c(prices, list(btc)))
library(quantmod)
# Use tryCatch() in case we try to get data too far in the past that 
# Oanda doesn't provide. Return NULL if there is an error, and Filter
# to only include data that has at least 1 row.
btc <- do.call(rbind, Filter(NROW, lapply(0:5, function(i) {
  tryCatch(getFX("BTC/USD", 
                 from = Sys.Date() -499 * (i + 1),
                 to = Sys.Date() - 499 * i,
                 env=NULL), error=function(e) NULL)
})))

symbols <- c(
  "UUP",
  "FXB",
  "FXE",
  "FXF",
  "FXY",
  "SLV",
  "GLD"
)
e <- new.env()
getSymbols(symbols, from=start(btc), env=e)
prices <- do.call(cbind, c(eapply(e, Cl)[symbols], list(btc)))
colnames(prices) <- gsub("\\.[A-z]*", "", colnames(prices))
head(na.locf(prices)[endpoints(prices, "months")])
#             UUP    FXB    FXE    FXF    FXY   SLV    GLD     BTC
#2010-07-31 23.74 156.15 129.88  95.38 114.60 17.58 115.49 0.06386
#2010-08-31 24.12 152.60 126.25  97.80 117.83 18.93 122.08 0.06441
#2010-09-30 22.84 156.33 135.81 101.00 118.57 21.31 127.91 0.06194
#2010-10-31 22.37 159.45 138.69 100.81 122.93 24.17 132.62 0.18530
#2010-11-30 23.50 154.72 129.30  98.87 118.16 27.44 135.42 0.27380
#2010-12-31 22.71 155.77 133.09 106.25 121.75 30.18 138.72 0.29190