Python
機械学習
Bitcoin
xgboost
仮想通貨
More than 1 year has passed since last update.

ビットコインの買い時を予測できるか実験してみた結果の共有です.

参考になりそうでしたら幸いです.



仮想通貨とは


  • ビットコインが有名.他にもアルトコインと呼ばれる仮想通貨がある.

  • 最近何かとニュースになってる


    • ビックカメラ、仮想通貨を店頭で利用開始1

    • YouTuberヒカルVALU騒動2

    • “ビットコイン”女性遺棄事件3

    • COMSA4





アルトコインとは


  • ビットコインの代わりとなるべく作られた通貨

  • 半年間で100倍以上に価値が上がる通貨も存在5

  • 数百とか数千種類のアルトコインが存在.

  • 現時点では投機目的で利用が主?

  • 通貨ごとに用途が異なる.

  • 2017年8月時点でも100%近く上昇するコインも存在.(e.g. Lisk6, Bitcoin Cash7)



仮想通貨への投機のメリット?


  • 一日の変動が激しい.(1日で100%以上変動することもある.)

  • ビットコイン以外にもアルトコインと呼ばれるコインが腐るほどある(数千種類)

  • 数百倍に価値があがるコインも存在

  • 良いニュースがあると一気に価格が高騰する



なんで価格変動を予測しようとしたのか?


  • 短時間だと雰囲気で変動していそうな感があった.

  • 自分でやると感情に左右されるので機械に取引してほしい.

  • 買ってる人たちは基本投機目的なはず.



まずは眺めてみる

image.png

正規化した各種仮想通貨の推移


  • 7月まではビットコインもアルトコインも同じように変動

  • 変わり始めたのは今年の8月以降(ビットコインの分裂あたりから)

  • 中期の傾向は変わりやすいので,コンピュータの予測には向いてなさそう.

  • 大きな価格の変化はイベントなどの外部情報によるもので予測は難しい(私には分からないので,短期の小幅な変動予測を狙う)

  • 小幅ならパターンでなんとかなりそうかも.



方針


  • 長期トレードはやらずに短期トレードで小幅の利益を積み重ねていく.(小さい利益をコツコツと)

  • 超高速取引(HFT)8とかはやらない(よく知らない)

  • 数分間ごとに買いのタイミングを判断させ,売りのタイミングは閾値で決める.

  • イベントでの変動は捨てる.

  • 短期間での変動を予測して損切りでなるだけ損しないようにする.



お題


  • ビットコインの価格が3000円(0.6%程度)上がれば正のサンプル

  • ビットコインの価格が1000円(0.2%程度)下がれば負のサンプル

  • 5時間放置しても閾値に達しない場合は負のサンプル

  • F値を最大化

ビットコインのみなら手数料が0といった取引所もある(期間限定)ので,precision(賭けたときの勝率)が25%を超えれば利益が出るはず.



データセット


  • 3分おきに取得したデータ

  • 2017-05-27 〜 2017-08-26

  • 訓練データ: 33,000件(2017-05-27 〜 2017-08-07)

  • 検証データ: 8,300件(2017-08-08 〜 2017-08-26)

  • 検証データの33%が正のサンプル(結構チャンスある)



アプローチ



特徴選択


  • レート情報


    • 直近24時間の最高値/最安値/平均

    • 15分/60分/240分レートの移動平均/移動分散との乖離率



  • 板の情報


    • 売り買いどちらがどれ位多いか

    • どれ位板に出ているかとか





モデル


  • XGBoost9



性能はどうだったのか?

-
Alt + Bit
Bit Only

Positive Rate
0.329
0.330

Accuracy Score
0.672
0.683

Recall Score
0.005
0.045

Precision Score
0.636
0.914

F1 Score
0.010
0.085

となっており,アルトコイン情報は無視して良いっぽい.



得られた知見


  • アルトコインも特徴量に含めると逆に性能は下がったので,ビットコインのみで判断して良さそう.

  • 板情報を特徴量としてもRecallが改善されない.(見せ板みたいなものに引っかかってる?)



今後の課題


  • 指値で買える前提なので,成り行きでどの程度か算出する必要あり.

  • 利確と損切りのラインが適当すぎるので要改善.

  • 少額にしないと,自身の買いや売りが壁になってどうしようもなくなるので,recallを改善しないと難しそう.

  • 他取引所との価格差も特徴量になりそう.

  • キリの良い数字には大量の売りが発生していたりするので,売り板からの特徴量の抽出方法を改善する必要あり.



まとめ


  • 頻度は低いが9割当たるタイミングが存在

  • 指値で売り買いできる前提なので改善が必要そう.

  • 特徴量としてアルトコインを利用しないほうが現時点では良さそう.

  • 他の取引所との価格差も特徴量となるかも



References