我尝试获取加密货币市场数据有一段时间了,事实是我花了很长时间才找到一种在 R 中以清晰的方式导入它们的方法。
经过研究,我认为我为我们这些使用这种语言并愿意分享它的人找到了一种相当简单的方法。因此,下一个遇到同样问题的人就不必处理那么多问题。 我也认为如果其他人分享他们的做法会很好,如果有更简单或更快的方法,这会对我们使用 R 的人有所帮助。
对于此任务,我们必须使用币安API,请参阅文档以及如何获取其他市场数据这里。
要GET蜡烛图数据,我们可以使用
fromJSON
包中的函数RJSONIO
。
假设我们希望以1小时的间隔查看BTC/USDT,我们在一次请求中可以获取的最大观察量是1000,所以我们这样做:
Candlestick.data <- fromJSON("https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1h&limit=1000")
通过
View(Candlestick.data)
查看数据,我们可以看到这是一个list
列表,其中每个子列表包含1小时间隔对应的所有烛台数据(收盘价、最高价、交易量、交易数量等) .
要将列表更改为数据框,我们可以这样做:
i <- 1:length(Candlestick.data)
df <- sapply(i, function(i){as.numeric(unlist(Candlestick.data[i]))})
通过这样做,
df
的每一列对应于周期(1小时前、2小时前等),每行对应于不同的烛台数据。假设我们想要查看过去 1000 小时的所有 收盘价 ,正如我们在 文档 中看到的那样,这是每个列表的 第 5 个元素,因此我们可以通过 df[5,]
来完成此操作。
如果我们希望行是周期,列是烛台数据,我们可以使用
t()
转置矩阵,如下所示
df_t <- t(df)
现在获取收盘价 df_t[,5]
。
最后,为了使请求更容易,我们可以使用函数
paste0()
,现在,总而言之,我们可以这样做:
library(RJSONIO)
crypto_A <- "ETH" # the spot market crypto_A vs crypto_B must exist in Binance
crypto_B <- "BTC"
interval <- "15m" # see all the possible intervals in the documentation
observations <- "1000" # remember that the maximum is 1000
Candlestick.data <- fromJSON(paste0("https://api.binance.com/api/v3/klines?symbol=",crypto_A,crypto_B,"&interval=",interval,"&limit=",observations))
i <- 1:length(Candlestick.data)
df <- sapply(i, function(i){as.numeric(unlist(Candlestick.data[i]))})
df_t <- t(df)
希望这可以有所帮助,并记住阅读文档以获取更多详细信息。
这个问题已经引起了一些关注,所以我想使用现有的
R
可用软件包提供答案。
其中之一是
cryptoQuotes
,它使用高级函数从币安提取 OHLC
数据。
## 1) get BTCUSDT pair
## from Binance spot market
## for 15m intervals
btc <- cryptoQuotes::getQuote(
ticker = 'BTCUSDT',
interval = '15m',
source = 'binance',
futures = FALSE
)
btc
可以传入quantmod
和TTR
中的所有相关函数。下面是一个带有 MACD 和布林带的烛台图示例。
## 1) chart using
## quantmod
quantmod::chartSeries(
x = tail(btc, 100),
name = 'BTCUSDT',
theme = quantmod::chartTheme('white')
)
## 2) add MACD
## and Bollinger BAnds
quantmod::addMACD()
quantmod::addBBands()
可以通过
CRAN
安装该软件包,如下,
## install package
install.packages('cryptoQuotes')