仮想通貨の自動売買ツールをPythonで自作する 取引所のAPI

もくじ

API(エーピーアイ)とは?

 APIとは「Application Programming Interface」の略で、簡単に言うと異なるソフトウェア間の通信を行うための「窓口」というイメージです。

 まったく種類の異なるソフトウェア同士でも、このAPIの機能を搭載していれば、それを窓口としてデータを受け取ったり、送ったりすることができます。

 多くの場合、APIというとWEBAPI(ウェブエーピーアイ)という、WEBサーバーとのやり取りを行うものを指す場合が多いです。

 仮想通貨の自動売買ツールでもWEBAPIを利用して、取引所と通信し仮想通貨の価格情報を取得したり、売買注文の発注を行っています。

 この記事で自動売買ツールを運用するまでの7ステップをまとめてあります。

仮想通貨取引所のAPI(bitbank)

 前述したとおり、仮想通貨取引所にもAPIが用意されているため、様々な操作をAPIを介して行うことが可能です。

ビットバンクAPIで行えること

 私も使用している、仮想通貨取引所であるビットバンクのAPIで行えることを一部紹介します。

  • ティッカー情報の取得
  • 板情報の取得
  • 過去のローソク足データの取得
  • 自分の現在の資産状況の取得
  • 売買注文の発注
  • 出金の指示

 取引所で行える、ほぼ全ての機能がAPIでも操作が可能だと思って良いでしょう。APIが使用できるということはソフトさえ作れば、この動作を全て自動化することも可能ということです。

ビットバンクAPIの詳細はこちらから確認できます。
https://github.com/bitbankinc/bitbank-api-docs/blob/master/README_JP.md

APIを自動売買ツールで使う

 APIで様々な操作が出来ることはわかったかと思います。自動売買ツールがAPIを使って何をしているのか、私が自作した自動売買ツールを例に簡単に解説します。

  • ローソク足データの取得
  • 資産データの取得
  • 注文の発注、板情報の取得
  • 注文の発注状態を取得
ローソク足データの取得

 私の自動売買ツールは移動平均線を使用して売買タイミングを決定するため、移動平均線を作成するためにローソク足データの取得を、プログラム開始直後と一定間隔で行っています。

資産データの取得

 自分の資産以上の発注はできませんので、「日本円がいくらあるのか」「ビットコインがいくらあるのか」という、現在の資産状況確認のために資産データの取得を行っています。

注文の発注、板情報の取得

 売買注文も自動売買ツールですのでAPIを使って自動で発注をかけます。APIで発注する際も手動で行うのと同じように、注文数量と注文金額を指定しています。

 成行注文もビットバンク のAPIは可能ですが、指値注文を行っています。

注文の発注状態を取得

 発注した注文が約定したかを確認するために、注文が残っていないか注文状態を取得しています。

ビットバンクのAPIを使ってみる

 実際に仮想通貨取引所であるビットバンクのAPIを使う方法を解説していきます。

ビットバンクAPIを使ってみる(ブラウザ)

 APIは基本的にプログラミングをしたソフトに行わせるものですが、一部のAPIであればブラウザを使って簡単にデータを取得することができます。データの羅列が表示されるだけなので実用的ではないです…。

仕様の確認

 上記で紹介したビットバンクAPI仕様の「public-api_JP.md」を確認すると

「エンドポイントURL:https://public.bitbank.cc


とあります。

 これはAPIの受付先だと考えればよいです。このURLの先に仕様書の通りに指示を色々と付け足すことで、データの取得を行うことができます。

ローソク足データの取得

 では、ローソク足データをAPIを使用し取得してみます。「CandleStick」部分の仕様を確認すると、「/{pair}/candlestick/{candle-type}/{YYYY}」と記載されています。{ }が付いている部分に、仕様書を確認しながら必要情報を入れたものが以下のURLです。

https://public.bitbank.cc/btc_jpy/candlestick/1day/2022

 これをブラウザのURLバーに入力し、実行すると以下のような画面になります。

ビットバンクAPIをブラウザで使用し表示された1日ごとのローソク足データ
URLを打ち込むとデータが返ってくる

 URLバーに打ち込んだURLは、ビットコインと日本円の取引(btc_jpy)のローソク足データ(candlestick)を日足(1day)で2022年分のデータを要求する命令になります。

 URLバーに打ち込んだ文を確認すると、エンドポイントURLの後にbtc_jpyなどの情報が入っていることが分かると思います。

 このブラウザに表示されたデータは「Response」として、読み方が仕様書に書かれていますので、そちらを参考にご確認ください。

PythonでビットバンクAPIを使ってみる

 ここでは実際にPythonを使用して、ビットバンクAPIを使用する方法を解説していきます。

ビットバンクAPI用のPythonライブラリをインストール

 ビットバンクが公式で、APIを簡単に使用できるようにするPythonのライブラリを公開していますので、インストールします。インストール方法はこちらでご確認ください→https://github.com/bitbankinc/python-bitbankcc

 gitがインストールされていない場合は、gitのインストールも必要となります。

ローソク足データの取得

 ライブラリがインストールできたら、PythonでビットバンクAPIでローソク足データを取得してみます。以下のコードをコピペして実行すると、ブラウザで行っていたものと同じデータが表示されるはずです。

import python_bitbankcc                                             #ビットバンクAPIライブラリをインポート

bitbank_api_pub = python_bitbankcc.public()                         #ビットバンクAPIライブラリのインスタンス作成
data = bitbank_api_pub.get_candlestick("btc_jpy","1day","2022")     #APIを使用してデータ取得
print(data)                                                         #結果を表示

 これはビットバンクのアカウントや、口座を持っていなくても行うことができます。

資産の確認

 先ほどのプログラムはパブリック(公衆)となっており、一般公開されている板情報などを取得するためのものです。

 もう1つにプライベートなAPIも存在しており、ビットバンクに口座を持っている方しか利用ができません。このAPIを使用すると口座の資産額の確認や注文の発注、現在の注文確認などを行うことができます。

ビットバンクのサイトへ → 仮想通貨ならビットバンク

import python_bitbankcc                                             #ビットバンクAPIライブラリをインポート

API_KEY = 'あなたのAPI_KEYをここに入力'
API_SECRET = 'あなたのAPI_SECRETをここに入力'
bitbank_api_prv = python_bitbankcc.private(API_KEY, API_SECRET)     #ビットバンクAPIライブラリのインスタンス作成

data = bitbank_api_prv.get_asset()                                  #APIを使用してデータ取得
print(data)                                                         #資産データを表示

 お金をすでに口座に入金している方であれば、データの羅列の中に見覚えのある金額が表示されているはずです。

 このプログラムを使用するには、ビットバンクでAPIキーの発行が必要となります。キーの発行方法はこちらで紹介されています→ビットバンク公式サイト APIキーの発行方法

注意

 APIキーが流出すると売買・出金など、全ての操作が行われてしまいます。誰にも見せない見られないように厳重に管理しましょう。

仮想通貨の自動売買ツール APIまとめ

 APIを使用すると、様々な操作がプログラムからできるようになる事が、お分かり頂けたかと思います。

 自動売買ツールを自作しているのであれば、APIの使用が必須です。

 ですが、ビットバンクの場合には取引所が公式にライブラリも公開していますので、売買の注文や価格情報を取得すること自体はそれほど難しく無いでしょう。

この記事を書いた人

28歳の男性会社員です。
工場作業員勤務→専門学生→IT企業勤務を経て、現在は小さな会社の工場で品質管理の仕事をしています。

商品のレビュー依頼などは、お問い合わせページからどうぞ。

もくじ