【Python】仮想通貨の自動アービトラージ(裁定取引)プログラム【ロジックと構築方法】

【Python&仮想通貨】ccxtの使い方:pythonで価格取得や残高確認できるAPI ccxt
自動トレードプログラムを開発するとなどに使用するccxtの説明や実装方法などを説明しています。

当記事では、2018年11月から開発を進め、実験を行なっていた仮想通貨自動アービトラージプログラムの、考え方論理、私が開発したアービトラージプログラムのコードについて詳しく書いています。自動取引プログラムを作りたいけど具体的な作り方がわからない方や自動取引がどのようなものか知りたい人は是非読んでみてください。

1.はじめに

この記事で説明しているプログラムコード、考え方、ロジックは、あくまで私が行なっている投資方法の情報を公開しているだけであり、プログラムの稼働による利益を保証するものではございません。プログラムに対する苦情とご指摘、動かすためのサポート、ご利用による損失や被害のについて一切の責任を追うことはできません。

2.アービトラージ(裁定取引)とは

はじめに

 当ブログで公開している"自動トレードプログラムの構築方法"では、アービトラージ (裁定取引)と呼ばれる投資方法を採用しています。アービトラージ とはどのようなものなのかを見てみましょう。仮想通貨を買うときや売るときには、取引所という売りと買いをマッチングさせる場所を使います。仮想通貨取引所は、国内外にたくさんあり、それぞれで買いと売りをマッチングさせているので、日足や週足などで見ると取引所ごとに差がありませんが、5分足や15分足では、価格の剥離が起こります。

 上記の図をみてみましょう。青い線が取引所A、赤い線が取引所Bを表しています。縦軸が、仮想通貨のレートで横軸が時間です。

図を見ると2つの取引所は連動していることがわかりますが、よく見るとレートに差があることがわかります。

このように、異なる取引所では同じ人たちが売買しているわけでないので、必ず価格の剥離が起こります。

具体的に価格剥離は、大口がしかけたときや悪い情報が公開されたときに起こる急激な価格変動時に起こりやすいと言われています。

実際のアービトラージ

本来のアービトラージでは、剥離が起きた時に安い取引所で買い、安い取引所に送金をし、その後に売りますが、ビットコインの価格変動は激しいので、送金中に損失が出てしまうレートに変動するかもしれません。そこで使うのが、クロス取引と呼ばれるものです。これは、送金する手間をなくすために、もともと、全ての取引所にJPYとBTCを入金しておいて、価格剥離時に同時に売り買いをするという投資手法です。次に、実際にアービトラージを行うときの手順をみてみましょう。以下の図をみてください。

取引所Aと取引所Bの口座にそれぞれ100万円と1BTCを入金したとします。

次に、取引所ごとに価格剥離が起きた後に剥離が消えたことを想定します。

レートは以下のように変動していきます。また、わかりやすく説明をするために、価格剥離は大きく設定しています。

【レート1】
取引所A    1000000 JPY/BTC
取引所B    1200000 JPY/BTC
【レート2】
取引所A    1000000 JPY/BTC
取引所B    1000000 JPY/BTC
【レート3】
取引所A    1200000 JPY/BTC
取引所B    1000000 JPY/BTC
【レート4】
取引所A    1200000 JPY/BTC
取引所B    1200000 JPY/BTC

次に、レート1〜4を下記の図に当てはめて、みてみましょう。

価格剥離が起きたときに利益を出すには図に書いてある矢印の位置で取引を行います。

図のように取引を行うと、以下のように取引所内の残高が変化していきます。

【レート1のときに取引所AでBTCを買いBでBTCを売る(増やす取引)】
安く買い高く売ることができているので日本円の残高が増えていることがわかります。

【レート2のときに取引所BでBTCを買いAでBTCを売る(口座残高を均等にするための逆取引)】
次に、図の中の清算をします。1つ前の取引では利益を出すことができましたが、口座残高がAとBの取引所で、BTCのみJPYのみと、別れてしまいました。これでは次の取引ができないので、価格剥離が無くなった時に、先ほどとは逆の取引を行います。
以下の図のように利益分をのぞいて、口座残高が元に戻ったことが確認できます。

【レート3のときに取引所BでBTCを買いAでBTCを売る(増やす取引)】
今度は、レート1と比べ取引所AとBの価格剥離が、逆転しました。1つ前の取引で口座残高を均等にしたので、ここでも取引を行うことができます。以下の図は取引後の口座残高です。

【レート4のときに取引所AでBTCを買いBでBTCを売る(口座残高を均等にするための逆取引)】
2つ前の取引と同じように、次の取引に備え価格剥離が消えたときに逆取引を行います。

利益の確認
1〜4のレートでアービトラージ(クロストレード)をし終わりました。この時の口座残高を初めの口座残高と比べてみると、日本円で40万円の利益が出ていることが確認できました。

公開しているプログラムでは今説明したアービトラージのトレードを24時間365日、会社に行っている間も学校に行っている間も寝ているときも自動で行うことができます。

