diff --git a/package-lock.json b/package-lock.json index 5111136..9bb5520 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,18 @@ { "name": "binance-triangle-arbitrage", - "version": "5.2.7", + "version": "5.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz", + "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "agent-base": { "version": "4.3.0", @@ -18,9 +23,9 @@ } }, "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -45,6 +50,18 @@ "chalk": "2.4.2", "leven": "2.1.0", "mri": "1.1.4" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "asn1": { @@ -70,6 +87,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -104,13 +126,49 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "color-convert": { @@ -363,16 +421,16 @@ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "mri": { @@ -386,9 +444,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-binance-api": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-binance-api/-/node-binance-api-0.10.3.tgz", - "integrity": "sha512-6avxnKbuJ1Tpfj0pNc9K/wICCeIb+qXoQTMr+ccsfIJUXtgy7gS4hQBpZLw4oUnYN4PhORllteMPdTSlUc+8MQ==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/node-binance-api/-/node-binance-api-0.11.4.tgz", + "integrity": "sha512-6WeGLGMhihcY7E1dhf/uoygnos5Ydzg4P5jVsVmA3VvtkNaTb3IJZmxVRYzLIhgsF/RF14w7HDRiSsKogHJpsA==", "requires": { "async": "^3.1.0", "https-proxy-agent": "^3.0.1", @@ -418,32 +476,32 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pino": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-5.17.0.tgz", - "integrity": "sha512-LqrqmRcJz8etUjyV0ddqB6OTUutCgQULPFg2b4dtijRHUsucaAdBgSUW58vY6RFSX+NT8963F+q0tM6lNwGShA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.2.1.tgz", + "integrity": "sha512-5F5A+G25Ex2rMOBEe3XYGyLSF4dikQZsFvPojwsqnDBX+rfg7+kw9s5i7pHuVAJImekjwb+MR9jQyHWPLENlvQ==", "requires": { "fast-redact": "^2.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^3.0.3", - "sonic-boom": "^0.7.5" + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.0" } }, "pino-pretty": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-3.6.1.tgz", - "integrity": "sha512-S3bal+Yd313OEaPijbf7V+jPxVaTaRO5RQX8S/Mwdtb/8+JOgo1KolDeJTfMDTU2/k6+MHvEbxv+T1ZRfGlnjA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.0.0.tgz", + "integrity": "sha512-YLy/n3dMXYWOodSm530gelkSAJGmEp29L9pqiycInlIae5FEJPWAkMRO3JFMbIFtjD2Ve4SH2aBcz2aRreGpBQ==", "requires": { - "@hapi/bourne": "^1.3.2", + "@hapi/bourne": "^2.0.0", "args": "^5.0.1", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "dateformat": "^3.0.3", "fast-safe-stringify": "^2.0.7", "jmespath": "^0.15.0", "joycon": "^2.2.5", "pump": "^3.0.0", - "readable-stream": "^3.4.0", + "readable-stream": "^3.6.0", "split2": "^3.1.1", "strip-json-comments": "^3.0.1" } @@ -454,9 +512,9 @@ "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ==" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pump": { "version": "3.0.0", @@ -483,9 +541,9 @@ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "quick-format-unescaped": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz", - "integrity": "sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" }, "readable-stream": { "version": "3.6.0", @@ -525,9 +583,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -568,10 +626,11 @@ } }, "sonic-boom": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.6.tgz", - "integrity": "sha512-k9E2QQ4zxuVRLDW+ZW6ISzJs3wlEorVdmM7ApDgor7wsGKSDG5YGHsGmgLY4XYh4DMlr/2ap2BWAE7yTFJtWnQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.0.1.tgz", + "integrity": "sha512-o9tx+bonVEXSaPtptyXQXpP8l6UV9Bi3im2geZskvWw2a/o/hrbWI7EBbbv+rOx6Hubnzun9GgH4WfbgEA3MFQ==", "requires": { + "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" } }, @@ -613,9 +672,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==" }, "supports-color": { "version": "5.5.0", @@ -697,9 +756,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", - "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==" } } } diff --git a/package.json b/package.json index fa91057..0a186ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "binance-triangle-arbitrage", - "version": "5.2.7", + "version": "5.3.0", "repository": { "type": "git", "url": "https://github.com/bmino/binance-triangle-arbitrage.git" @@ -9,17 +9,17 @@ "name": "Brandon Mino" }, "engines": { - "node": "12.14.1", - "npm": "6.13.6" + "node": "12.16.3", + "npm": "6.14.5" }, "scripts": { "start": "node src/main/Main.js" }, "dependencies": { "blessed": "^0.1.81", - "node-binance-api": "^0.10.3", - "pino": "^5.17.0", - "pino-pretty": "^3.6.1" + "node-binance-api": "^0.11.4", + "pino": "^6.2.1", + "pino-pretty": "^4.0.0" }, "license": "MIT" } diff --git a/src/main/BinanceApi.js b/src/main/BinanceApi.js index 00cbba4..e2aaf0c 100644 --- a/src/main/BinanceApi.js +++ b/src/main/BinanceApi.js @@ -1,5 +1,10 @@ +const CONFIG = require('../../config/config'); const logger = require('./Loggers'); -const binance = require('node-binance-api')(); +const binance = require('node-binance-api')({ + APIKEY: CONFIG.KEYS.API, + APISECRET: CONFIG.KEYS.SECRET, + test: !CONFIG.TRADING.ENABLED +}); const BinanceApi = { @@ -95,6 +100,10 @@ const BinanceApi = { sortDepthCache(ticker, depth) { depth.bids = binance.sortBids(depth.bids); depth.asks = binance.sortAsks(depth.asks); + }, + + depthCache(ticker) { + return binance.depthCache(ticker); } }; diff --git a/src/main/Loggers.js b/src/main/Loggers.js index c0039a0..c1df00e 100644 --- a/src/main/Loggers.js +++ b/src/main/Loggers.js @@ -7,7 +7,11 @@ const PINO_OPTS = { level: CONFIG.LOG.LEVEL.toLowerCase(), timestamp: () => `,"time":"${new Date().toLocaleString()}"`, prettyPrint: CONFIG.LOG.PRETTY_PRINT, - useLevelLabels: true, + formatters: { + level: (label, number) => { + return { level: number } + } + }, base: null }; diff --git a/src/main/Main.js b/src/main/Main.js index 8a24a57..8396596 100644 --- a/src/main/Main.js +++ b/src/main/Main.js @@ -1,20 +1,13 @@ const CONFIG = require('../../config/config'); const logger = require('./Loggers'); -const binance = require('node-binance-api')(); const os = require('os'); +const BinanceApi = require('./BinanceApi'); const MarketCache = require('./MarketCache'); const HUD = require('./HUD'); -const BinanceApi = require('./BinanceApi'); const ArbitrageExecution = require('./ArbitrageExecution'); const CalculationNode = require('./CalculationNode'); const SpeedTest = require('./SpeedTest'); -binance.options({ - APIKEY: CONFIG.KEYS.API, - APISECRET: CONFIG.KEYS.SECRET, - test: !CONFIG.TRADING.ENABLED -}); - // Helps identify application startup logger.execution.info(logger.LINE); logger.performance.info(logger.LINE); @@ -23,7 +16,7 @@ if (CONFIG.TRADING.ENABLED) console.log(`WARNING! Order execution is enabled!\n` SpeedTest.multiPing() .then((pings) => { - const msg = `Successfully pinged the Binance api in ${(binance.sum(pings) / pings.length).toFixed(0)} ms`; + const msg = `Successfully pinged Binance in ${(pings.reduce((a,b) => a+b, 0) / pings.length).toFixed(0)} ms`; console.log(msg); logger.performance.info(msg); }) diff --git a/src/main/MarketCache.js b/src/main/MarketCache.js index bd6aa48..a9c7d8a 100644 --- a/src/main/MarketCache.js +++ b/src/main/MarketCache.js @@ -1,5 +1,5 @@ const CONFIG = require('../../config/config.json'); -const binance = require('node-binance-api')(); +const BinanceApi = require('./BinanceApi'); const MarketCache = { @@ -48,7 +48,7 @@ const MarketCache = { }, {}); }; MarketCache.getTickerArray().forEach(ticker => { - let depth = binance.depthCache(ticker); + let depth = BinanceApi.depthCache(ticker); depth.bids = prune(depth.bids, threshold); depth.asks = prune(depth.asks, threshold); }); @@ -59,7 +59,7 @@ const MarketCache = { let askCounts = []; tickers.forEach(ticker => { - const depth = binance.depthCache(ticker); + const depth = BinanceApi.depthCache(ticker); bidCounts.push(Object.values(depth.bids).length); askCounts.push(Object.values(depth.asks).length); }); @@ -79,7 +79,7 @@ const MarketCache = { }, getTickersWithoutDepthCacheUpdate() { - return MarketCache.getTickerArray().filter(ticker => !binance.depthCache(ticker).eventTime); + return MarketCache.getTickerArray().filter(ticker => !BinanceApi.depthCache(ticker).eventTime); }, createTrade(a, b, c) {