gpt4 book ai didi

rgdax (coinbase) 数据没有按预期收集数据

转载 作者:行者123 更新时间:2023-12-04 10:46:45 29 4
gpt4 key购买 nike

我正在尝试使用 R 的 rgdax 包来下载一些历史价格。

我设置了我的 API key 等,并尝试在过去 24 小时内加载:

start <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
end <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")

df <- public_candles(product_id = "ETH-EUR", granularity = 300, start = start, end = end)

然而,这加载了“太多”数据。

我想要过去 24 小时的数据,但加载的数据比这多一点。

Head()
time low high open close volume
329 2019-01-22 16:25:00 104.09 104.12 104.09 104.09 16.03
328 2019-01-22 16:30:00 104.11 104.14 104.12 104.13 21.61
327 2019-01-22 16:35:00 103.88 104.12 104.10 103.97 161.35
326 2019-01-22 16:40:00 103.96 103.97 103.96 103.97 26.59
325 2019-01-22 16:45:00 103.97 104.20 103.97 104.19 48.57
324 2019-01-22 16:50:00 104.19 104.36 104.20 104.36 45.40

Tail()

time low high open close volume
6 2019-01-23 21:05:00 101.34 101.64 101.64 101.41 42.93
5 2019-01-23 21:10:00 101.42 101.58 101.42 101.54 24.03
4 2019-01-23 21:15:00 101.54 101.64 101.54 101.64 37.73
3 2019-01-23 21:20:00 101.60 101.68 101.60 101.61 35.97
2 2019-01-23 21:25:00 101.59 101.66 101.66 101.59 30.99
1 2019-01-23 21:30:00 101.59 101.62 101.60 101.59 12.91

我希望数据比 Sys.time() 早 24 小时开始 - 即 2019-01-22 21:30:00 而不是 2019-01-22 16: 50:00 或比 tail()

中最后一次观察早 24 小时

当我尝试以下操作时(从 86400 秒(24 小时)前开始)。

start <- strftime(Sys.time() - 86400, "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
end <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")

没有任何变化。

文档说明(第 11 页)需要:

start Optional parameter. Start time in ISO 8601
end Optional parameter. End time in ISO 8601

我是按照这个格式写的(有错请指正)

文档: https://cran.r-project.org/web/packages/rgdax/rgdax.pdf

编辑:

下面似乎过滤了数据,所以我只有 24 小时的 od 数据

x <- df %>%
tbl_time(index = time) %>%
filter(time > Sys.time() - 86400 - 288 * 3)

head(x , 1)
tail(x, 1)

但我现在只有 265 个 5 分钟的时段。 24 小时内有 288 个 5 分钟周期。直接从平台下载 24 小时的数据还是不错的。

最佳答案

我认为问题在于 rgdax::public_candles 的请求(如果我没记错的话,它使用了 curl)。

前奏

设置

这里有几个变量,后面会用到

# your variables
start <- strftime(Sys.time() - 86400, "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
end <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
product_id = "ETH-EUR"
granularity = 300
# request url
req.url <- paste0("https://api.pro.coinbase.com/products/", product_id, "/candles")

问题

现在,问题表明我可以使用 rgdax::public_candles 重现,但也可以简单地使用 jsonlite 并通过 url 访问数据> 直接

# fetching the data ourselves
res <- jsonlite::fromJSON(req.url)
res <- as.data.frame(res)
# checking the dates
res[['V1']] <- as.POSIXct(.subset2(res,1L), origin="1970-01-01")
c(min(res$V1),max(res$V1))
# [1] "2019-01-23 18:54:00 CET" "2019-01-24 00:42:00 CET" # Problem still here

解决方案

这是一个解决方案,我们基本上自己制定GET 请求,确保指定查询参数

# fetching the data ourselves - the return
res <- httr::GET(url = req.url,
query = list(start = start, end = end,
granularity = granularity))
res <- as.data.frame(t(matrix(unlist(httr::content(res)), nrow = 6)))
res[['V1']] <- as.POSIXct(.subset2(res,1L), origin="1970-01-01")
c(min(res$V1),max(res$V1))
# [1] "2019-01-23 00:40:00 CET" "2019-01-24 00:40:00 CET" # Problem solved

评论

只需在控制台中执行 rgdax::public_candles 即可让我们深入了解问题可能出在哪里。依我看,问题应该在那一行

content <- parse_response(path = req.url, query = list(start = start, 
end = end, granularity = granularity))

我不知道 parse_response 函数,我也没有进一步调查,但它似乎无法提供查询参数。

更新 1:

我检查了 curlopenssl(rgdax 中导入的两个包)和 parse_response 不是命名空间,也不在rgdax的命名空间中。我怀疑这是一个未导出的 rgdax 方法。

更新 2:

据推测,parse_response 是一个 non-exported method of rgdax。在方法内部,行

url <- modify_url(api.url, path = path, query = query)

应该处理我想的查询参数。但是,找不到方法modify_url。可能导致产生标准查询参数。

关于rgdax (coinbase) 数据没有按预期收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336092/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com