BTC_JPYのTicker情報を集計・可視化してみた【bitFlyer Realtime APIの時系列分析】
はじめに
twitter界隈でpythonによる仮想通貨BOTなるものをつくったよーというツイートが流れる度に、私も早く作りたい…と焦りを募らせています。
BOTの開発自体は比較的難しくないと思いますが、儲かるBOTをつくるためにはデータの特性をよく理解しないと、やみくもに作っても精度が低かったりとよくわからないものができあがってしまうため(体験談)、辛抱強くデータを舐め回した後にしっかりとしたアルゴリズムを作りたいと思う次第です。
さて、ようやく一週間分のデータを収集することができたので、基本的な統計解析を行いたいと思いますー。
分析対象
対象チャンネル:
以下のRealtime APIから取得できる情報をmongodbに溜め込んでいます。
BitCoinのリアルタイムデータを取得する。 - 仮想通貨の週末自由研究
・'lightning_ticker_BTC_JPY' : ビットコイン取引所の相場情報
・'lightning_ticker_FX_BTC_JPY' : Lightning Web(レバレッジ取引できるほうのBTC相場)
・'lightning_ticker_ETH_BTC' : Lightning Web上のイーサ?ビットコインで買えるのか。買ったことないのでよくわからないが参考程度に。
分析期間:
2017年11月19日(日)13:00ごろ ~ 2017年11月25日13:00ごろ(土)
分析項目
①ltp(最終取引価格)の1時間ごとの平均値、標準偏差をみます。どの時間帯が激しく変動しているのか、穏やかなのかをざっくりと掴みます。
tickerで取得できる項目は過去記事へ
bitFlyerのRealtime APIで取得したデータを分析してみる - 仮想通貨の週末自由研究
②volume(取引量)の1時間ごとの平均値、標準偏差を出力し、時間帯別取引量の変動をみます。しかし、この取引量は売りなのか買いなのか種類がわからないので、ざっくりとみるだけにします。
(かなり大雑把な)分析方法
1.mongodbから取得したデータをpandasでDataFrame化
df = pandas.DataFrame(data)
2.日付と時刻(1時間間隔)でグループ化
df.groupby*1
3.2.のdescribe()で一時間ごとの平均値と標準偏差を取得
df.groupby*2.describe()
4.3.の結果をプロット
df.groupby*3.describe().plot()
分析結果
①ltp(最終取引価格)の1時間ごとの平均値、標準偏差
サンプルデータ
まずは、サンプルデータの集計結果を下表に示します。
BTC_JPY | FX_BTC_JPY | ETH_BTC | |
1時間平均取得データ数 | 49633 | 69291 | 3620 |
11/19 13:00 - 11/25 13:00 までの総取得データ数 |
7097535 | 9908595 | 517678 |
1時間の平均サンプル数はBTC_JPYは50K、FXは70K、ETH_BTCは3Kとなっていました。ビットコインとイーサの更新頻度の差がすごい...。一週間の合計サンプル数はAPIから受け取ったデータをそのまま保存するとFX_BTC_JPYで10Mとなります!そんなにいらない...分析するときにメモリが足りない...今後どう扱うか考える必要あり。
ltp(最終取引価格)の1時間平均値の推移
以下に各レートの1時間平均値の推移を示します。
今週はイーサがかなり値上がりしているようです。また、BTC_JPYとFX_BTC_JPYの変動は1時間単位でみるとほぼ同じようにみえます。
ltp(最終取引価格)の1時間標準偏差の推移
以下に1時間ごとの標準偏差の推移を示します。
BTC_JPYと_FX_BTC_JPYを比べると変動自体は似ていますが、変動の大きさでいえばFX_BTC JPYが大きい、つまり心臓に悪い相場ということになります。まぁBTC_JPYもたいがいですが...
イーサの変動はよくわからないのでスルーします。
ltp(最終取引価格)の11/19-25の時間帯別標準偏差
ここで今回一番知りたかったこと、時間帯で変動は異なるのかどうか。
日本円での取引だからなのか、ビットコインの取引が日本で活発だからかなのかわからないですが、午前5時頃がもっとも変動が少なく、昼~夕方・夜中に変動が大きくなっています。日本人の取引が活発になりそうな時間帯に変動が大きくなっているので、なんとなく納得できる形となっています。イーサのほうはわかりません。ここで検定でもして有意であることを証明するべきですが、趣味でやっているので、「なんとなく違いがありそうだ」でとどめます。
②volume(取引量)
すみません。volumeをみてましたが特に変動はありませんでした。というのも24時間取引量なので、差分をとって時間帯別に合計したりと加工が必要のようです。あいまいな指標をこねくり回すより、Tickerとは別チャンネルのExecution(約定情報)のsize(取引量)を集計したほうがbuy,sell別に変動を見ることができたりとメリットがあるので、次回集計・分析します。
最後に
mongodbとpandasで、あっという間に集計、可視化ができて大変捗りますが、
いかんせんメモリが足りない。
メモリが128GBくらい欲しいです。16GBだとかなり厳しい…
もしくはメモリ節約できる技術力が欲しい…