Caliphです!
仮想通貨の自動取引や口座確認をPythonからを行う時に使用する取引所のAPI、皆さんは使用していますか?
使っている人ならわかると思うんですが、現在の仮想通貨取引所のAPIは、取引所ごとに仕様が異なっており、Pythonでの使い方も複雑で難解です。
今回は、そんな悩みを全て解決することができるPythonのライブラリ、ccxtについて書いていきます。
ccxtとは
ccxtとは、1つのライブラリで複数の取引所のAPIが操作できるツールです。まずは、ccxtでできることやインストール方法をみていきましょう!
ccxtでできること
ほとんどの取引所には、アカウントを所有している人向けのAPI(プライベートAPI)と、アカウントを所有していない人でも利用することができるAPI(パブリックAPI)というものが存在します。
誰でも使用することができるパブリックAPIは、以下の操作をすることができます。
- ローソク足の取得
- 板情報の取得
- 現在価格の取得
次に、プライベートAPIでできることを紹介します。
- 新規の注文を行う(指値)
- 新規の注文を行う(成り行き)
- 注文のキャンセル
- 口座残高の取得
- 現在のポジションを取得
この記事では、トレードBOTを作成する時によく使用する以下のAPIの使用方法を主に説明します。
- ローソク足の取得
- 板情報の取得
- 現在価格の取得
- 新規の注文を行う(指値)
- 新規の注文を行う(成り行き)
- 口座残高の取得
ccxtのインストール方法
ccxtのインストールコマンドを以下に示します。私の環境は、macです。以下のコマンドは、linux系なら同じものを使用することができます。
#sudo pip install ccxt
windowsの方は、anacondaをしようしたり、自分で調べてみてください。pipを使うには、Python3がパソコンに入っている必要があります。
この記事には書いていませんが、まだインストールしていない人は、インストールしましょう。
ccxtを使う前の準備
次に、Pythonのccxtを取引に使う前に、対応している取引所を確認したり、使うために必要な宣言などをみていきましょう。
ccxtに対応している取引所を確認
Pythonのccxtでは、日本国内の取引所だけでなく、世界中にあるたくさんの取引所で扱うことができます。
初めに、ccxtで使用することができる取引所を確認しましょう。以下のコマンドを実行してください。
#python >>> import ccxt >>> from pprint import pprint >>> pprint(ccxt.exchanges)
実行すると、以下のように、出力されます。
Pythonのccxtではこの中にある取引所を扱うことができます。
'acx', 'allcoin', 'anxpro', 'anybits', 'bcex', 'bitbank', ・ ・ ・ (以下略)
日本国内の取引所はほとんどが対応していますが、使いたい取引所は上記の中にありましたか?この記事内では、Liquidという取引所を使用して説明をしていきます。
様々な関数を使用するために必要な宣言
まずは、関数を使用するための準備をします。以下のコードをコピペしてください。
パブリックAPIを使用するときは、このように準備をしてから書いていきましょう。
プライベートAPIを使用するときには、別の宣言が必要なので、そちらは以下の説明にに記載しておきます。
ccxtのパブリックAPI
パブリックAPIの使用方法を以下に説明します。パブリックAPIを使用するには、上記の準備が必要になるので、忘れないよう注意してください。
tickerの取得方法
tickerを取得する関数を以下に示します。
出力をすると、リスト形式で現在の相場情報が取得できます。たった数行で取得できるのはとてもすごいことですよね!
この中から、askが知りたいときは、ticker["ask"]と入力すると取り出すことができます。bidが知りたい場合も、同様に取得してください。
板情報の取得方法
次に板情報を取得します。板情報は、以下のコマンドで取得することができます。
pprintは、表示をわかりやすく綺麗にするため使用しています。
板情報なんてどうして取得する必要があるのか?と、疑問に思った方は、以下の説明を読みましょう。
取引所には仮想通貨を買いたい人と売りたい人がいます。これを、取引したい人数量と合わせて表形式にまとめたものが板情報です。
ローソク足の取得方法で説明した相場情報の取得方法だと、レートの取得はできますが、実際に売買した時の約定価格はわかりません。
例えば、取引所に0.5BTCを100万jpy/btcで売りたい人と、0.5BTCを200万jpy/btcで売りたい人しかいなかったとします。
この場合、一番安い価格が100万jpy/btcなので、tickerで価格を取得すると、この値段が表示されます。
しかし、私が1.0BTCを成り行きで買ったら、(0.5×1000000+0.5×2000000)の150万円で約定してしまいます。
この嫌な現象を防ぐには、板情報を取得して、実際の取引レートを自分で計算するしかありません。
ローソク足の取得方法
ローソク足の取得方法を説明します。例として、バイナンスのローソク足を取得してみましょう。
import ccxt import time from datetime import datetime binance = ccxt.binance() #ローソク足の取得 candles = exchange.fetch_ohlcv('BTC/USDT', timeframe = '15m') print(candles)
初めに、現在のタイムスタンプを取得します。次に、15m、1d、4h、などから、取得したいローソク足の時間を決めます。
上記のコードで取得したところ、500のローソク足が取得できたことが確認できました。
ccxtのプライベートAPI
以下にプライベートAPIの使用方法を示します。
プライベートAPIを使用する準備
プライベートAPIは、取引所の出金をしたり、売買を行ったり、口座照会を行うことができます。
このために、各取引所でAPIキーを発行し、プログラムの中に書かなければいけません。
下記の'’で囲まれている部分にAPIキーとシークレットキーを書いて使いましょう。
li_api_key ='' li_api_secert =''
新規注文の方法
新規注文をするためのプログラムを以下に示します。
他の取引所を使用する場合は、liquid という部分を変えてください。
tradebtcという変数は実際に取引する枚数を表しています。typeはmarketと代入すると成り行き買いすることができます。sideをbuyとsellにすることで、売り買いを変更することができます。
口座残高の確認方法
取引所の口座残高を取得する方法を以下に示します。
ディクショナリ形式で口座情報が取得できるので、必要なもののみをキー値で指定し、使ってください。
他に使用できるccxtの関数
ここまで、Pythonのccxtで使用することができる関数をいくつか紹介しました。これだけあれば、ほとんどのトレードツールなどを作ることができると思いますが、他にもどんなものがあるのが見てみましょう。
また、取引所ごとに、少しづつ使える関数が異なる場合があります。使える関数の確認も以下のコマンドでできるので、使ったことがない取引所で使用する場合は、みてみるといいかもしれません。
#Python
>>> import ccxt
>>> exchange = ccxt.liquid()
>>> print(exhange.has)
例外処理の必要性
私は、Pythonのccxtを使用して、自動トレードプログラムの開発を行っています。
しかし、取引所が原因のエラーがとても多く使い物になりません。そこで、取引所APIを使用するときには、必ず例外処理を実装しましょう。これがないと、5分とまともに動きません。
以下に、例外処理の書き方を示します。
while 1: try: #ここに動かしたい処理を書く except Exception as e: #ここにエラーがおきた時の例外処理を書く
私の場合は、lineの通知をしてくれるAPIと連携して、エラーがおきた際に、携帯に通知が来るようになっています。
まとめ
今まで、取引所ごとに異なるAPIを使用し、トレードBOTを作成していました。しかし、これはとても大変でバグも多くなってしまいました。
Pythonのccxtを使用するようになり、この問題が全て解決した時は感動ものでした。みなさんも取引所のAPIを使用するときは、ぜひccxtを使ってみてください。