今回はPythonで仮想通貨BOTを作成する上で、非常に便利なCCXTというライブラリについて解説します。
CCXTは簡単に言うと、取引所のAPI仕様を(あまり)気にする事なく、このライブラリだけで売買注文などができてしまう素敵な機能を持っているのです。
本記事では、CCXTの機能はもちろん、インストール方法や、実際にCCXTを使うサンプルコードなども載せております。
■前提知識
・Pythonの基本文法が分かる
・anacondaがインストールされている
・APIが使用可能な取引所に口座開設している(Zaif、bitFlyerなど)
コンテンツ
CCXTを使ってみよう
CCXTを使う理由:やりたい事は同じなのに、取引所毎にAPI仕様は異なる。。。
このサイトでは、これまでに取引所のプライベートAPIを活用して注文処理などを行う例を載せました。
しかし、様々な取引所を使用している場合は、取引所毎に注文用のAPIにリクエストを送信しなければなりません。
APIが公開されている取引所であれば、サンプルなどもあるので、決して難しくはないかもしれません。
ただ、どの取引所でAPIを操作する場合も、処理の内容はほとんど一緒なのです。
例えば、Zaifで注文等のリクエストを送信する場合は、以下の様な流れになります。
1)パラメータを作成(注文命令、注文一覧の取得等)
2)URLをエンコード
3)署名する
4)リクエスト用のヘッダを作成
5)リクエストを送信
これはbitFlyer等の他の取引所でAPIにリクエストを送信する場合も、流れは同じです。
だったら、各取引所への注文等の操作を共通でできるライブラリがあれば、とても楽ちんだなと思いませんか?
それを実現できるライブラリは既にあります!それが「CCXT」なのです!
CCXTの関数を知っておこう
様々な取引所のAPIに対応した機能を持っているCCXTですが、実際にどんな機能を持っているのでしょうか。
まずは、CCXTでどの様な関数を使用できるのかを確認しましょう!
■CCXTの代表的な関数・機能・引数
関数名 | 機能 | 引数 |
create_order() | 新規の注文を行う | ・Symbol (string) : 通貨ペア”BTC/JPY”等を指定する ・Type (string) : 指値なら”limit”、成行なら”market” ・Side (string) : 買いなら”buy”、売りなら”sell” ・Amount (float/int) : 購入枚数 (数量) ・Price (float/int) : 購入価格 (指値の場合に指定) |
cancel_order() | 注文をキャンセルする | ・OrderID (string) : 注文済みのorderIDを指定する |
fetch_ticker() | Ticker情報を取得する | ・Symbol (string) : “BTC/JPY”等を指定する |
fetch_balance() | 口座情報を取得する | – |
fetch_open_orders() | 注文一覧情報を取得する | – |
private_get_position() | ポジション情報を取得する | – |
fetch_order_book() | 板情報を取得する | – |
取引所で使用できるAPIの関数がCCXTでもカバーされている事が分かるかと思います。
CCXTのバージョン確認
実際にインストールする前にまず、CCXTの最新バージョンを確認しておきましょう。
Anaconda Promptを開いて以下のコマンドを実行すればOKです
■バージョン確認コマンド
[python]pip search ccxt[/python]
■実行結果(例)
[python]ccxt (1.17.360) – A JavaScript / Python / PHP cryptocurrency trading library with support for 100+ exchanges
ccxt-python (0.0.1) – A JavaScript / Python / PHP cryptocurrency trading library with support for 100+ exchanges[/python]
現時点での最新のバージョンを確認できました。
CCXTのインストール方法
では実際にインストールをしてみましょう!
CCXTをインストールするのはとっても簡単です。
バージョン確認の時と同じようにAnaconda Promptを開いて、以下のコマンドを実行するだけです。
■インストールコマンド
[python]pip install ccxt[/python]
■実行結果(例)
Collecting ccxt
~途中省略~
Successfully installed ccxt-1.17.360 eth-typing-1.3.0 lru-dict-1.1.6 web3-4.6.0
最後にSuccessfully~と表示されれば基本的に大丈夫です。またCCXTのバージョンなどはインストールのタイミングで異なります。
CCXTのインストールに失敗する場合
場合によってインストールに失敗する事があります。
原因は色々とあるのですが、「Visual C++ 14.0」がインストールされていないというエラーが結構多いです。
インストールした時に「error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools」という様なエラーが出たらこれが原因です。
本来はこのエラーメッセージに表示されたURLをクリックすればインストールできるのですが、こちらのリンク先からは2018年9月時点ではインストールできない様です。その場合はMicrosoftのページから「C++ 14.0」を直接ダウンロードしましょう。無料でダウンロードが可能です。
CCXTの最新化アップデート
CCXTは随時最新化されますので、手動で最新版にアップデートする必要があります。
アップデートする場合は以下のコマンドを実行すればOKです。※インストールしたての時はとりあえずそのままで大丈夫です。
■CCXTの最新アップデートコマンド
[python]pip install -U ccxt[/python]
CCXTを使ってみよう
では実際にCCXTを使ってみましょう。
使うと言っても注文などをする訳ではありません。
いくつかの関数を使ってみましょう。
CCXTの対応取引所を調べよう
CCXTでは様々な取引所に対応する共通機能があります。
実際に対応している取引所を確認できるメソッド「exchanges」があるので実行してみましょう。
使いか方はとっても簡単です。
■Pythonコード
[python]import ccxt
print(ccxt.exchanges)[/python]
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
[ "_1broker", "_1btcxe", "acx", "allcoin", "anxpro", "anybits", "bcex", "bibox", "bigone", "binance", "bit2c", "bitbank", "bitbay", "bitfinex", "bitfinex2", "bitflyer", "bitforex", "bithumb", "bitkk", "bitlish", "bitmarket", "bitmex", "bitsane", "bitso", "bitstamp", "bitstamp1", "bittrex", "bitz", "bl3p", "bleutrade", "braziliex", "btcalpha", "btcbox", "btcchina", "btcexchange", "btcmarkets", "btctradeim", "btctradeua", "btcturk", "btcx", "bxinth", "ccex", "cex", "chbtc", "chilebit", "cobinhood", "coinbase", "coinbaseprime", "coinbasepro", "coincheck", "coinegg", "coinex", "coinexchange", "coinfalcon", "coinfloor", "coingi", "coinmarketcap", "coinmate", "coinnest", "coinone", "coinsecure", "coinspot", "cointiger", "coolcoin", "crypton", "cryptopia", "deribit", "dsx", "ethfinex", "exmo", "exx", "fcoin", "flowbtc", "foxbit", "fybse", "fybsg", "gatecoin", "gateio", "gdax", "gemini", "getbtc", "hadax", "hitbtc", "hitbtc2", "huobi", "huobicny", "huobipro", "ice3x", "independentreserve", "indodax", "itbit", "jubi", "kraken", "kucoin", "kuna", "lakebtc", "lbank", "liqui", "liquid", "livecoin", "luno", "lykke", "mercado", "mixcoins", "negociecoins", "nova", "okcoincny", "okcoinusd", "okex", "paymium", "poloniex", "qryptos", "quadrigacx", "quoinex", "rightbtc", "southxchange", "surbitcoin", "theocean", "therock", "tidebit", "tidex", "uex", "urdubit", "vaultoro", "vbtc", "virwox", "wex", "xbtce", "yobit", "yunbi", "zaif", "zb" ] |
メジャーどころのbitflyer、zaif、bitmexが対応している事が分かりますね。
取引所の関数とCCXTの関数の紐づけ状態を確認
CCXTライブラリの機能を使った場合、各取引所のAPIで使える機能を確認する事もできます。
実際にコードと実行結果を見た方が分かると思いますので、ZaifのAPIを対象にして、実際に確認してみましょう。
■Pythonコード
[python]import ccxt
from pprint import pprint
zaif = ccxt.zaif()
pprint( zaif.has )[/python]
■実行結果
[python]{‘CORS’: False,
‘cancelOrder’: True,
‘cancelOrders’: False,
‘createDepositAddress’: False,
‘createLimitOrder’: True,
‘createMarketOrder’: False,
‘createOrder’: True,
‘deposit’: False,
‘editOrder’: ‘emulated’,
‘fetchBalance’: True,
‘fetchClosedOrders’: True,
‘fetchCurrencies’: False,
‘fetchDepositAddress’: False,
‘fetchDeposits’: False,
‘fetchFundingFees’: False,
‘fetchL2OrderBook’: True,
‘fetchMarkets’: True,
‘fetchMyTrades’: False,
‘fetchOHLCV’: ‘emulated’,
‘fetchOpenOrders’: True,
‘fetchOrder’: False,
‘fetchOrderBook’: True,
‘fetchOrderBooks’: False,
‘fetchOrders’: False,
‘fetchTicker’: True,
‘fetchTickers’: False,
‘fetchTrades’: True,
‘fetchTradingFees’: False,
‘fetchTradingLimits’: False,
‘fetchTransactions’: False,
‘fetchWithdrawals’: False,
‘privateAPI’: True,
‘publicAPI’: True,
‘withdraw’: True}[/python]
■解説
まず、実行結果の方を確認すると、ZaifのどのAPIが使えるのかが分かります(Trueのものが使えるAPIです)。Zaifで注文を行うための「createOrder」などが使用可能な事が分かりますね。
次にコードの方の解説をすると、まず先頭でCCXTのライブラリをインポートしています。
次にpprintというライブラリもインポートしています。これはデータを綺麗に構造化して表示してくれるpprintという関数を使用するためのライブラリです。最後の行でpprintを実際に使用していますね。
また、CCXTを使ってzaifのAPIを操作する場合はccxt.zaif()を使用します。
最後にpprintでzaif.hasというデータを表示しています。このhasというのが、ZaifのAPIで使える関数と、CCXTの関数がどの様に紐づいているかを教えてくれるデータになります。
まとめ
CCXTを使う事で、取引所のAPIの操作が非常に楽になる事が分かっていただけたかと思います。新しい口座を作る度にAPIに対応したコードも書いていたのでは、なかなか大変です。
でもCCXTの使い方を知っていれば、bitFlyer用のコードを作成しておけば、パラメータやメソッドを少し変えるだけでZaif用のコードも準備できてしまうのです。