bot開発6.仮想通貨トレードに便利なccxtを使ってみよう

仮想通貨トレードに便利な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を利用する必要があります。少し手間ですよね。

トレードの基本的な流れとして

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

です。

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自動売買トレードの始め方」をもとに開発・自分なりの解釈用備忘録としています。


Python勉強したいのであればこれ一択


AIの技術、データ分析を身につけるにはPythonが取り組みやすいです。専門コースもあるので、まずは、気軽に問い合わせしてみてください!
技術者も多くなってきていますが、世界と戦うにはまだまだ人材不足です。高い年収を狙うなら今がチャンス!


フリーランスエンジニアが登録して欲しいエージェント


長くお世話になっているengineer-route。
単価、稼働日数、稼働時間相談も親身にのってくれます。しっかりしたサポート・コミュニケーションを交わすことで「はいってみた違った」というエンジニアあるあるを極力回避できると思います。私は当たりしかないです。