仮想通貨トレードに便利なCCXTという外部のライブラリがあるので、使ってみましょう。
Contents
ccxtとは
ccxtとは複数の仮想通貨取引所のAPI操作が集約されたライブラリです。
bitflyerでは、「sendchildorder」というAPIを利用して、pythonプログラムからBitflyerのサーバーに注文をだしました。
base_url = "https://api.bitflyer.jp" path_url = "/v1/me/sendchildorder" method = "POST"
しかし、coincheckの取引所を利用する場合、また、別のAPIを利用する必要があります。少し手間ですよね。
トレードの基本的な流れとして
- 現在のタイムスタンプを作る
- 注文価格や数量などのパラーメータを設定する
- パラメータをJSON形式に変換する
- 認証コードを作る
- 通信用ヘッダーを作る
- リクエストを送る
です。
2.以外はどの取引所を利用してもお同じ処理な流れです。その同じ処理をまとめてくれており、2.の処理を自分でカスタマイズできるライブラリということです。
取引所によってAPIの使用、メゾット名が異なっていたりします。注文をだすメゾットはbitFlyerでは「sendchildorder」、Zaifの場合は「trade」です。このライブラリを利用することで、共通メゾットを呼び出すだけで、あとのことはライブラリが裏で色々やってくれるのです。めちゃくちゃ便利です。
もちろん取引所のパブリックAPIとプライベートAPIを呼び出すことができます。
パブリックAPIでできること
- 取引所で取り扱っている通貨情報の取得
- 板情報の取得
- ローソク足の取得
プライベートAPIでできること
- 口座残高の取得
- 仮想通貨の取引(注文)
- 注文内容をキャンセル
- (未約定の)注文状況を確認
- 約定状況を確認
bot開発で、メインに使うパブリックAPIとプライベートAPIを表にまとめると以下の通りです。
実施内容 | 対応API | 利用メソッド |
---|---|---|
取引所で取り扱う通貨情報の取得 | Public | load_markets() |
板情報の取得 | Public | fetch_ticker() |
板情報+注文量の取得 | Pubulic | fetchOrderBook() |
ローソク足の取得 | Public | fetch_ohlcv() |
口座残高の取得 | Private | fetch_balance() |
仮想通貨の取引(注文) | Private | create_order() |
注文内容をキャンセル | Private | cancel_order() |
(未約定の)注文状況の確認 | Private | fetch_open_orders() |
約定状況を確認 | Private | fetch_my_trades() |
ccxtのパブリックAPI
準備事項|オブジェクト作成
ccxtライブラリを利用するには事前にインストールが必要です。
pip install ccxt
Bitflyerで出来ることを確認しておく
import ccxt from pprint import pprint bitflyer = ccxt.bitflyer() #出力 pprint(bitflyer.has)
ライブラリのimportを行います。このライブラリで後続の処理が行えるようになります。
bitflyer = ccxt.bitflyer()では、ccxtを利用し、Bitflyerの取引所を使う場合には最初に必ず書かなければならないコードです。
pprint(bitflyer.has)はCCXTライブラリにあるBitflyerのプログラムが、どの共通関数に対応しているかを確認するためのコードです。
]出力 {'CORS': None, 'addMargin': None, 'cancelAllOrders': None, 'cancelOrder': True, 'cancelOrders': None, 'createDepositAddress': None, 'createLimitOrder': True, 'createMarketOrder': True, 'createOrder': True, 'deposit': None, ・ ・ ・
ずらっと出力されたと思います。ccxtを利用することでできることが確認できました。Trueは利用できる。Falseは利用できないということになります。
この後のメゾット紹介では、常に読み込む以下のコードは割愛します。
import ccxt from pprint import pprint
取引所で取り扱っている通貨情報の取得
指定した取引所の通貨情報(通貨レート)は下記を実行して取得できます。
bitflyer = ccxt.bitflyer() markets = bitflyer.load_markets() #出力 pprint(markets)
markets = bitflyer.load_markets() は、bitflyerの取引所の通貨情報(通貨レート)を取得しています。
{'BCH/BTC': {'active': True, 'base': 'BCH', 'baseId': 'BCH', 'contract': False, 'contractSize': None, 'expiry': None, 'expiryDatetime': None, 'future': False, 'id': 'BCH_BTC', 'info': {'market_type': 'Spot', 'product_code': 'BCH_BTC'}, 'inverse': None, 'limits': {'amount': {'max': None, 'min': None}, 'cost': {'max': None, 'min': None}, ・ ・ ・
板情報の取得
bitflyer = ccxt.bitflyer() ticker = bitflyer.fetch_ticker(symbol='BTC/JPY') #出力 pprint(ticker)
{'ask': 3066797.0, 'askVolume': None, 'average': None, 'baseVolume': 2363.04577836, 'bid': 3065028.0, 'bidVolume': None, 'change': None, 'close': 3065028.0, 'datetime': '2022-09-08T06:30:31.963Z', 'high': None, 'info': {'best_ask': '3066797.0', 'best_ask_size': '0.02', ・ ・ ・
板情報+注文量の取得
取引所の板情報は、注文量と合わせてfetchOrderBook()メソッドでも取得できます。
bitflyer = ccxt.bitflyer() orderbook = bitflyer.fetchOrderBook(symbol="BTC/JPY") #出力 pprint(orderbook)
ローソク足の取得
取引所のローソク足の取得は、引数としてsymbol(通貨レート)、timeframe{時間足:’1m’, ‘5m’, ‘1h’, ‘1d’)を渡し、下記のように実行します。下記には15分足を作成する際のサンプルコードを示します。
bitflyer = ccxt.bitflyer() candles = bitflyer.fetch_ohlcv(symbol='BTC/JPY', # 暗号資産[通貨] timeframe = '15m', # 時間足('1m', '5m', '1h', '1d') since=None, # 取得開始時刻(Unix Timeミリ秒) limit=None, # 取得件数(デフォルト:100、最大:500) params={} # 各種パラメータ ) #出力 pprint(candles)
最後に
ccxtのパブリックAPIは個別の取引所と変わらず、口座情報をもっていなくとも簡単に利用できたと思います。活用方法として、データ分析のソース元としても利用できるかもしれませんね。
プライベートAPIを呼び出すには、事前に取引所のサイトでアカウント登録を済ませた後、APIキーおよびSecretキーを取得しておく必要があります。これは個別取引所のAPIを利用するのと変わりません。ぜひ、取得しておいてください。
※注意:本bot開発は「文系でもわかる!BitcoinのBOT自動売買トレードの始め方」をもとに開発・自分なりの解釈用備忘録としています。