また、仮想通貨のアービトラージ(裁定取引)では、短時間における価格変動が大きすぎるので、上記で説明したようにただ取引するだけでは、利益を生み出すことができません。公開しているプログラムでは激しい価格変動をする仮想通貨でも利益が生み出せるように設計されています。

3.自動トレードプログラムの概要

私が家で動作を確認した環境
Macbook pro 2016 メモリ16GB core i7

Python3.7

私が連続稼働させている環境
さくらのVPS デュアルコア メモリ1GB

centos7

Python3.6

トレードプログラムの投資手法
アービトラージ(クロス取引)

取引環境(使用取引所)
Liquid

coincheck
※このロジックとプログラムは仮想通貨取引所Liquidとcoincheckの取引可能口座が必要です。

※私の友人はwindows環境でも動かせているので、環境構築をしっかり行うと動作が可能なようです

4.過去の運用実績

私が実際にアービトラージプログラムを稼働している時の実績を公開したいと思います。

以下に、20万円を自動トレードプログラムで運用した過去の実績(グラフ化したもの)を示す。縦軸が稼働開始日(2019/5/5日)からの利益です。

また、当アービトラージプログラムには、LINE通知機能を搭載しているので、実際の取引データとして、LINE通知された取引の記録をグラフの下に添付いたしました。興味のある方は、ぜひご覧ください。

上記のグラフよりこの時の利益は、月率5.1%です。この月あたりの利益に12をかけた単純年率に変換すると年率61.2%になります。

投資には複利という考え方があります。もし毎月5.1%の利益をアービトラージの取引に再投資すると、次の月から元手+先月の利益を運用することになります。
複利による利益は"元手円(1+月率/100)^運用月 - 元手円"より下記になります。

200000(1+0.051)^12 - 200000 = 163297.649円

上記より、複利による理論上の年率は、(163297.649/200000)100 = 81.64%になります

年率80%で資産を運用した場合を想像してみてください。大変な金額になると思います。
もちろん仮想通貨市場の成熟により、利率の維持は難しいと思いますが、理論上の単純計算でここまで利益が出るのはすごいですよね!

※上記は利益は2019年5月稼動時のものなので、必ずこの利率で運用できるわけではありません。ただし、2019年の年始から5月目では月率3〜7%で運用ができています。

5.注意事項、免責事項

・自動トレードプログラムによる利益を保証するものではなく、考え方や理論を説明、私が開発し使用しているプログラムのコード公開と解説を目的としたものです。
・公開しているプログラムコード、考え方、ロジックは、あくまで私が行なっている投資方法の情報提供という形であり、プログラムの稼働による利益を保証するものではございません。プログラムに対する苦情とご指摘、動かすためのサポート、利用による損失や被害のについて一切の責任を追うことはできません。
・実績は将来的に失われる可能性がございます。
・プログラムを動かすためのサーポートはできかねます。
・私のプログラムを使用する場合は Liquid、coincheckの取引口座が必要です。
禁止事項
・許可なく公開、転送することはお控えください。

6.プログラムを動かすための準備

必要なもの

・LINEの通知用API

・取引所LiquidのAPI

・取引所coincheckのAPI

・Python3が動きインターネットが使えるPC

【Python&仮想通貨】ccxtの使い方:pythonで価格取得や残高確認できるAPI ccxt
自動トレードプログラムを開発するとなどに使用するccxtの説明や実装方法などを説明しています。

linenotify

このブログのプログラムには、ライン通知機能が搭載されています。まずは、ライン通知ようにlinenotify APIを取得しましょう。以下の説明にしたがってご登録ください。

LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。
初めに、上記のサイトにアクセスします。次に、右上のボタンからログインします。
ログインできたら、同じく右上のボタンからマイページに移動してください。

移動ができたら、アクセストークンの発行をしましょう。

通知される時の名前を設定し、”トークンを発行する”ボタンを押すと、APIキーが発行されます。一度しか表示されないので、必ずコピーしてください。

また、APIキーを忘れてしまった場合は、もう一度発行することができますので、初めからやり直してください。

取引所のAPI

取引所APIキーの発行方法は、ブログの主な内容とずれてしまうので、省略いたします。

Liquid とcoincheckのAPIキーとAPIシークレットキーの発行方法は、取引所の公式で説明しているので、そちらの説明をみて取得してください。

2つの取引所でそれぞれAPIキーとAPIシークレットキーが必要になりますのでご注意ください。

また、APIに許可する項目(権限)を選ぶことができる場合は、送金以外を許可してください。最悪、流失しても損失を少なくすることができます。

7.自動アービトラージ(裁定取引)プログラムのコード

-----------------------

【以下、近日公開予定】

-----------------------

8.プログラムの使い方

9.プログラムの詳しい説明

10.利益率を上げるためのロジック

11.まとめ

私が実際に使用しているプログラムには、改善点もたくさんあると思うので、ぜひ、ご自身の環境に合わせて、改良をしてみてください!