26
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bitFlyerの板情報をリアルタイムに取る

Last updated at Posted at 2017-12-08

新APIとPubNub配信の廃止

公式のAPIドキュメントが更新されて、PubNubでの配信は廃止を検討中となっていた。
廃止時期は不明。
bitflyer Realtime API

  • Socket.IO 2.0 (WebSocket)
  • JSON-RPC 2.0
    の2つが新しく追加されていた。

twitterの評判を眺めた限りだと、JSON-RPCのほうが抜け漏れが少ないらしいので、そちらに移行予定。

概要

bitFlyerのリアルタイムAPIをつかって、板情報を取得するのを試したメモ
価格のサンプルはあるが、板のサンプルがないため作ってみた

API情報

bitFlyerのAPIは、PubNubを利用してリアルタイムの更新情報を配信している。
板情報は口座や認証なしで取得が可能
レスポンスの量が多いせいか、2つのチャンネルに分かれている。

  • lightning_board_snapshot_BTC_JPY
    • 板情報全体が流れてくるチャンネル
    • だいたい10分毎ぐらいにながれてくる。
  • lightning_board_BTC_JPY
    • 差分情報がリアルタイムに流れてくるチャンネル こちらはほぼリアルタイム
  • lightning_ticker_BTC_JPY
    • 本来は必要ないが、差分の抜け漏れが発生する場合、このチャネルを使って補正する

取得サンプル

pubnubのsubscribeで一度にchannelを複数指定できる。

channel名が流れてくるので、スナップショットか差分情報かも判断がつく。
スナップショットを取得した後、差分情報をつかって更新することで板情報を再現できそう。

var PubNub = require('pubnub');
var pubnub = new PubNub({
  subscribeKey: 'sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f'
});
pubnub.addListener({
  message: function (message) {
    // pubnubの配信時刻 unixtime+ナノ秒
    // console.log(message.channel, message.timetoken);
    console.log(message.channel, message.message);
  }                                                                                                                                                                        });

//複数のchannelをsubscribeすることができる
pubnub.subscribe({                                                                                                                                                           
  channels: ["lightning_board_BTC_JPY",
             "lightning_board_snapshot_BTC_JPY"],
});

消えた価格帯はどうなるか

priceに価格帯、sizeが0として流れてくる

lightning_board_BTC_JPY { mid_price: 2150320,
  bids: [ { price: 2147720, size: 0 } ],
  asks: [ { price: 2150632, size: 0.432 }, { price: 2153639, size: 0 } ] }

罠1

ただし差分の抜け漏れが2017年9月から2017年12月末ごろまで発生していた。
約定して消えたはずの板が残り続ける減少が発生していた。
暫定対策として、tickerのチャネルを受信してbest ask, best bid間の板を消すようにした

参考情報

https://twitter.com/bF_TASK/status/911568891960188928
https://twitter.com/ksudo/status/908949830612873216

罠2

bitflyerは毎日日本時間の4:00~4:10は定期メンテとなる。
4:11ごろから板寄せが行われる。
(注文はできるが約定しない?)この間もリアルタイムAPIに、データが流れてくる。
加えて、price:0のデータが流れてくる(何を表すものなのか不明)
このデータも差分の抜け漏れが発生することがある

ちなみに、cryptowatchのグラフではこの時間帯はデータなし扱いになっている。

残り課題

  • 差分の時刻情報がレスポンスにないので、スナップショットの配信が遅延するとずれそうな気がする。。。
    • pubnubの配信時刻(message.timetoken)の値を使うしかなさそう
26
19
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?