edo1z blog

プログラミングなどに関するブログです

BitfinexとBitmexの板と約定履歴をwebsocketで取得する

node.jsを使ってます。

Bitfinex

const ws = require('ws')
const w = new ws('wss://api.bitfinex.com/ws/2')

w.on('message', msg => console.log(msg))

let msg = JSON.stringify({
    event: 'subscribe',
    channel: 'trades',
    symbol: 'tBTCUSD'
})

w.on('open', () => w.send(msg))

Bitmex

const ws = require('ws')
const w = new ws('wss://www.bitmex.com/realtime?subscribe=trade:XBTUSD')

w.on('message', msg => console.log(msg))

大体こんな感じでとれた。とりあえずBitmexの板情報をとってるんだけど、価格がJSONに入ってなくて、なんでだろうなーと思ってたら、下記に価格の計算方法が書いてあった。ビットフライヤーと全然仕組みが違う。

www.bitmex.com

ちなみに、約定履歴が、tradeで、板は、orderBookL2のようです。trade:XBTUSDとかやると、ビットコインの約定履歴とれる。約定履歴と板をwebsocketで取りたい場合は、node.jsだと下記みたいにすると取れる。

const ws = require('ws');
const w = new ws('wss://www.bitmex.com/realtime');
w.on('message', msg => onMessage(msg));
const msg = JSON.stringify({
  op: 'subscribe',
  args: ['trade:XBTUSD', 'orderBookL2:XBTUSD']
});
w.on('open', () => w.send(msg))

const onMessage = msg => {
  const data = JSON.parse(msg);
  switch(data.table) {
    case 'trade': {
      _executions(data);
      break;
    }
    case 'orderBookL2': {
      _board(data);
      break;
    }
  }
}