という人へ向けてまずは各取引所の板から価格を取得して、そこから価格差を導き出すプログラムをアービトラージの基礎として解説しました。
前回は【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事でccxtライブラリを使用したPythonでのbitFlyer注文の方法を解説しました。
実践的なアービトラージbotを作るためというより、これから作ろうとする初心者の足がかりとなることを目標としています。
知識0から実践的なアービトラージができるプログラムが欲しい人はnoteで買える仮想通貨の自動売買botや関連noteをまとめてみたを参考にして見てください。
この記事を読めば「 仮想通貨アービトラージ自動売買botの基本 」を覚えることができます。
※JavaScriptが良い人はJavaScript(node.js)を使った仮想通貨アービトラージ(裁定取引)のやり方を読んでみてください。
草猫店長の目次ノート
アービトラージbotロジックの概要
「もっとも安い価格の取引所で買い、もっとも高い価格の取引所で売る」
ご存知のようにこれだけです。
そのために必要なのは各取引所の「リアルタイムの買い価格」「リアルタイムの売り価格」の二つです。
それぞれの取引所から二つのデータを集めて比較し、もっとも安い買い価格と、もっとも高い売り価格の二つをリアルタイムで比較して、ある条件以上の価格差になっていた場合に注文を入れる過程のコードにしたいと思います。
今回の記事で考慮しないポイント
・手数料(送金手数料や売買手数料)
・送金時間
・空売りを交えた売買(クロス取引)
・ビットコイン以外の通貨
・買い数量の調整
他にも精度を高めるための視点は色々ありますが、上記5つのポイントなどを考慮しつつ利益を出せるようにする実践的な部分は話が分岐して細かくなってしまうためここでは無視しています。
実際に利益を出していこうとするといくらくらいの価格差から実行するべきかどうかは、過去データを使って仮の送金時間などを考慮に入れてバックテストした方が良いでしょうね。
ですがその前にまずは動かせるようになりたいところです。
まずはターゲットにする取引所の板情報を取得しよう
今回はテストとして5つの国内取引所(bitbank・bitflyer・coincheck・liquid・zaif)を対象にしました。
取引所間のコードの違いを一つにまとめてくれるccxtライブラリを用います。以下のコマンドでインストールしましょう(ccxtのgithubはこちら)
1 |
pip install ccxt |
ccxtがよく分からない人はは【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事を参考にしてみてください。
対応している取引所は以下のコマンドかgithubのページで確認しましょう。
1 2 |
import ccxt print(ccxt.exchanges) |
板情報を取得するコード
まずはそれぞれのターゲットでもっとも高い買い値(買い気配値)ともっとも安い売り値(売り気配値)を出力してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None print(target, '売り:' , bid) print(target, '買い:' , ask) |
上記の内容で出力すると以下のような結果が出力されます。
1 2 3 4 5 6 7 8 9 10 11 |
$ python abitrage.py bitbank 売り: 1206748.0 bitbank 買い: 1206749.0 bitFlyer 売り: 1208925.0 bitFlyer 買い: 1209990.0 coincheck 売り: 1209187.0 coincheck 買い: 1209485.0 Liquid 売り: 1209541.0 Liquid 買い: 1209689.69999 Zaif 売り: 1207950.0 Zaif 買い: 1209965.0 |
これで一先ず出力できました。
対象となる取引所を定義する
1 2 3 4 5 6 7 8 9 10 11 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None print(target, '売り:' , bid) print(target, '買い:' , ask) |
Pythonでfor文が分からない人はpython for文を初心者向けに解説!for文基礎はこれで完璧 – Udemyの記事を読んでみてください。
もしくはfor文やif文、もしくは関数などを体系だって学びたいという人は無料でハイクオリティ教材であるprogateでPythonの基礎編をこなすことをオススメします。
evalは文字列をスクリプトに直すコマンド
1 2 3 4 5 6 7 8 9 10 11 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None print(target, '売り:' , bid) print(target, '買い:' , ask) |
したがって、’bitflyer’をスクリプトとして変換するためにeval(‘ccxt.’ + target + ‘()’)と言った書き方にしています。
if文
1 2 3 4 5 6 7 8 9 10 11 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None print(target, '売り:' , bid) print(target, '買い:' , ask) |
getboard[‘bids’][0][0]の中身が空っぽであればNoneという文字列を返します。
板が空になることは通常ないのですが何かあった際の保険のような形ですね。
もっともお得な組み合わせを出力しよう
5種類の取引所の中でもっとも高い買値と安い売値を見つけて差益を出してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] best_bid = 100000000 best_ask = 0 for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None if best_bid > bid: best_bid = bid best_bid_exchange = target if best_ask < ask: best_ask = ask best_ask_exchange = target print(best_bid_exchange, best_bid) print(best_ask_exchange, best_ask) print('差益は', best_ask - best_bid, '円です') |
上記のコードを出力すると以下の答えが帰ってきます。
1 2 3 4 |
$ python abitrage2.py bitFlyer 1175836.0 coincheck 1178572.0 差益は 2736.0 円です |
追加or変更した部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ccxt target_exchanges = ['bitbank','bitflyer','coincheck','liquid','zaif'] best_bid = 100000000 best_ask = 0 for target in target_exchanges: target = eval('ccxt.' + target + '()') getboard = target.fetch_order_book('BTC/JPY') bid = getboard['bids'][0][0] if len (getboard['bids']) > 0 else None ask = getboard['asks'][0][0] if len (getboard['bids']) > 0 else None if best_bid > bid: best_bid = bid best_bid_exchange = target if best_ask < ask: best_ask = ask best_ask_exchange = target print(best_bid_exchange, best_bid) print(best_ask_exchange, best_ask) print('差益は', best_ask - best_bid, '円です') |
あとは注文するなりなんなりしよう
取引所によってはAPIにて成行注文はできないので基本はbestな価格帯とほとんど同じ価格で指値を入れましょう。
注文をするためにはAPIキーの読み込みが必要です。APIキーについてよく分からない人、実際の発注方法が分からない人は【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法の記事を参考にする必要があります。
以下のようなコードを参考にしてccxtが使えるようにして注文していきます。
1 2 3 4 5 6 7 |
exchange_bid = eval('ccxt.' + best_bid_exchange + '()') exchange_bid.apiKey = 'あなたのAPIキー' exchange_bid.secret = 'あなたのAPIシークレットキー' exchange_ask = eval('ccxt.' + best_ask_exchange + '()') exchange_ask.apiKey = 'あなたのAPIキー' exchange_ask.secret = 'あなたのAPIシークレットキー' |
APIキーとAPIシークレットキーを取引所に応じて読み込まないといけません。
セキュリティ上の観点からも別ファイルで格納しておく必要があります。
別ファイルで格納しつつ、ファイルをimportして使えるようにする書き方は色々あるので調べてみてください。
(時間があれば追記します。)
仮想通貨アービトラージ自動売買botの基本 まとめ

今回の記事の内容を別の通貨で比較したり、ccxtライブラリで取得できる取引所全体で比較しても面白いかと思います。
ただし、アービトラージの難易度は世界への仮想通貨の普及に伴って高まってきています。
シンプルな方法やビットコインではなかなか利益を出していけないのではないでしょうか。
また、海外取引所を用いる場合はセキュリティなどももちろんですし、最近はKYC(個人情報の申請と認証)も世界的に厳しくなっているので実践する場合は引き降ろせなくなる事態に陥らないように少額から始めつつ、下調べを忘れないようにしましょう。
ビットコインバーゲンでは暗号資産に関わる全般の情報はもちろん、自動売買に関する記事もアップロードしています。
自動売買に興味がある人に特におすすめなのはプログラミング知識0で自作botが作るQUOREAです。
自分で作ったbotで利益を出せば利益に応じて歩合の収入を得ることができたり他のbotと成績を競うことができます。
詳細はQUOREA(クオレア)とは 実際に使って理解したメリットとデメリットで読んでみてください。
良かったらシェアしてね♪ /