Bitflyerや各取引所の個別APIをCCXTライブラリ経由で直接利用する方法

CCXTライブラリでは、どの取引所でも共通で使える関数が用意されています。

例えば、create_order()という注文を出すための関数は、Bitflyerだけでなく、Coincheck、Zaif、Bitmexなどでも共通で使えます。これはCCXTが各取引所ごとのAPIの仕様の違いを、見えない裏側で処理してまとめてくれているからです。

・参考:CCXTが便利な理由

しかし一方で、各取引所にしか存在しない独自のAPIを使いたい場合は、CCXTの共通の関数ではカバーされていない場合があります。

例:Bitflyerの特殊注文

例えば、ご存知のように、Bitflyerでは「特殊注文」ができます。これは、例えば、100万円の買い注文と同時に条件付で110万円の売り注文を出すIFD注文や、110万円の利確注文と90万円の損切注文を同時に出し、どちらか1つが通ればもう片方を自動的にキャンセルするOCO注文などです。

しかしこれらの特殊注文は、CCXTの共通の関数からは出すことができないため、BitflyerのAPIを直接使う必要があります。

各取引所のAPIを直接使う方法

最初にまず結論からいいます。
CCXTでは、基本的に取引所のすべてのAPIが「明示されない関数」として内部で実装されています。すべての取引所のAPIは、以下のようなルールで関数を作れば、CCXT経由でも使用することができます。

例)BitflyerのAPI
APIの種類 : プライベートAPI
APIのメソッド : GET方式
APIのパス : /v1/me/getcollateral

例)CCXTの内部で実装されている関数名

bitflyer.private_get_getcollateral()

つまり各取引所のAPIをCCXT経由で直接使いたい場合は、以下の3つの情報を調べればいいことになります。この3つの情報がわかれば、以下のルールで関数名を組み立てられます。

X)プライベートAPIかパブリックAPIか?
Y)メソッドはGET方式か?POST方式か?
Z)APIのリクエストURL(パス)は?

関数名 : .X_Y_Z()

例えば、今回の例であげたBitflyerのFXの証拠金や維持率を取得するためのAPI(v1/me/getcollateral)の場合、公式ドキュメントを調べれば、以下のように記載されています。


・BitflyerAPIドキュメント

個人アカウントの残高を取得するAPIが、プライベートAPIなのは明らかなので、上記のドキュメントから「.private_get_getcollateral()」が使えるんだろうな、とアタリをつけることができます。(/v1/me/ の部分は無視して構いません)

なお、どのようなパラメーターを渡すことができるか(または、どのようなパラメーターが必須か?)は、各取引所のAPIドキュメントで調べる必要があります。

プログラム初心者向けの流れ

何かやりたいことがある場合、まずはそれがCCXTの共通の関数で対応できないかを調べます。前の記事でも説明しましたが、各取引所がどのような共通の関数に対応しているかは、「.has」で調べることができます。

▽ 取引所で対応している共通関数を調べるためのコード


import ccxt

bitflyer = ccxt.bitflyer()
method_list = bitflyer.has

for key,value in method_list.items() :
	if value == True:
		print( key )


これを実行してみると、Bitflyerでは以下の共通の関数に対応していることがわかります。

共通の関数一覧

cancelOrder()
createOrder()
createMarketOrder()
createLimitOrder()
fetchBalance()
fetchL2OrderBook()
fetchMarkets()
fetchOrder()
fetchOrderBook()
fetchOrders()
fetchTicker()
fetchTrades()
withdraw()

もしこれらの関数で、やりたいことができなさそうであれば、上記の方法を使って Bitflyer のAPIを直接利用することを検討します。

なお、今回説明した内容はすべてCCXTの公式マニュアルに記載されています。プログラムのAPI仕様書や英語を読むことが苦手でない方は、そちらを読んだ方がいいと思います。公式マニュアルは以下です。

・CCXT公式マニュアル

コメントを残す

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