Skip to content

Instantly share code, notes, and snippets.

@anticlergygang
Last active October 25, 2018 01:12
Show Gist options
  • Select an option

  • Save anticlergygang/ffc8d299b92c8b413cbf74c19759836b to your computer and use it in GitHub Desktop.

Select an option

Save anticlergygang/ffc8d299b92c8b413cbf74c19759836b to your computer and use it in GitHub Desktop.
This loops through BTC markets on Binance 24/7 and checks how fast the last 500 trades came in. green = +1 trades a sec, red = -1 trades a sec
const fs = require('fs')
const https = require('https')
const colors = require('colors')
const moment = require('moment-timezone')
const querystring = require('querystring')
const util = require('util')
const crypto = require('crypto')
const percentOf = (per, num) => {
return (num / 100) * per
}
const percentChange = (v1, v2) => {
return (((v2 - v1) / Math.abs(v1)) * 100).toFixed(2)
}
const binanceAPI = options => {
return new Promise((resolve, reject) => {
try {
let requestObject = {
host: 'api.binance.com',
port: 443,
method: options.method
}
switch (`${options.method} ${options.endpoint}`) {
case 'GET /api/v1/ping':
{
requestObject.path = options.endpoint
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/time':
{
requestObject.path = options.endpoint
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/exchangeInfo':
{
requestObject.path = options.endpoint
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/depth':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/trades':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/historicalTrades':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/aggTrades':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/klines':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/ticker/24hr':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/ticker/price':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v1/ticker/bookTicker':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v3/order':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'POST /api/v3/order':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v3/openOrders':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v3/allOrders':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v3/account':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'GET /api/v3/myTrades':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'POST /api/v3/order/test':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
case 'DELETE /api/v3/order':
{
let query = querystring.stringify(options.parameters)
requestObject.path = `${options.endpoint}?${query}&signature=${crypto.createHmac('sha256', process.env.BINANCESECRET).update(query).digest('hex')}`
requestObject.headers = {
'X-MBX-APIKEY': process.env.BINANCEAPIKEY
}
let req = https.request(requestObject, res => {
let data = ''
res.on('data', (chunk) => {
data = data.concat(chunk)
})
res.on('end', () => {
try {
let jsonRes = JSON.parse(data)
resolve(jsonRes)
} catch (err) {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
}
})
}).on('error', (err) => {
reject(`binanceRequest err: ${util.inspect(err)}\nbinanceRequest data recieved b4 error: ${data}`)
})
req.end()
}
break
default:
{
console.log(`${options.method} ${options.endpoint}`)
}
}
} catch (error) {
reject(error)
}
})
}
const marketTradeRate = market => {
return new Promise((resolve, reject) => {
let now = moment()
let count = 0
binanceAPI({ method: 'GET', endpoint: '/api/v1/trades', parameters: { symbol: market } }).then(trades => {
trades.forEach((trade, i) => {
if (moment.duration(now.diff(moment(trade.time))).asMilliseconds() < (60000*5)) {
count++
}
})
resolve((count/(60*5)).toFixed(2))
}).catch(err => {
reject(err)
})
})
}
let symbols = []
binanceAPI({ method: 'GET', endpoint: '/api/v1/exchangeInfo' }).then(exchangeInfo => {
exchangeInfo.symbols.forEach((symbol, i) => {
if (symbol.status === 'TRADING' && (symbol.baseAsset === 'BTC' || symbol.quoteAsset === 'BTC')) {
symbols.push({ base: symbol.baseAsset, quote: symbol.quoteAsset })
}
})
return Promise.resolve()
}).then(() => {
let count = 0
let done = true
scanInterval = setInterval(() => {
if (symbols[count] !== undefined && symbols[count].base !== undefined && symbols[count].quote !== undefined && done === true) {
done = false
marketTradeRate(`${symbols[count].base}${symbols[count].quote}`).then(tradeRate => {
if(tradeRate >= 1){
console.log(`${symbols[count].base}${symbols[count].quote}: ${tradeRate} trades/sec (https://www.binance.com/en/trade/pro/${symbols[count].base}_${symbols[count].quote}) (node traillingProfit.js ${symbols[count].base}${symbols[count].quote} 0.02) ${moment().format('MM/DD/YYYY hh:mm:ss a')}`.green)
}else{
console.log(`${symbols[count].base}${symbols[count].quote}: ${tradeRate} trades/sec (https://www.binance.com/en/trade/pro/${symbols[count].base}_${symbols[count].quote}) (node traillingProfit.js ${symbols[count].base}${symbols[count].quote} 0.02) ${moment().format('MM/DD/YYYY hh:mm:ss a')}`.red)
}
count++
done = true
}).catch(err => {
count++
done = true
console.log(err)
})
} else {
if(done === true){
count = 0
}
// clearInterval(scanInterval)
}
}, 200)
}).catch(err => {
console.log(err)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment