取引所毎のAPIを意識しなくとも、各取引所のデータ取得や、注文などができてしまう非常に便利なCCXT。
今回はそんなCCXTの関数を具体的に紹介したいと思います。
※取引所はZaifを使用しています。他の取引所も基本的に同様の手順になります。
パブリックAPIとプライベートAPIって何?というお話については以前もお伝えしましたが、CCXTにもパブリックAPIとプライベートAPIの両方が存在します。その前提で話を進めます。
■パブリックAPIとプライベートAPIについて
・パブリックAPI⇒取引所のAPIキーを作成していない状態でも使用が可能
・プライベートAPI⇒取引所のAPIキーを作成しなければ使用できない
■前提
・Zaifの口座開設が完了している
・ZaifのAPIキーを取得している
・Pythonの基本文法が分かる
・CCXTのインストールが完了している
コンテンツ
CCXTでZaif APIを操作してみよう
以前書いた記事で解説していますが、CCXTではbitflyerやbitmexといったAPIを公開している取引所の操作を共通操作(共通関数を使う)で行う事ができます。
CCXTのパブリックAPI
CCXTのパブリックAPIからご紹介します。
パブリックAPIはAPIキーを準備する必要はありません。誰でも操作が可能なAPIになります。個人情報や、注文などは行えませんが、それでも数多くの取引所を対象にして、非常に有益な情報を取得する事ができます。
「fetch_ticker」- 価格情報の取得
Ticker情報を取得する際には「fetch_ticker」という関数を使います。
fetch_ticker関数の基本情報
■引数
・symbol:通貨ペア
・params:(取引所によって必要な場合指定)
※paramsの値はzaifやbitflyerなどであれば指定不要です。
■戻り値
・辞書形式
fetch_ticker関数のサンプル
■Pythonコード
1 2 3 4 5 6 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif_ticker_info = zaif.fetch_ticker(symbol='BTC/JPY') #価格情報取得 pprint(zaif_ticker_info ) |
■実行結果
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 |
{'ask': 703775.0, 'askVolume': None, 'average': None, 'baseVolume': 1767.8039, 'bid': 703605.0, 'bidVolume': None, 'change': None, 'close': 703775.0, 'datetime': '2018-10-19T10:55:18.423Z', 'high': 709990.0, 'info': {'ask': 703775.0, 'bid': 703605.0, 'high': 709990.0, 'last': 703775.0, 'low': 700000.0, 'volume': 1767.8039, 'vwap': 705831.0653}, 'last': 703775.0, 'low': 700000.0, 'open': None, 'percentage': None, 'previousClose': None, 'quoteVolume': 1247770909.978495, 'symbol': 'BTC/JPY', 'timestamp': 1539946518423, 'vwap': 705831.0653} |
「fetch_markets」- 取扱い通貨情報の取得
通貨情報を取得する際は「fetch_markets」という関数を使用します。
fetch_markets関数の基本情報
■引数
特に無し
■戻り値
・リスト形式、辞書形式
fetch_markets関数のサンプル
■Pythonコード
1 2 3 4 5 6 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif_markets_info = zaif.fetch_markets() pprint(zaif_markets_info) |
■実行結果(抜粋)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{'active': True, 'base': 'ZAIF', 'id': 'zaif_btc', 'info': {'aux_japanese': 'ビットコイン', 'aux_unit_min': 1e-08, 'aux_unit_point': 8, 'aux_unit_step': 1e-08, 'currency_pair': 'zaif_btc', 'description': 'ZAIF/BTC取引所。ZAIFとビットコインの取引が行えます。', 'event_number': 0, 'id': 7, 'is_token': True, 'item_japanese': 'ザイフ', 'item_unit_min': 1.0, 'item_unit_step': 1.0, 'name': 'ZAIF/BTC', 'seq': 7, 'title': 'ZAIF/BTC 取引所 - Zaif Exchange'}, 'limits': {'amount': {'max': None, 'min': 1.0}, 'cost': {'max': None, 'min': None}, 'price': {'max': None, 'min': 1e-08}}, 'precision': {'amount': -0.0, 'price': 8}, 'quote': 'BTC', 'symbol': 'ZAIF/BTC'}, |
「fetch_order_book」-板情報の取得
板情報を取得する際には「fetch_order_book」関数を使用します。
fetch_order_book関数の基本情報
■引数
・symbol:通貨ペア
・limit:(特に指定しなくともOK)
■戻り値
・辞書形式
fetch_order_book関数のサンプル
■Pythonコード
1 2 3 4 5 6 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif_order_book_info = zaif.fetch_order_book(symbol='BTC/JPY') pprint(zaif_order_book_info) |
■実行結果(抜粋)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'bids': [[701695.0, 0.0034], [701650.0, 0.0136], [701635.0, 0.0174], [701610.0, 0.0034], [701560.0, 0.0016], [701510.0, 0.08], [701505.0, 0.1], [701500.0, 0.012], ・・・・・ [694010.0, 0.0071], [694005.0, 0.001], [694000.0, 0.209], [693595.0, 0.0021], [693500.0, 0.02], [693385.0, 0.044]], 'datetime': None, 'nonce': None, 'timestamp': None} |
「fetch_trades」-取引履歴の取得
取引履歴を取得する際には、「fetch_trades」関数を使用します。
fetch_trades関数の基本情報
■引数
・symbol: 通貨ペア
・limit: 最大の取得データ数(指定しない場合は、自動で取引所の最大取得数が設定されます)
■戻り値
・リスト形式
fetch_trades関数のサンプル
■Pythonコード
1 2 3 4 5 6 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif_trades_info = zaif.fetch_trades(symbol='BTC/JPY', limit=2) pprint(zaif_trades_info) |
■実行結果
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 |
[{'amount': 0.0047, 'datetime': '2018-10-27T06:24:07.000Z', 'id': '134695179', 'info': {'amount': 0.0047, 'currency_pair': 'btc_jpy', 'date': 1540621447, 'price': 701585.0, 'tid': 134695179, 'trade_type': 'ask'}, 'price': 701585.0, 'side': 'sell', 'symbol': 'BTC/JPY', 'timestamp': 1540621447000, 'type': None}, {'amount': 0.0085, 'datetime': '2018-10-27T06:24:07.000Z', 'id': '134695178', 'info': {'amount': 0.0085, 'currency_pair': 'btc_jpy', 'date': 1540621447, 'price': 701585.0, 'tid': 134695178, 'trade_type': 'ask'}, 'price': 701585.0, 'side': 'sell', 'symbol': 'BTC/JPY', 'timestamp': 1540621447000, 'type': None}] |
CCXTのプライベートAPI
次にCCXTのプライベートAPIについて解説します。
プライベートAPIはAPIキーが必要になりますので、事前に取引所のAPIキーとsecretを取得しておきましょう。
ちなみにAPIで注文等を行う前のZaifの状態は以下の通りです。
■Zaifのチャート画面
チャート画面を見るともみ合いみたいな状態で、現在は701,100円くらいでしょうか。
■Zaifの取引画面
Zaifの口座には5,000円のみ入れています。この時点で注文なども出していないので、JPYも5,000円となっています。※円建てで通貨を購入するとJPYからその分マイナスされます。
「create_order」- 買い・売りの注文を出す
買い・売りの注文を出す場合は「create_order」関数を使用します。
いよいよプログラムで注文を出します^^
create_order関数の基本情報
■引数
・symbol: 通貨ペア
・type: 指値⇒limit、成行⇒market
・side: 買い注文の場合⇒BUY、売り注文の場合⇒SELL
・amount: 通貨枚数
・price: 指値の価格
・params: 取引所毎のパラメータ
■戻り値
・リスト形式、辞書形式
create_order関数のサンプル
指値注文で65万円に指値を入れましょう。購入単位は0.001BTCなので650円で購入する計算になります。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif.apiKey = 'APIキーを記載' zaif.secret = 'secretを記載' order_info = zaif.create_order( symbol = 'BTC/JPY', type='limit', side='buy', amount='0.001', price='650000', params = { "product_code" : "BTC_JPY" }) pprint(order_info) |
■実行結果
1 2 3 4 5 6 7 8 9 |
{'id': '388228435', 'info': {'return': {'funds': {'btc': 0.0, 'jpy': 4350.0, 'mona': 0.0, 'xem': 0.0}, 'order_id': 388228435, 'received': 0.0, 'remains': 0.001}, 'success': 1}} |
注文が通ったので「order_id(注文id)」が作成されており、「’success’:1」となっているので処理が正常に完了しています。
ちなみに、「’jpy’:4350.0」というのは日本円の買付余力になります。円建てで650円分の指値を入れたので、5,000円-650円=4,350円という意味です。
実際の画面の内容も以下の通り確認しておきましょう。
■実行後のZaifの注文一覧画面
今ccxtで実行した結果、未約定の注文が1件入っている事が分かります。
■実行後のZaifの取引画面
保有資産を見ると、JPY:4,350となっています。
「fetch_open_orders」- 未約定の注文一覧を確認
買い注文を出した後の、未約定の注文一覧を取得してみましょう。注文一覧を取得する際は「fetch_open_orders」関数を使用します。
fetch_open_orders関数の基本情報
■引数
・symbol:通貨ペア
・params:(取引所によって必要な場合指定)
※paramsの値はzaifやbitflyerなどであれば指定不要です。
■戻り値
・辞書形式
fetch_open_orders関数のサンプル
実際に未約定の注文一覧を取得しましょう。先ほど指値注文を入れましたので、現在、Zaifで指値注文を入れている状態になります。
■実行前のZaifの注文一覧画面
この注文が入っている状態で、以下の通りfetch_open_orders関数を実行します。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif.apiKey = 'APIキーを記載' zaif.secret = 'secretを記載' open_orders_info = zaif.fetch_open_orders( symbol = "BTC/JPY", params = { "product_code" : "BTC_JPY" }) pprint(open_orders_info) |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[{'amount': 0.001, 'cost': 650.0, 'datetime': '2018-11-04T05:04:49.000Z', 'fee': None, 'filled': None, 'id': '388228435', 'lastTradeTimestamp': None, 'price': 650000.0, 'remaining': None, 'side': 'buy', 'status': 'open', 'symbol': 'BTC/JPY', 'timestamp': 1541307889000, 'trades': None, 'type': 'limit'}] |
注文内容が正しく取得できました。
注文をキャンセル -「cancel_order」
注文をキャンセルするのがcancel_order関数です。
cancel_order関数の基本情報
■引数
・symbol:通貨ペア
・id:注文ID
■戻り値
・辞書形式
cancel_order関数のサンプル
では注文のキャンセルをしてみましょう。Zaifの画面を確認すると、現在、注文が一件入っている状態です。
■実行前のZaifの注文一覧画面
以下様にcancel_order関数で注文のキャンセルをしてみます。
■Pythonコード(事前に注文idを確認しておいて下さい)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import ccxt from pprint import pprint zaif = ccxt.zaif() zaif.apiKey = 'APIキーを記載' zaif.secret = 'secretを記載' cancel_order_info = zaif.cancel_order( symbol = "BTC/JPY", id = "order_idを記載", params = { "product_code" : "BTC_JPY" }) pprint(cancel_order_info) |
■実行結果
1 2 3 |
{'return': {'funds': {'btc': 0.0, 'jpy': 5000.0, 'mona': 0.0, 'xem': 0.0}, 'order_id': 388228435}, 'success': 1} |
■実行後のZiafの取引画面
注文がキャンセルされたので、保有資産(JPY:5000円)になっています。
もう一度注文を確認「fetch_open_orders」
さて、注文をキャンセルした状態で、再度「未約定の注文一覧」を取得しましょう。
上記と同じ「fetch_open_orders」関数を実行すればOKです。
ちなみに実行前にZaifの注文一覧画面を確認しておきましょう。
■Zaifの注文一覧画面
では、この状態で再度fetch_open_orders関数を実行しましょう。
■Pythonコード
※上述の「fetch_open_orders」のコードと同じ
■実行結果
1 |
[] |
注文が入っていない事が分かります。
取引所固有のAPI操作
CCXTでは取引所固有の操作も行う事ができます。
例えば、zaifにはあるけどbitFlyerには存在しない様なAPI操作があった場合、当然ですがccxtでは共通関数を用意していません。
ただ、ccxtからでも取引所特有のAPI操作を行う方法もあります。
全てのAPI操作に対応している訳ではありませんが、基本的にはccxtのオブジェクトの後ろにその関数名を繋げて使用する事ができます。どうしても使用したい取引所の独自関数があれば試す価値はあります。
また、わざわざccxtを使わなくとも、直接取引所のAPIにリクエストをしてもOKだと思います。
ccxtを経由したAPIリクエストも、取引所のAPIへの直接リクエストも混在しても良いので、必要なAPIの使い方はしっかりと把握して、APIを使用していくべきです。
まとめ
CCXTを使ってZaifAPIを操作する事で、CCXTで使用できる共通関数の威力を分かっていただけたのではないでしょうか。
取引所によって使用できる関数等は異なりますが、基本的な注文操作やキャンセル操作などはどの取引所でも可能です。
自動売買や、APIからの注文などをしたい場合には非常に役に立つライブラリです。