【Python&仮想通貨】ccxtの使い方:pythonで価格取得や残高確認できるAPI ccxt

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を使ってみてください。