こんにちは。一昨日サークルから追い出されました。50代の Ted です。後輩のみなさま50代の追い出しコンパ来てくれてありがとうございました。個人的に二次回、三次会と行きましたがどれも素晴らしい時間を過ごせました。老人の我々50代は満身創痍、疲労困憊、素直に引退です。
それでは最近なにかと話題になる仮想通貨の自動取引をしてみた話にうつります。
この記事はこのような取引を実装してみたという例を公開しているのみで、私個人及び MISW はこの記事を元に損害が生じても一切の責任を負いません。
自動取引の目的
- チャートに張り付いてなくても価格が下がってるときに自動で売って欲しい。暴落予防。
- 波を利用してちょこちょこ稼ぎたい。イメージは TradingView 提供の下のようなチャート。赤で買って黄色で売りたい。
実装方法
適当に Python で書いた。取引所では大抵 API を提供してるのでそこでデータを取ってきたり、売買の注文ができる。本当は某取引所の API 叩けるライブラリとかあったけど自分のお金が動くやつだし実装に合わせた仕様のクラスが欲しかったので作った。例えばこんな感じ。
注文がたまに通らなかったりするので、get_response(params)
って関数を再帰的に呼び出して50回くらいリクエストしても期待しているレスポンスが返ってこない場合、'cant access, exit recursion'
と諦めているわけである。再帰にしたのは params['nonce']
の値をアップデートしたかったため。このパラメータは過去にリクエストしたときよりも値が大きくなってなきゃいけないものらしいので毎回 time.time()
の値をいれてる。
実際の売買のロジックの実装については、取引所の API を叩くと直近 150件の取引履歴が取れるのでそれで買いと売りどっちが強いのかを見て、買いが強ければ買い、売りが強ければ売ることにした。下は例として2件の取引履歴。
売買について
ビットコインの取引がマイナス手数料で取引すればするほどお金がもらえるので、 BTC/JPY の取引で実験をした。毎回注文を買い付けるときは、量は、0.0001 単位。今回は実験なので買いは1万円までの制限を設けた。
コードにすると、 amount_buy = int((jpy_left/curent_btc_price) * 10000) / 10000
jpy_left
は購入に用いる日本円、ここでは jpy_left=10000に
制限。
current_btc_price
はビットコインの買付価格。
買付価格はそのときにでている板の一番下の売り値、売るときはその逆でやってみた。理由としては注文したらすぐ売買をしてほしいので。 例えば下の画像だと買うなら、1922750円で、売るなら1921985円といった感じ。
結果
合計稼働時間 48時間程度で損益は -1881円。最低値は-2058円。ちょっと微妙。ビットコインの相場は取引のプログラムを稼働させてる最中はあまり値段が変わらず横か、下がっていることがあった。マイナス手数料による利益は考慮しない。
実装の改善
- 売買の価格を変えた。
- 理由: 気配値の差だけで損しているから。
- 買いのときは一番高い買値+5円。売りなら、一番低い売値-5円。
- 上の画像でいえば、買いは1921990円。売りは 1922745円。
- 売買のロジックを根本的に変えた。
- 理由:損失をだしているから。それに単純な実装なので面白くもない。
- 先ほどと同じように取引履歴を持ってきて、長期トレンド、短期トレンド、短期トレンドのトレンドを計算して、それを元に売買の判断をすることにした。
- トレンドを出す関数は
corrcoef.py
のとおり。ちゃんと時間の情報を元に計算してもよかったけどめんどくさかったので単純に価格対indexで相関をだしてる。
改善後結果
合計稼働時間30時間程度で+635円ほどの利益。相場としてはこれを動かしてるときもあまり値段が変わらず横だったので、悪くないのではというところ。これもマイナス手数料による利益は除く。
今後について
感想
自分で書いたプログラムが自動でババババッって売買してるの見てるのめちゃくちゃ楽しい。