CCXTが便利な理由!CCXTライブラリをインストールしよう

前回の記事では、BitflyerのAPIを使って実際にBTC-FXの買い注文を出す方法を解説しました。

少し長い記事だったので、疲れた方も多いかもしれませんね(笑)。でもキチンと読んでくださった方は、いきなりライブラリの利用からから入る方よりも、間違いなく「本質的な部分」の理解が深まっているはずなので自信を持ってください!

さて、今回からはCCXTという外部のライブラリを使って、全く同じ「bitFlyerに買い注文を出す」コードを、もっと簡単に実装する方法を紹介します。

CCXTライブラリのgithubページ

なぜCCXTライブラリを使うのか?

1つ目の理由は、自分で長いコードを書かなくて済むからです。

前回の記事では、「sendchildorder」というBitflyerのAPIを利用して、pythonプログラムからBitflyerのサーバーに注文を出すことができました。しかし実際には、このAPIを利用するためには、以下のような手順を踏まなければなりませんでした。

1)現在時刻のタイムスタンプを作る
2)注文価格や数量などのパラーメータを設定する
3)パラメーターをJSON形式に変換する
4)メッセージ認証コード(暗号署名)を作る
5)通信用のヘッダーを作成する
6)リクエストを送る

このうち実質的に(2)の部分以外は、すべてのAPIリクエストで共通の処理です。なので毎回、自分で書かなくても、自動的に実行してくれたら楽ですよね。

例えば、買い注文を出す場合には、「指値か/成行か」「買いか/売りか」「注文ロット数は?」「指値の価格は?」といった随時、変更したい部分だけを指定し、それ以外の部分は1つの関数にまとめておいて、いつでも呼び出せるようにしておけば、プログラムを書くのが遥かに楽になります。

これをやってくれるのがライブラリです。

取引所ごとのAPIの違いを気にしなくていい!

2つ目の理由は、取引所ごとのAPIの仕様の違いを無くすためです。

APIというのは、各取引所が独自に開発しているものなので、取引所によって仕様が違います。例えば、bitFlyerでは「sendchildorder」というAPIで注文を出しましたが、Zaifの場合は「trade」というAPIを使いますし、bitbankであれば、「order」というAPIを使います。

通信に含めるパラメーターのルールも、取引所ごとに違います。例えば、Bitflyerは「size」で注文ロット数を指定しますが、Zaifは「amount」で注文ロット数を指定しなければなりません。

このような取引所ごとのAPIの違いを気にしながら、自動売買BOTを作るのはかなり面倒です。

1つの売買ロジックを複数の取引所で試したい場合でも、取引所ごとにpythonコードを書き直さなければなりません。また、裁定取引のように取引所間の価格差を利用した売買BOTを作りたい場合、取引所ごとに注文の方法が違うと非常に厄介です。

CCXTライブラリで出来ること

CCXTなどのライブラリは、このような「各取引所ごとのAPIによる注文の違い」を、見えない裏側でまとめて処理してくれます。そのため、先頭の1行目でCCXTライブラリを読み込めば、あとはすべての取引所で共通の関数を使うことができます。

例えば、以下のような関数(メソッド)がすべての取引所で「共通」で使えます。

create_order() ・・・ 注文を出す(成行/指値)
cancel_order() ・・・ 注文をキャンセルする
fetch_ticker() ・・・ ティッカー情報を取得
fetch_balance() ・・・ 口座残高を取得
fetch_order_book() ・・・ 板情報の取得

また各取引所ごとのAPIをCCXTライブラリを経由して直接使うこともできます。例えば、bitFlyerにしか存在しないAPIを使いたい場合は、上記の共通のメソッドを使わずに、直接、BitflyerのAPIを利用することもできます。

詳しい使い方は今後の記事で説明していきます!

CCXTをインストールしよう

まずはCCXTライブラリをPythonにインストールしていきましょう。Anacondaプロンプトを起動して以下の1行を打ち込むだけです。

pip install ccxt

すると以下のようにインストールが開始されます。

「Successfully installed … 」と出て、また文字が打てる状態になれば、インストールは完了です。

Bitflyerで出来ることを確認しておく

早速、CCXTライブラリを使ってpythonプログラムを1つ書いてみましょう。今回は、BitFlyerでできることを把握するために、対応している共通の関数(メソッド)の一覧を確認してみます。

エディタを起動して以下のコードを書いてみてください。

import ccxt
from pprint import pprint

bitflyer = ccxt.bitflyer()
pprint( bitflyer.has )

コードの解説

最初の「import ccxt」は、CCXTライブラリを利用するための1文です。これは今後、CCXTを使うときには必ず記述します。

2行目の「from pprint import pprint」は、pprint()を使ってデータを綺麗に表示するためにインポートしてみました。今までの記事では、すべてprint()だけで表示していましたが、改行がないと見にくいデータは、pprint()で表示した方が綺麗です。

3行目の「bitflyer = ccxt.bitflyer()」も、Bitflyerの取引所を使う場合には最初に必ず書かなければならないコードです。準備のようなものだと思ってください。

4行目の「bitflyer.has」は、CCXTライブラリにあるBitflyerのプログラムが、どの共通関数に対応しているかを確認するためのコードです。これをpprint()を使って黒い画面に表示しています。

実行結果

それでは実行してみましょう!
以下のように表示されました。

「True」と記載されているものは、Bitflyerでも使えます。
以下のような共通関数は使えるということですね。

cancelOrder() ・・・ 注文をキャンセルする関数
createOrder() ・・・ 注文を出す(買い/売り、指値/成行)関数
fetchBalance() ・・・ 残高を確認する関数
fetchTickers() ・・・ ティッカー情報を取得
fetchOrderBook() ・・・ 板情報を取得

一方、見てのとおり、結構、使えない(Flaseになっている)関数もあります。

前回の記事の意味

前回の記事を読んでくださった方ならわかると思いますが、CCXTライブラリは結局のところ、各取引所のAPIを裏側で叩いているだけのものが多いです。そのため、各取引所が該当するAPIを提供してくれていなければ使えません。

また上記の共通メソッドにはパラメーターを渡すこともできますが、どのようなパラメーターを渡すことができるかは、各取引所のAPIの仕様によって異なります。例えば、Bitflyerで BTC-FX のデータを取得するためには、”FX_BTC_JPY”というパラメーターを渡さなければなりません。渡さないとBTC現物のデータが返ってきます。

このようなルールも、裏で各取引所のAPIが動いていることを知っていなければ、なかなか自分で気づいたり調べることが難しいと思います。そのため、前回の記事ではわざわざ1度、APIだけで注文を出す方法を学びました。

さて、次の記事では、CCXTライブラリを使って、実際に「BitflyerFXの現在価格と口座の残高を取得して、購入額と数量を決め、買い注文を出す」という多くの売買BOTで必要にな一連の流れをまとめて勉強します!

(追記)

※ 最新版 Anaconda3.7 ではCCXTのインストールができず、3.6にダウングレードするとできたという報告があるようです。もし出来ない方は参考にしてください。

「CCXTが便利な理由!CCXTライブラリをインストールしよう」への2件のフィードバック

  1. 大変有益なサイトを作っていただき、ありがとうございます。
    さて、最新のAnaconda3.7ですとccxtのインストールがうまくいきません。
    3.6にダウングレードしたところ出来ましたので、ご報告させていただきます。
    今後とも当サイトの拡張を希望いたします。

    1. コメントありがとうございますm(__)m
      ご指摘いただいた情報、追記させていただきました。
      よろしくお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です