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ライブラリをインストールしよう」への6件のフィードバック

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

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

  2. BOT作成に挑戦したくて、このサイトで勉強させていただいております
    このような素晴らしいサイトを作っていただきありがとうございます

    ccxtのインストールでつまずき、ダウングレードしても失敗しました…
    色々と調べてAnaconda Promptを「管理者権限での実行」して「python -m pip install ccxt」したところインストールに成功しました
    同じところで躓きかけた方の参考になればと思いコメントしましたm(_ _)m

コメントを残す

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