Binance APIわかりづらくない?
最近になってまたアツくなってきているブロックチェーンや仮想通貨。
私は、割と昔から取引所として取り扱っている通貨の多いBinanceを利用しています。
BinanceのAPIを使って自動取引やシミュレーションができたら面白そうと思い、APIについて調査しているところ。
BinanceのAPIについては以下のDocumentが。
https://binance-docs.github.io/apidocs/spot/en/
情報としては十分なのだろうが、いまいちどのように使えばよいか分からない。。Get Startedみたいなページが欲しい。。
ただ、調べてみてもPythonで提供されているAPIを使った簡単な記事しかなく、、やるならJavaとかでやりたい。
そんなわけで少しずつBinance APIを読み解いて何ができるかメモしていく。
ちなみにBinance API自体はlinuxのコマンドで実行する形式での説明が記載されているので、まずはそこの実際の使い方から見てく。
メモ
単に市場の情報を取得するような場合は、特に鍵を使ったAPIの処理は必要ない様子。
一方で、実際のTradeや自分のアカウントに関わるような処理を行う場合にはSIGNED Endpoint securityというAPI Keyを用いたEndpointを用いて実施しないといけないみたい。
SIGNED Endpoint securityではGETのパラメータにsignatureを付与する必要があり、このsignatureは自分の秘密鍵でメッセージの内容を暗号化したものみたいです。
この段取りがちょっとめんどくさい。
以下、お試しのメモ。
#! /bin/bash
TIMESTAMP=$(date +%s%3N)
API_KEY=abcd... <= 自分のAPI Key
SEC_KEY=efgh.... <= 自分のSecret Key
ENDPOINT=https://api1.binance.com
REQ_URL=/sapi/v1/capital/config/getall
SIGNATURE=$(echo -n "timestamp=${TIMESTAMP}" | openssl dgst -sha256 -hmac "${SEC_KEY}" | sed s/"(stdin)= "//)
curl -H "X-MBX-APIKEY: ${API_KEY}" -X GET "${ENDPOINT}${REQ_URL}?timestamp=${TIMESTAMP}&signature=${SIGNATURE}"
コマンドの中身もメモ
# 最後の改行を出力しない。(普段 n つけないんで。。)
echo -n
# hmac-sha256で暗号化されたメッセージのダイジェスト値を秘密鍵を用いて計算する。
echo -n "messages" | openssl dgst -sha256 -hmac "secret_key"
# 現在時間をエポック秒で取得。ミリ秒込み。
date +%s%3N
# エポック秒 ⇒ フォーマット形式
[root@localhost ~]# date "+%Y-%m-%dT%H:%M:%S.%3NZ" -ud @1499827319.559
2017-07-12T02:41:59.559Z
こんなレスポンスが。document通り。
[{"coin":"STPT","depositAllEnable":true,"withdrawAllEnable":true,"name":"Standard Tokenization Protocol","free":"0","locked":"0","freeze":"0","withdrawing":"0","ipoing":"0","ipoable":"0","storage":"0","isLegalMoney":false,"trading":true,"networkList":[{"network":"ETH","coin":"STPT","withdrawIntegerMultiple":"0.00000001","isDefault":true,"depositEnable":true,"withdrawEnable":true,"depositDesc":"","withdrawDesc":"","specialTips":"","...
ちなみに、Javaのライブラリがgithubに落ちてたんだけど、これは公式ではないのかな?中の人はCERNのリポジトリとかもいじってるように見えるのですごそうな感じだけど。。
https://github.com/joaopsilva/binance-java-api
後書き
最近上場したXYM、まだ取引所少ないけど取引所間での価格差が大きいよね。
取引所間の価格差を利用したアービトラージとか狙えるのかなあ。