この記事はBitMEXのRealtime APIから価格等の情報を取得することを目的としている。
2020/08
現在は日本から仮想通貨取引を行うことが出来ないが、大きな取引所であることは間違いないため有用なデータが配信されていると考える。
※Top Crypto Exchanges Ranked By Volume | Nomicsより、BitMEXのTransparency Ranking(取引所自身が取引量を水増ししている等の不正がないかをレイティングに加味したランキング)で年間2位のBitMEX。BB,BFが3,5位となっているのも面白い。取引量ではBitMEXは5位。
日本人ならbitFlyerが先かと思うがデータに関しての取得記事は執筆済みなのでまだの方は先にそちらを参照。
Node.jsで仮想通貨の自動取引(bitFlyer編 #1) - 初めに知っておくこと
Realtime APIに接続するのにアカウント等必要なくデータを取得するだけならBitMEXを利用することは可能だ(IPで弾かれたりもない)
以前に使ってたユーザーも多く取引所としても比較的大きいため未だデータ取りとしては有用な取引所だと考えられる。
それに従って今からでもデータ取得をしてみたいユーザーも多いのでは、と考えた。
読者はNode.jsのインストールが終わっていることと最小限のNode.js
のスキルが前提。
仮想通貨Botterが使うの言語としてはPython
が多い中、これまで通りあえてNode.js
で進める。
今回はある程度初心者でも起動できるよう考慮した。
リアルタイムで配信されるAPIに関して公式のサイトは次。
ただ、どうしても英語を日本語に翻訳したような文章なので難解な表現が多い。
とりあえず面倒なことは置いておいて公式がサンプルが公開されているので使ってみる。
サンプルをDLして実行するまでの手順を記す。
公式にリンクは張ってあるがプログラム本体のトップページのリンクではないためダウンロードが出来ない。
というわけで次のトップページからDLする。
GitHub - BitMEX/api-connectors: Libraries for connecting to the BitMEX API.
Code
をクリックしDownload ZIP
※VS Codeである必要はないので好きなエディタで。
解凍フォルダの中のoffisial-ws
> node.js
のフォルダを開く。
上のようなファイル構成(node_modules
は最初は存在しない)
Terminal
からNew Terminal
を開いて
まずは
npm install
を実行する。
これによってパッケージにファイルにかかれてあるライブラリを自動でダウンロードしてインストールする。
初心者向けに書いておくとNode.js
のnpm install
というコマンドはインストールという名前が付いているが単純に同じディレクトリのnode_modules
に必要なファイルを展開するだけでパソコンのシステムに関するフォルダを一切汚さない。
私がNode.js
を好んで利用する一つの理由がこれ。いらなくなったプログラムは上のフォルダごと削除してしまえば完全にアンインストール出来るのだ。
さて、続いて同じフォルダ内で
node example.js
と打ち込めばexample.js
が実行できる。
node
でエラーの場合はnode.js
そのものがインストールしてないかも
DLサイト:Node.js ※最新版をDL、全部デフォルトでOK
{"timestamp....
が最下部に出ていればこれで成功。
表示するデータは内部で省略するようになっているが、受信は出来ている。
時間が経つに連れこのメッセージは更新されどんどん追加されていく。
このままでは永遠に終わらないのでctrl+c
でプログラムを停止できる。
気づいた人もいるかも知れないがUnkown or expired symbol.
という不穏なメッセージが出ている。
この記事執筆は2020/08
で第2四半期の取り扱い先物にコードに有る「XBTZ19
」が存在しないことが原因。
example.js
にて存在しないものを指定している。
client.addStream('XBTZ19', 'quote', function(data, symbol, tableName) {
//略
※2020年Q2 四半期先物リスト | BitMEX Blog
つまり上のページを見て「コード」となっているところをclient.addStream
の第一引数に入れてやれば対象のデータが流れてくるようになる。
例えばXBTU20
を見たい場合は
client.addStream('XBTU20', 'quote', function(data, symbol, tableName) {
//略
このように先物はコードは期限で変わってくるので覚えておきたい。
サンプルコードでは送られてくるデータの一部しか表示していない。
生のデータを見てみる。
client.addStream('XBTUSD', 'quote', function(data, symbol, tableName) {
console.log(`Got update for ${tableName}:${symbol}. Current state:\n${JSON.stringify(data).slice(0, 100)}...`);
// Do something with the table data...
});
データはJSON
形式で送られてくるのでstringify
メソッドによって文字列に変換しているが
slice(0,100)
というコードにより100文字に削っている。
これをカットして全文表示、更に丁度いいインデントと改行を入れてくれるコードに変換すると
console.log(`Got update for ${tableName}:${symbol}. Current state:\n${JSON.stringify(data,null,"\t")}`);
こんなかんじでどうか。
JSON.stringify()
の詳細が知りたければ:JSON.stringify() - JavaScript | MDN
結果は...
Got update for quote:XBTUSD. Current state:
[
{
"timestamp": "2020-08-03T09:46:34.477Z",
"symbol": "XBTUSD",
"bidSize": 1790,
"bidPrice": 11259,
"askPrice": 11259.5,
"askSize": 901
},
{
"timestamp": "2020-08-03T09:46:57.667Z",
"symbol": "XBTUSD",
"bidSize": 1790,
"bidPrice": 11259,
"askPrice": 11259.5,
"askSize": 401
},
{
"timestamp": "2020-08-03T09:47:00.040Z",
"symbol": "XBTUSD",
"bidSize": 1520,
"bidPrice": 11259,
"askPrice": 11259.5,
"askSize": 401
},
//まだ続く
データの全内容が見れた。
タイムスタンプ、シンボルの他にbid, askに関する一部データが入っている。
いわゆる板情報のベストビッド、ベストアスクの情報が送られてきているようだ。
これは一部のデータに過ぎずBitMEXでは様々なデータを見ることが出来る。
このデータの種類を切り替えるには...
client.addStream('XBTUSD', 'ここに種類を入力!', function(//省略
第2引数に種類をいれてやればよい。
では、何が有るのか。
こちらも公式サイトにのっている一覧
"announcement", // サイトのお知らせ
"chat", // Trollbox チャット
"connected", // 接続ユーザー/ボットの統計
"funding", // 最新のスワップ資金調達率。 資金調達間隔ごとに送信 (通常8時間)
"instrument", // 取引高とビッド/アスクなどの最新商品情報
"insurance", // デイリーの保険基金に関する最新情報
"liquidation", // ブックに記入される清算注文
"orderBookL2_25", // レベル 2 のオーダーブックの上位 25 レベル
"orderBookL2", // フルレベル 2 のオーダーブック
"orderBook10", // 従来のフルブックプッシュを使用する上位 10 レベル
"publicNotifications", // システム全体への通知 (短期公開メッセージ用)
"quote", // ブックの上位レベル
"quoteBin1m", // 1 分足クォートビン
"quoteBin5m", // 5 分足クォートビン
"quoteBin1h", // 1 時間足クォートビン
"quoteBin1d", // 1 日足クォートビン
"settlement", // 決済
"trade", // ライブ取引
"tradeBin1m", // 1 分足取引ビン
"tradeBin5m", // 5 分足取引ビン
"tradeBin1h", // 1 時間足取引ビン
"tradeBin1d", // 1 日足取引ビン
これは認証なしで見れるデータ一覧である。
認証が必要なデータは個人のポジションや約定に関するデータなので、どのみち必要ない(日本からは取引禁止)
trade
を入れてみる第2引数をtrade
にしてみる。
{
"timestamp": "2020-08-03T09:59:16.993Z",
"symbol": "XBTUSD",
"side": "Sell",
"size": 20,
"price": 11254,
"tickDirection": "MinusTick",
"trdMatchID": "b5771256-ebed-b0c6-50bc-bdae58fa996b",
"grossValue": 177720,
"homeNotional": 0.0017772,
"foreignNotional": 20
}
このような感じのデータに切り替わった。
side
とsize
が有るのでどうやら約定データだ。
ざっくり見た感じでは約定データもいくつかのデータがまとまってから配信される。
したがってリアルタイムではあるがそこそこ遅延があるとも言える。
あまりやりすぎると混乱するのでこのあたりにする。
Node.js
に関しても最低限の知識があれば起動できてしまうシンプル設計だ。
特別マニアックなことをやらなければサンプルプログラムから受信できるデータだけで十分そうだ。
次回があるとすればclient.addStream
の第2引数に入れる項目にて「どんなデータが受信できるのか」を見ていくのが良さそうだ。
2020/08/04:次の記事を公開