【Python】 仮想通貨アービトラージ自動売買botの基本 【価格差の取得】

仮想通貨の裁定取引(アービトラージ)botの始め方 サムネイル

「 アービトラージをやって見たいけど価格差をリアルタイムで取得して、それから売買すると思うんだけど具体的なプログラムにするにはどうすればいいんだろう 」

という人へ向けてまずは各取引所の板から価格を取得して、そこから価格差を導き出すプログラムをアービトラージの基礎として解説しました。

 

前回は【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事でccxtライブラリを使用したPythonでのbitFlyer注文の方法を解説しました。

Pythonを使って仮想通貨(ビットコイン)で売買注文する方法 サムネイル

【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法

2019年7月7日

 

実践的なアービトラージbotを作るためというより、これから作ろうとする初心者の足がかりとなることを目標としています。

 

知識0から実践的なアービトラージができるプログラムが欲しい人はnoteで買える仮想通貨の自動売買botや関連noteをまとめてみたを参考にして見てください。

 

この記事を読めば「 仮想通貨アービトラージ自動売買botの基本 」を覚えることができます。

 

※JavaScriptが良い人はJavaScript(node.js)を使った仮想通貨アービトラージ(裁定取引)のやり方を読んでみてください。

JavaScript(node.js)を使った仮想通貨アービトラージ(裁定取引)のやり方 サムネイル

JavaScript(node.js)を使った仮想通貨アービトラージ(裁定取引)のやり方

2019年7月17日

 

アービトラージbotロジックの概要

「もっとも安い価格の取引所で買い、もっとも高い価格の取引所で売る」

ご存知のようにこれだけです。

 

そのために必要なのは各取引所の「リアルタイムの買い価格」「リアルタイムの売り価格」の二つです。

それぞれの取引所から二つのデータを集めて比較し、もっとも安い買い価格と、もっとも高い売り価格の二つをリアルタイムで比較して、ある条件以上の価格差になっていた場合に注文を入れる過程のコードにしたいと思います。

 

今回の記事で考慮しないポイント

・手数料(送金手数料や売買手数料)

・送金時間

・空売りを交えた売買(クロス取引)

・ビットコイン以外の通貨

・買い数量の調整

他にも精度を高めるための視点は色々ありますが、上記5つのポイントなどを考慮しつつ利益を出せるようにする実践的な部分は話が分岐して細かくなってしまうためここでは無視しています。

 

実際に利益を出していこうとするといくらくらいの価格差から実行するべきかどうかは、過去データを使って仮の送金時間などを考慮に入れてバックテストした方が良いでしょうね。

 

ですがその前にまずは動かせるようになりたいところです。

 

まずはターゲットにする取引所の板情報を取得しよう

今回はテストとして5つの国内取引所(bitbank・bitflyer・coincheck・liquid・zaif)を対象にしました。

 

取引所間のコードの違いを一つにまとめてくれるccxtライブラリを用います。以下のコマンドでインストールしましょう(ccxtのgithubはこちら

ccxtがよく分からない人はは【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事を参考にしてみてください。

 

対応している取引所は以下のコマンドかgithubのページで確認しましょう。

 

板情報を取得するコード

まずはそれぞれのターゲットでもっとも高い買い値(買い気配値)ともっとも安い売り値(売り気配値)を出力してみましょう。

上記の内容で出力すると以下のような結果が出力されます。

これで一先ず出力できました。

 

対象となる取引所を定義する

target_exchanges配列の中に5種類の取引所を用意しています。for ~ in 文で順番にtarget変数へ5種類の取引所の名前を格納して実行しています。

 

Pythonでfor文が分からない人はpython for文を初心者向けに解説!for文基礎はこれで完璧 – Udemyの記事を読んでみてください。

もしくはfor文やif文、もしくは関数などを体系だって学びたいという人は無料でハイクオリティ教材であるprogateでPythonの基礎編をこなすことをオススメします。

 

evalは文字列をスクリプトに直すコマンド

通常はccxtを呼び出す場合、ccxt.bitflyer()のように呼び出せば良いですが、’bitflyer’のように「”」シングルクォートで囲まれた文字列となっています。

したがって、’bitflyer’をスクリプトとして変換するためにeval(‘ccxt.’ + target + ‘()’)と言った書き方にしています。

 

if文

「if len (getboard[‘bids’]) > 0 else None」ではgetboard[‘bids’][0][0]の中身に対して条件分岐をさせています。

getboard[‘bids’][0][0]の中身が空っぽであればNoneという文字列を返します。

板が空になることは通常ないのですが何かあった際の保険のような形ですね。

 

もっともお得な組み合わせを出力しよう

5種類の取引所の中でもっとも高い買値と安い売値を見つけて差益を出してみましょう。

上記のコードを出力すると以下の答えが帰ってきます。

 

追加or変更した部分

単純にif文を使って前回(もしくはbest_bid、best_ask変数の初期値)の値を超える、下回るものならその値をベストなものとしてbest_bid、best_ask変数へと格納していくシンプルなコードです。

 

あとは注文するなりなんなりしよう

取引所によってはAPIにて成行注文はできないので基本はbestな価格帯とほとんど同じ価格で指値を入れましょう。

注文をするためにはAPIキーの読み込みが必要です。APIキーについてよく分からない人、実際の発注方法が分からない人は【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事を参考にする必要があります。

以下のようなコードを参考にしてccxtが使えるようにして注文していきます。

APIキーとAPIシークレットキーを取引所に応じて読み込まないといけません。

セキュリティ上の観点からも別ファイルで格納しておく必要があります。

 

別ファイルで格納しつつ、ファイルをimportして使えるようにする書き方は色々あるので調べてみてください。

(時間があれば追記します。)

 

仮想通貨アービトラージ自動売買botの基本 まとめ

仮想通貨アービトラージ自動売買botの基本 まとめ

今回の記事の内容を別の通貨で比較したり、ccxtライブラリで取得できる取引所全体で比較しても面白いかと思います。

ただし、アービトラージの難易度は世界への仮想通貨の普及に伴って高まってきています。

シンプルな方法やビットコインではなかなか利益を出していけないのではないでしょうか。

 

また、海外取引所を用いる場合はセキュリティなどももちろんですし、最近はKYC(個人情報の申請と認証)も世界的に厳しくなっているので実践する場合は引き降ろせなくなる事態に陥らないように少額から始めつつ、下調べを忘れないようにしましょう。

 

ビットコインバーゲンでは暗号資産に関わる全般の情報はもちろん、自動売買に関する記事もアップロードしています。

 

自動売買に興味がある人に特におすすめなのはプログラミング知識0で自作botが作るQUOREAです。

自分で作ったbotで利益を出せば利益に応じて歩合の収入を得ることができたり他のbotと成績を競うことができます。

詳細はQUOREA(クオレア)とは 実際に使って理解したメリットとデメリットで読んでみてください。

QUOREA(クオレア)とは サムネイル

QUOREA(クオレア)とは 実際に使って理解したメリットとデメリット

2018年9月6日