ビットコインの日足チャートをRとPlotlyでプロットしてみた

この記事ではRでインタラクティブなグラフをプロットできるPlotlyを使ってビットコインの日足チャートをプロットする方法についてまとめてみました。

Rユーザーにはこういうの需要があるのかな、、、。

今回はAPIを使ってデータ取得するのでそのあたりも各自使いたいようにしてもらえればと思います。

データ取得

まずはチャートをプロットするためのデータを取得します。

今回はcryptowatのAPIを使ってBitflyerのBTC/JPYの価格を取得します。

まずは以下のライブラリを読み込んで起きます。

# HTTPリクエストライブラリ
> library(httr)
# Json読み込みライブラリ
> library(jsonlite)

ローソク足のデータを取得するには以下のエンドポイントを指定します。

https://api.cryptowat.ch/markets/{取引所}/{通貨ペア}/ohlc

サポートしている取引所

今回はBitflyerのBTC/JPYを取得したいので以下のようにエンドポイントを指定してデータを取得します。

> URL <- "https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc"
> res <- GET(URL)

日足のデータはresultの86400に入っているのでJsonを読み込みつつデータフレームに変換しておきましょう。

データフレームに変換したらカラム名の設定と日付がUnixtimestampなので、「YYY-MM-DD」形式に変換しておきます。

レスポンスの詳細はここでは割愛しますので、気になる方はこちらを参照してください。

> data <- fromJSON(content(res, "text"))
> daily_data <- as.data.frame(data$result$"86400")
> colnames(daily_data) <- c("close_time", "open_price", "high_price", "low_price", "close_price", "volume", "quote_volume")
> daily_data$close_time <- as.Date(as.POSIXct(daily_data$close_time, origin="1970-01-01", tz = "Japan"))
> head(daily_data)
close_time open_price high_price low_price close_price volume quote_volume
1 2015-06-26 29020 32000 29020 32000 0.033 0
2 2015-06-27 32000 31700 31700 31700 0.001 0
3 2015-06-28 31700 31704 30550 31000 2.739 0
4 2015-06-29 31000 31220 30870 30870 1.280 0
5 2015-06-30 30870 31550 30900 31550 0.990 0
6 2015-07-01 31550 32950 31500 32850 4.680 0

日足チャートのプロット

データの取得が完了したのでPlotlyを使って日足チャートをプロットします。

typeに「candlestick」を指定して、始値や終値などをそれぞれ指定するだけで簡単にプロットすることができます。

library(plotly)
fig <- daily_data %>% plot_ly(x = ~close_time, type="candlestick",
                                                         open = ~open_price, close = ~close_price,
                                                         high = ~high_price, low = ~low_price) 
fig <- fig %>% layout(title = "BTC/JPY(Daily chart)")
fig
candlestick
プロットしたチャートにマウスをあてれば色々いじれると思います。
それにしても2017年のバブルをも大きく超える価格になってますね、、、今後どうなることやら、、、。
ちなみに作成したチャートをHTML出力したい場合は以下を実行すればできます。
htmlwidgets::saveWidget(as_widget(fig), "chart.html")