Skip to content

Instantly share code, notes, and snippets.

@onthetunnel
Forked from anticlergygang/traillingProfit.js
Created October 21, 2018 15:42
Show Gist options
  • Select an option

  • Save onthetunnel/4e3382657e464abdf1791f1c9b01e3a7 to your computer and use it in GitHub Desktop.

Select an option

Save onthetunnel/4e3382657e464abdf1791f1c9b01e3a7 to your computer and use it in GitHub Desktop.
If you want to get it to work, you need to npm install all of the modules required at the top and change all occurances of process.env. BINANCEAPIKEY and process.env.BINANCESECRET with your apikey and secret. After this just run 'node scalpBot.js "SYMBOL" "PERCENT_TRAIL"'
const fs = require('fs')
const https = require('https')
const colors = require('colors')
const moment = require('moment-timezone')
const querystring = require('querystring')
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)
}
})
}
let buyLimitTrailSell = (market, percent) => {
try {
binanceAPI({ method: 'GET', endpoint: '/api/v1/ticker/price', parameters: { symbol: market } }).then(priceInfo => {
let inPrice = priceInfo.price
let highestPriceSoFar = inPrice
let traillingSell = highestPriceSoFar - percentOf(percent, highestPriceSoFar)
let buyTime = new Date().getTime()
console.log(`\n${moment(buyTime).format('MM/DD/YYYY hh:mm:ss a')}\n${market} bought at ${inPrice}\n${market} trailling sell set to ${percentChange(inPrice, traillingSell)}% at ${traillingSell.toFixed(8)}`.redBG)
let priceCheckInterval = setInterval(() => {
binanceAPI({ method: 'GET', endpoint: '/api/v1/ticker/price', parameters: { symbol: market } }).then(priceInfo => {
if (priceInfo.price > highestPriceSoFar) {
highestPriceSoFar = priceInfo.price
traillingSell = (highestPriceSoFar - percentOf(percent, highestPriceSoFar))
if (percentChange(inPrice, traillingSell) > 0) {
console.log(`\n${market} trailling sell increased to ${percentChange(inPrice, traillingSell)}% at ${traillingSell.toFixed(8)}`.green)
} else {
console.log(`\n${market} trailling sell increased to ${percentChange(inPrice, traillingSell)}% at ${traillingSell.toFixed(8)}`)
}
}
if (priceInfo.price <= traillingSell && percentChange(inPrice, priceInfo.price) >= 0.02) {
console.log(`\n${moment().format('MM/DD/YYYY hh:mm:ss a')}\n${market} sold at ${priceInfo.price} for ${percentChange(inPrice,priceInfo.price)}% `.greenBG + 'profit'.rainbow.whiteBG + `\ntrade started ${moment(buyTime).fromNow()}`.greenBG)
sellLimitTrailBuy(market, percent)
clearInterval(priceCheckInterval)
}
}).catch(err => {
console.log(err)
})
}, 500)
}).catch(err => {
clearInterval(setUpBuy)
console.log(err)
})
} catch (err) {
console.log(err)
}
}
let sellLimitTrailBuy = (market, percent) => {
try {
binanceAPI({ method: 'GET', endpoint: '/api/v1/ticker/price', parameters: { symbol: market } }).then(priceInfo => {
let inPrice = priceInfo.price
let lowestPriceSoFar = inPrice
let traillingBuy = +lowestPriceSoFar + percentOf(percent, lowestPriceSoFar)
let sellTime = new Date().getTime()
console.log(`\n${moment(sellTime).format('MM/DD/YYYY hh:mm:ss a')}\n${market} sold at ${inPrice}\n${market} trailling buy set to ${percentChange(inPrice,traillingBuy)}% at ${traillingBuy.toFixed(8)}`.redBG)
let priceCheckInterval = setInterval(() => {
binanceAPI({ method: 'GET', endpoint: '/api/v1/ticker/price', parameters: { symbol: market } }).then(priceInfo => {
if (priceInfo.price < lowestPriceSoFar) {
lowestPriceSoFar = priceInfo.price
traillingBuy = +lowestPriceSoFar + percentOf(percent, lowestPriceSoFar)
if (traillingBuy < inPrice) {
console.log(`\n${market} trailling buy decreased to ${percentChange(inPrice, traillingBuy)}% at ${traillingBuy.toFixed(8)}`.green)
} else {
console.log(`\n${market} trailling buy decreased to ${percentChange(inPrice, traillingBuy)}% at ${traillingBuy.toFixed(8)}`)
}
}
if (priceInfo.price >= traillingBuy && percentChange(priceInfo.price, inPrice) >= 0.02) {
console.log(`\n${moment().format('MM/DD/YYYY hh:mm:ss a')}\n${market} bought at ${priceInfo.price} for ${percentChange(priceInfo.price,inPrice)}% `.greenBG + 'profit'.rainbow.whiteBG + `\ntrade started ${moment(sellTime).fromNow()}`.greenBG)
buyLimitTrailSell(market, percent)
clearInterval(priceCheckInterval)
}
}).catch(err => {
console.log(err)
})
}, 500)
}).catch(err => {
clearInterval(setUpSell)
console.log(err)
})
} catch (err) {
console.log(err)
}
}
console.clear()
sellLimitTrailBuy(process.argv[2], process.argv[3])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment