Skip to content

Instantly share code, notes, and snippets.

@prdn
Last active December 7, 2016 11:31
Show Gist options
  • Save prdn/e945346cef75a498bb9837a251073060 to your computer and use it in GitHub Desktop.
Save prdn/e945346cef75a498bb9837a251073060 to your computer and use it in GitHub Desktop.
/*
npm install ws lodash async moment
mkdir logs
node bfx_test_book_raw.js BTCUSD &
tail -f logs/ws-book-*
*/
var WS = require('ws')
var _ = require('lodash')
var async = require('async')
var fs = require('fs')
var moment = require('moment')
var pair = process.argv[2]
var conf = {
wshost: "wss://api.bitfinex.com/ws/2"
}
var logfile = __dirname + '/logs/ws-book-err.log'
var BOOK = {
bids: {},
asks: {},
psnap: {},
mcnt: 0
}
console.log(pair, conf.wshost)
var cli = new WS(conf.wshost, { /*rejectUnauthorized: false*/ })
cli.on('open', function open() {
console.log('WS open')
cli.send(JSON.stringify({ event: "subscribe", channel: "book", pair: pair, prec: "R0" }))
})
cli.on('close', function open() {
console.log('WS close')
})
cli.on('message', function(msg) {
msg = JSON.parse(msg)
if (msg.event) {
return
}
if (msg[1] === 'hb') {
return
}
if (BOOK.mcnt === 0) {
_.each(msg[1], function(pp) {
pp = { id: pp[0], price: pp[1], amount: pp[2] }
var side = pp.amount >= 0 ? 'bids' : 'asks'
pp.amount = Math.abs(pp.amount)
BOOK[side][pp.id] = pp
})
} else {
var pp = { id: msg[1], price: msg[2], amount: msg[3] }
if (!pp.price) {
var found = true
if (pp.amount > 0) {
if (BOOK['bids'][pp.id]) {
delete BOOK['bids'][pp.id]
} else {
found = false
}
} else if (pp.amount < 0) {
if (BOOK['asks'][pp.id]) {
delete BOOK['asks'][pp.id]
} else {
found = false
}
}
if (!found) {
fs.appendFileSync(logfile, "[" + moment().format() + "] " + pair + " | " + JSON.stringify(pp) + " BOOK_RAW delete fail found\n")
}
} else {
var side = pp.amount >= 0 ? 'bids' : 'asks'
pp.amount = Math.abs(pp.amount)
BOOK[side][pp.id] = pp
}
}
BOOK.mcnt++
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment