こんにちは、毛糸です。
仮想通貨に再び注目が集まっています。
2017年に価格が高騰し、2018年に暴落した仮想通貨は、現代のバブルとして一躍有名になりました。
参考記事:ビットコインはバブルである
仮想通貨に関しては、その価格変動の激しさから、投機の対象ともなっていますが、適切にリスク管理しないとあっという間に資産が溶けてしまいます。
本記事では再び注目が集まっている仮想通貨に関して、統計プログラミング言語Rによる価格データの簡単な取得方法について解説します。
目次
仮想通貨パッケージcryptoをインストールする方法
Rはライブラリと呼ばれるプログラム・パッケージを利用することで、専門的な分析を簡単に行えるようになります。
仮想通貨の価格分析をするにあたっては、cryptoパッケージが役に立ちます。
cryptoパッケージに内蔵されている関数を用いることで、仮想通貨の価格情報を簡単に取得できます(公式マニュアルPDFはこちら)。
cryptoパッケージを利用するにはお使いのPCにRがインストールされている必要がありますので、下記を参考にして環境を整えてください。
仮想通貨価格の時系列データ(ヒストリカルデータ)の入手方法
まずはじめに、cryptoパッケージ(と付随して必要な他のパッケージ)をインストールします。
Rのコンソール画面に以下のコードを入力し実行します。
install.packages("crypto", dependencies = TRUE)
しばらくの間、各種パッケージのインストールが進みます。
インストールが進んだら、cryptoパッケージを読み込みます。
library(crypto)
これでcryptoパッケージに内蔵される各種関数が使用可能になりました。
たとえば、仮想通貨のリストを入手するには、以下のコードを実行します。
#仮想通貨のリストを表示 crypto_list()
出力結果は以下のようになります。
> #仮想通貨のリストを表示 > crypto_list() # A tibble: 2,212 x 6 symbol name slug rank exchange_url history_url <chr> <chr> <chr> <dbl> <chr> <chr> 1 BTC Bitcoin bitcoin 1 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 2 ETH Ethereum ethereum 2 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 3 XRP XRP ripple 3 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 4 BCH Bitcoin… bitcoin… 4 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 5 EOS EOS eos 5 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 6 LTC Litecoin litecoin 6 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 7 BNB Binance… binance… 7 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 8 BSV Bitcoin… bitcoin… 8 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 9 USDT Tether tether 9 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 10 XLM Stellar stellar 10 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… # … with 2,202 more rows
ビットコイン(BTC)の価格データからリターンとリスクを計算する
実際にデータを分析してみましょう。
ヒストリカルデータの取得
crypto_history()関数で、指定した仮想通貨の時系列価格情報を取得できます。
#crypto_history(coin = NULL, limit = NULL, start_date = NULL #end_date = NULL, coin_list = NULL, sleep = NULL) #仮想通貨の価格等情報を取得 #dateはyyyymmdd形式で。NULLとすると最長期間 BTC<-crypto_history(coin = "BTC", start_date = NULL,end_date = NULL)
日付を指定することで、特定期間のデータを取得することも出来ます。
BTC_saikin<-crypto_history(coin = "BTC", start_date = "20190501",end_date = "20190530")
head()関数、tail()関数で、データの先頭と最後尾を確認できます。
#データの先頭 head(BTC,1) #データの最後尾 tail(BTC,1)
crypto_history()で取得される情報は、時点の情報や始値、終値など、いくつかの列から構成されています。
それぞれの情報にアクセスしたければ、たとえば
BTC$close
のように$マークのあとに取り出したい列のラベルを指定します。終値を時系列データとして抽出
今回使うのはBTCの終値closeです。関数ts()にデータを入れることで、時系列(time series)データとして扱うことが出来ます。
#BTCの終値情報を時系列として取り出す。 #時系列情報の開始日をBTC$date[1]と指定 BTC_price<-ts(BTC$close,start=BTC$date[1])
価格チャート
BTC価格のチャートを描いてみます。データの図示にはplot()関数を使います。
#type="l"は線グラフ plot(BTC_price,type="l")
BTCの日次収益率(リターン)
日次収益率を計算します。
t日目のBTC価格を\( P_t\)、収益率を\( r_t\)と表すと、
\[ \begin{split}r_t=\frac{ P_{t}-P_{t-1}}{ P_{t-1}} \end{split} \]
と計算できます。分子は1時点前との差額を計算するdiff(_,lag=1)関数、分母は1時点前の価格を返すlag(_,k=-1)関数を用いて計算できますので、BTCの日次収益率は以下のようにして求めます。
#日次収益率 BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1) plot(BTC_return_daily,type="l")
BTCリターンの平均と標準偏差(リスク)
日次収益率の平均はmean()関数を用いて計算できます。
mean(BTC_return_daily)*100 #[1] 0.2808807 #表示は% #年率換算では mean(BTC_return_daily)*100*365 #[1] 102.5215
BTCの日次平均リターンは0.28%(年率換算102%)でした。この値はデータ期間によって変わります。
標準偏差はsd()関数で計算できます。
sd(BTC_return_daily)*100 #[1] 4.333606 #表示は% sd(BTC_return_daily)*100*365^0.5 #[1] 82.79343
リスクを示す標準偏差は日次で4.33%、年率換算82.79%でした。極めてハイリスクです。
リンク
まとめ
Rパッケージcryptoを用いて仮想通貨の価格を用意に取得できることを説明しました。
今後このデータを用いて、仮想通貨に関する統計分析をシリーズでお送りする予定です。
もし面白いと思っていただけたら、SNSでのシェアをよろしくお願いします。