試みにbitFlyerのビットコイン現金自動取引コードを書いた

現物のビットコインの自動売買を動かしてた。利益が出るかはまだ不明。

ソースコード

https://github.com/asterisk37n/bitflyer-trader
pybitflyerというwrapperがあったので使わせていただいた。

取引ロジック

3秒ごとにbitFlyerからbid, askを取得。買い時であれば成り行きで購入、そして売り時を待つ。売り時が来たら成り行きで売る。

売り時、買い時の判定方法は、次の通りであり、オシレーターを計算している。
3秒おきに、直近100件の取引を取得する。取引には、それぞれ

side (BUY もしくはSELL)
price

が入っている。そして、次のside_variable (サイド変数)といったものを導入し、次のbarometerを定義する。

side_variable := 1 if side is BUY, -1 if side is SELL
barometer := Σ side_variable[i] * price[i]

単純に、買いと売りの金額のどちらが多かったのか比較している。


さらにここで、現在に近い取引を重要視するため、過去の取引については(1-alpha)**nを掛けて、次のように割り引くことにした。

barometer := Σ side_variable[i] * price[i] * (1 - alpha) ** i

現在、alphaは0.001を試して運用中である。(1-0.001) ** 100 ~ 0.9であり、100件前の取引(およそ3分前)を、およそ、0.9倍している。


このbarometerが0.1を超えたら、買いが始まったとして買い、-0.1を下回ったら、売りが始まったと見て売っている。ただし、売りの条件には、買値より高いという条件も与えている。

このロジックを採用した理由は、京都大学にいる後輩が、
「直近100件のうち、買いが多かったら買って、売りが多かったら売るだけのロジックで100万円を12月に稼ぎましたよ」
と言っていたので、試してみたくなったからだ。ただし、それはbitFlyerの提供するFXであり、今ではその戦略は通用しなくなったとも言っていた。

現在の試験運用

試験的に、1万円を元手に、0.01ビットコイン単位で売買している(現在のビットコインは73万円)

Fig.1 取引のコンソール画面















Fig. 2 bid, ask, barometerそれぞれを正規化したもの



Fig. 3 bitFlyer上での取引記録。

注意事項

100件というのは、bitFlyerのAPIで取得できる制限である。それ以上のデータを保存したければ、個人的に保存していくのがよい。

barometerについて、たとえば10を超えたら売られ過ぎだと見て売り、-10を下回ったら売られ過ぎだと見て買う方法もある。

数日間、今の運用で試したら、その逆張り運用も試してみる。


コメント

このブログの人気の投稿

株式会社GAIAの説明会で驚いた - パチンコホールの売上や給与 -

Python機械学習scikit-learn入門 SVMの学習とクロス・バリデーション (K-fold)