Last active
October 25, 2018 01:12
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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