From 1fd45aeb6fd70c37d8d998ca040ab1767ac91e33 Mon Sep 17 00:00:00 2001 From: Jonas Thelemann Date: Wed, 3 Mar 2021 19:51:56 +0100 Subject: [PATCH] Revert "refactor: reformat code" This reverts commit 310b1597caa770ece0b58f2116f6913bbc40a9ce. --- src/backtest.js | 3 +- src/notifiers/gmail.js | 193 ++++++++++++++------------------- src/notifiers/index.js | 43 ++++---- src/notifiers/telegram.js | 73 +++---------- src/trader.js | 217 ++++++++++++++++++-------------------- 5 files changed, 219 insertions(+), 310 deletions(-) diff --git a/src/backtest.js b/src/backtest.js index 0285b27..1f098a0 100644 --- a/src/backtest.js +++ b/src/backtest.js @@ -361,8 +361,7 @@ async function run() { console.log("starting backtest... ".green) await backtest(lines) console.log( - "Ending backtest... ".green + - parseInt((Date.now() - startBacktest) / 1000) + "Ending backtest... ".green + parseInt((Date.now() - startBacktest) / 1000) ) process.exit(0) diff --git a/src/notifiers/gmail.js b/src/notifiers/gmail.js index b46c55d..884d61a 100644 --- a/src/notifiers/gmail.js +++ b/src/notifiers/gmail.js @@ -4,133 +4,98 @@ const gmail_address = env.GMAIL_ADDRESS const gmail_app_password = env.GMAIL_APP_PASSWORD function createMailMessage(subject, html) { - return { - from: '"🐬 BVA " ', - to: gmail_address, - subject, - text: html, - html, - } + return { + from: '"🐬 BVA " ', + to: gmail_address, + subject, + text: html, + html, + } } function createSignalMessage(base, signal) { - const subject = - base + - " :: " + - signal.stratname + - " " + - signal.pair + - " " + - signal.price + const subject = + base + " :: " + + signal.stratname + + " " + + signal.pair + + " " + + signal.price; - const text = (signal.score ? "score: " + signal.score : "score: NA") + "\n" + const text = + (signal.score + ? "score: " + signal.score + : "score: NA") + "\n"; - return createMailMessage(subject, text) + return createMailMessage(subject, text) } module.exports = function () { - if (!env.USE_GMAIL) return {} - - const mailTransport = require("nodemailer").createTransport( - `smtps://${encodeURIComponent(gmail_address)}:${encodeURIComponent( - gmail_app_password - )}@smtp.gmail.com` - ) + if (!env.USE_GMAIL) return {}; - function send(message) { - if (!env.USE_GMAIL) return + const mailTransport = require("nodemailer").createTransport( + `smtps://${encodeURIComponent(gmail_address)}:${encodeURIComponent(gmail_app_password)}@smtp.gmail.com` + ) - if (typeof message === "string") { - message = createMailMessage("Tading Bot Message", message) - } + function send(message) { + if (!env.USE_GMAIL) return; - return mailTransport.sendMail(message).catch((error) => { - console.error( - "There was an error while sending the email ... trying again...", - error - ) - setTimeout(() => { - mailTransport.sendMail(message).catch((error) => { - console.error( - "There was an error while sending the email: stop trying", - error - ) - }) - }, 2000) - }) + if (typeof message === "string") { + message = createMailMessage("Tading Bot Message", message) } - function notifyBuyToCoverSignal(signal) { - return send( - createSignalMessage( - "BUY_SIGNAL :: BUY TO COVER SHORT TRADE", - signal - ) - ) - } - function notifyBuyToCoverTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! BUY_SIGNAL :: BUY TO COVER SHORT TRADE", - signal - ) - ) - } - function notifyEnterLongSignal(signal) { - return send( - createSignalMessage("BUY_SIGNAL :: ENTER LONG TRADE", signal) - ) - } - function notifyEnterLongTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! BUY_SIGNAL :: ENTER LONG TRADE", - signal - ) - ) - } - function notifyEnterShortSignal(signal) { - return send( - createSignalMessage( - "SEL_SIGNAL :: ENTER SHORT TRADE", - signal - ) + return mailTransport + .sendMail(message) + .catch((error) => { + console.error( + "There was an error while sending the email ... trying again...", error ) - } - function notifyEnterShortTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! SELL_SIGNAL :: ENTER SHORT TRADE", - signal - ) - ) - } - function notifyExitLongSignal(signal) { - return send( - createSignalMessage( - "SELL_SIGNAL :: SELL TO EXIT LONG TRADE", - signal - ) - ) - } - function notifyExitLongTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! SELL_SIGNAL :: SELL TO EXIT LONG TRADE", - signal - ) - ) - } + setTimeout(() => { + mailTransport + .sendMail(message) + .catch((error) => { + console.error( + "There was an error while sending the email: stop trying", error + ) + }) + }, 2000) + }) + } - return { - notifyBuyToCoverSignal, - notifyBuyToCoverTraded, - notifyEnterLongSignal, - notifyEnterLongTraded, - notifyEnterShortSignal, - notifyEnterShortTraded, - notifyExitLongSignal, - notifyExitLongTraded, - send, - } + function notifyBuyToCoverSignal(signal) { + return send(createSignalMessage("BUY_SIGNAL :: BUY TO COVER SHORT TRADE", signal)); + } + function notifyBuyToCoverTraded(signal) { + return send(createSignalMessage(">> SUCCESS! BUY_SIGNAL :: BUY TO COVER SHORT TRADE", signal)); + } + function notifyEnterLongSignal(signal) { + return send(createSignalMessage("BUY_SIGNAL :: ENTER LONG TRADE", signal)); + } + function notifyEnterLongTraded(signal) { + return send(createSignalMessage(">> SUCCESS! BUY_SIGNAL :: ENTER LONG TRADE", signal)); + } + function notifyEnterShortSignal(signal) { + return send(createSignalMessage("SEL_SIGNAL :: ENTER SHORT TRADE", signal)); + } + function notifyEnterShortTraded(signal) { + return send(createSignalMessage(">> SUCCESS! SELL_SIGNAL :: ENTER SHORT TRADE", signal)); + } + function notifyExitLongSignal(signal) { + return send(createSignalMessage("SELL_SIGNAL :: SELL TO EXIT LONG TRADE", signal)); + } + function notifyExitLongTraded(signal) { + return send(createSignalMessage(">> SUCCESS! SELL_SIGNAL :: SELL TO EXIT LONG TRADE", signal)); + } + + return { + notifyBuyToCoverSignal, + notifyBuyToCoverTraded, + notifyEnterLongSignal, + notifyEnterLongTraded, + notifyEnterShortSignal, + notifyEnterShortTraded, + notifyExitLongSignal, + notifyExitLongTraded, + send, + } } diff --git a/src/notifiers/index.js b/src/notifiers/index.js index a954826..a2a97b8 100644 --- a/src/notifiers/index.js +++ b/src/notifiers/index.js @@ -1,30 +1,23 @@ const env = require("./../env") module.exports = function (trading_pairs) { - const notifiers = [] - if (env.USE_TELEGRAM) notifiers.push(require("./telegram")(trading_pairs)) - if (env.USE_GMAIL) notifiers.push(require("./gmail")()) + const notifiers = []; + if (env.USE_TELEGRAM) + notifiers.push(require('./telegram')(trading_pairs)) + if (env.USE_GMAIL) + notifiers.push(require('./gmail')()) - const notifyAllFor = (method, arg) => - notifiers.forEach((n) => n[method] && n[method](arg)) + const notifyAllFor = (method, arg) => notifiers.forEach(n => n[method] && n[method](arg)); - return { - notifyBuyToCoverSignal: (signal) => - notifyAllFor("notifyBuyToCoverSignal", signal), - notifyBuyToCoverTraded: (signal) => - notifyAllFor("notifyBuyToCoverTraded", signal), - notifyEnterLongSignal: (signal) => - notifyAllFor("notifyEnterLongSignal", signal), - notifyEnterLongTraded: (signal) => - notifyAllFor("notifyEnterLongTraded", signal), - notifyEnterShortSignal: (signal) => - notifyAllFor("notifyEnterShortSignal", signal), - notifyEnterShortTraded: (signal) => - notifyAllFor("notifyEnterShortTraded", signal), - notifyExitLongSignal: (signal) => - notifyAllFor("notifyExitLongSignal", signal), - notifyExitLongTraded: (signal) => - notifyAllFor("notifyExitLongTraded", signal), - send: (message) => notifyAllFor("send", message), - } -} + return { + notifyBuyToCoverSignal: signal => notifyAllFor("notifyBuyToCoverSignal", signal), + notifyBuyToCoverTraded: signal => notifyAllFor("notifyBuyToCoverTraded", signal), + notifyEnterLongSignal: signal => notifyAllFor("notifyEnterLongSignal", signal), + notifyEnterLongTraded: signal => notifyAllFor("notifyEnterLongTraded", signal), + notifyEnterShortSignal: signal => notifyAllFor("notifyEnterShortSignal", signal), + notifyEnterShortTraded: signal => notifyAllFor("notifyEnterShortTraded", signal), + notifyExitLongSignal: signal => notifyAllFor("notifyExitLongSignal", signal), + notifyExitLongTraded: signal => notifyAllFor("notifyExitLongTraded", signal), + send: message => notifyAllFor("send", message), + } +} \ No newline at end of file diff --git a/src/notifiers/telegram.js b/src/notifiers/telegram.js index 832bb9d..f3222ad 100644 --- a/src/notifiers/telegram.js +++ b/src/notifiers/telegram.js @@ -5,10 +5,10 @@ const TeleBot = require("telebot") /** * @type {TeleBot} */ -let telBot +let telBot; module.exports = function (trading_pairs) { - if (!env.USE_TELEGRAM) return publicMethods + if (!env.USE_TELEGRAM) return publicMethods; telBot = new TeleBot(env.TELEGRAM_API_KEY) @@ -20,93 +20,52 @@ module.exports = function (trading_pairs) { return send(response) }) + telBot.on("start", () => { send("Trader Bot started!") }) telBot.start() - return publicMethods + return publicMethods; } function createSignalMessage(base, signal) { - let msg = - base + - " :: " + - signal.stratname + - " " + - signal.pair + - " " + - signal.price + - "\n" - msg += (signal.score ? "score: " + signal.score : "score: NA") + "\n" + let msg = base + " :: " + signal.stratname + ' ' + signal.pair + ' ' + signal.price + "\n" + msg += (signal.score ? "score: " + signal.score : 'score: NA') + "\n" return msg } function send(message) { - if (!env.USE_TELEGRAM || !telBot) return + if (!env.USE_TELEGRAM || !telBot) return; return telBot.sendMessage(env.TELEGRAM_RECEIVER_ID, message, { - parseMode: "html", + parseMode: "html" }) } function notifyBuyToCoverSignal(signal) { - return send( - createSignalMessage( - "BUY_SIGNAL :: BUY TO COVER SHORT TRADE", - signal - ) - ) + return send(createSignalMessage("BUY_SIGNAL :: BUY TO COVER SHORT TRADE", signal)); } function notifyBuyToCoverTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! BUY_SIGNAL :: BUY TO COVER SHORT TRADE", - signal - ) - ) + return send(createSignalMessage(">> SUCCESS! BUY_SIGNAL :: BUY TO COVER SHORT TRADE", signal)); } function notifyEnterLongSignal(signal) { - return send( - createSignalMessage("BUY_SIGNAL :: ENTER LONG TRADE", signal) - ) + return send(createSignalMessage("BUY_SIGNAL :: ENTER LONG TRADE", signal)); } function notifyEnterLongTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! BUY_SIGNAL :: ENTER LONG TRADE", - signal - ) - ) + return send(createSignalMessage(">> SUCCESS! BUY_SIGNAL :: ENTER LONG TRADE", signal)); } function notifyEnterShortSignal(signal) { - return send( - createSignalMessage("SELL_SIGNAL :: ENTER SHORT TRADE", signal) - ) + return send(createSignalMessage("SELL_SIGNAL :: ENTER SHORT TRADE", signal)); } function notifyEnterShortTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! SELL_SIGNAL :: ENTER SHORT TRADE", - signal - ) - ) + return send(createSignalMessage(">> SUCCESS! SELL_SIGNAL :: ENTER SHORT TRADE", signal)); } function notifyExitLongSignal(signal) { - return send( - createSignalMessage( - "SELL_SIGNAL :: SELL TO EXIT LONG TRADE", - signal - ) - ) + return send(createSignalMessage("SELL_SIGNAL :: SELL TO EXIT LONG TRADE", signal)); } function notifyExitLongTraded(signal) { - return send( - createSignalMessage( - ">> SUCCESS! SELL_SIGNAL :: SELL TO EXIT LONG TRADE", - signal - ) - ) + return send(createSignalMessage(">> SUCCESS! SELL_SIGNAL :: SELL TO EXIT LONG TRADE", signal)); } const publicMethods = { diff --git a/src/trader.js b/src/trader.js index 2a4de5d..c4b50d3 100644 --- a/src/trader.js +++ b/src/trader.js @@ -31,7 +31,7 @@ const app = express() app.get("/", (req, res) => res.send("")) app.listen(env.TRADER_PORT, () => console.log("NBT auto trader running.".grey)) -const notifier = require("./notifiers")(trading_pairs) +const notifier = require('./notifiers')(trading_pairs); ////////////////////////////////////////////////////////////////////////////////// @@ -147,15 +147,10 @@ socket.on("buy_signal", async (signal) => { } ////// - trading_pairs[ - signal.pair + signal.stratid - ] = true - trading_types[signal.pair + signal.stratid] = - "LONG" + trading_pairs[signal.pair + signal.stratid] = true + trading_types[signal.pair + signal.stratid] = "LONG" open_trades[signal.pair + signal.stratid] = true - trading_qty[ - signal.pair + signal.stratid - ] = Number(qty) + trading_qty[signal.pair + signal.stratid] = Number(qty) ////// console.log("SUCCESS 222444222") @@ -163,7 +158,7 @@ socket.on("buy_signal", async (signal) => { "traded_buy_signal", traded_buy_signal ) - notifier.notifyEnterLongTraded(signal) + notifier.notifyEnterLongTraded(signal); } ) } else { @@ -182,15 +177,10 @@ socket.on("buy_signal", async (signal) => { } ////// - trading_pairs[ - signal.pair + signal.stratid - ] = true - trading_types[signal.pair + signal.stratid] = - "LONG" + trading_pairs[signal.pair + signal.stratid] = true + trading_types[signal.pair + signal.stratid] = "LONG" open_trades[signal.pair + signal.stratid] = true - trading_qty[ - signal.pair + signal.stratid - ] = Number(qty) + trading_qty[signal.pair + signal.stratid] = Number(qty) ////// console.log( @@ -202,7 +192,7 @@ socket.on("buy_signal", async (signal) => { "traded_buy_signal", traded_buy_signal ) - notifier.notifyEnterLongTraded(signal) + notifier.notifyEnterLongTraded(signal); } ) } @@ -217,7 +207,7 @@ socket.on("buy_signal", async (signal) => { ////// socket.emit("traded_buy_signal", traded_buy_signal) - notifier.notifyEnterLongTraded(signal) + notifier.notifyEnterLongTraded(signal); } } else { console.log("PAIR UNKNOWN", alt) @@ -248,7 +238,9 @@ socket.on("buy_signal", async (signal) => { const alt = signal.pair.replace("BTC", "") if (minimums[alt + "BTC"].minQty) { - const qty = Number(trading_qty[signal.pair + signal.stratid]) + const qty = Number( + trading_qty[signal.pair + signal.stratid] + ) console.log( "QTY ====mgMarketBuy===> " + qty + " - " + alt + "BTC" ) @@ -286,8 +278,11 @@ socket.on("buy_signal", async (signal) => { delete open_trades[signal.pair + signal.stratid] ////// - socket.emit("traded_buy_signal", traded_buy_signal) - notifier.notifyBuyToCoverTraded(signal) + socket.emit( + "traded_buy_signal", + traded_buy_signal + ) + notifier.notifyBuyToCoverTraded(signal); console.log("---+-- mgRepay ---+--") bnb_client.mgRepay( @@ -321,7 +316,7 @@ socket.on("buy_signal", async (signal) => { ////// socket.emit("traded_buy_signal", traded_buy_signal) - notifier.notifyBuyToCoverTraded(signal) + notifier.notifyBuyToCoverTraded(signal); } } else { console.log("PAIR UNKNOWN", alt) @@ -352,7 +347,7 @@ socket.on("sell_signal", async (signal) => { ) //notify notifier.notifyEnterShortSignal(signal) - + console.log( signal.pair, " ===> SELL", @@ -371,7 +366,9 @@ socket.on("sell_signal", async (signal) => { btc_qty, minimums[alt + "BTC"].stepSize ) - console.log("QTY ===mgBorrow===> " + qty + " - " + alt + "BTC") + console.log( + "QTY ===mgBorrow===> " + qty + " - " + alt + "BTC" + ) const traded_sell_signal = { key: bva_key, stratname: signal.stratname, @@ -382,51 +379,52 @@ socket.on("sell_signal", async (signal) => { } if (user_payload[tresult].trading_type === "real") { - bnb_client.mgBorrow(alt, Number(qty), (error, response) => { - if (error) { + bnb_client.mgBorrow( + alt, + Number(qty), + (error, response) => { + if (error) { + console.log( + "ERROR 55555555555", + alt, + Number(qty), + JSON.stringify(error) + ) + return + } + console.log( - "ERROR 55555555555", - alt, - Number(qty), - JSON.stringify(error) + "SUCESS 444444444 mgMarketSell 44444444" ) - return - } + bnb_client.mgMarketSell( + alt + "BTC", + Number(qty), + (error, response) => { + if (error) { + console.log( + "ERROR 333333333", + JSON.stringify(error) + ) + return + } - console.log("SUCESS 444444444 mgMarketSell 44444444") - bnb_client.mgMarketSell( - alt + "BTC", - Number(qty), - (error, response) => { - if (error) { - console.log( - "ERROR 333333333", - JSON.stringify(error) + ////// + trading_pairs[signal.pair + signal.stratid] = true + trading_types[signal.pair + signal.stratid] = "SHORT" + open_trades[signal.pair + signal.stratid] = true + trading_qty[signal.pair + signal.stratid] = Number(qty) + ////// + + console.log("SUCCESS 22222222") + socket.emit( + "traded_sell_signal", + traded_sell_signal ) - return + notifier.notifyEnterShortTraded(signal); } - - ////// - trading_pairs[ - signal.pair + signal.stratid - ] = true - trading_types[signal.pair + signal.stratid] = - "SHORT" - open_trades[signal.pair + signal.stratid] = true - trading_qty[ - signal.pair + signal.stratid - ] = Number(qty) - ////// - - console.log("SUCCESS 22222222") - socket.emit( - "traded_sell_signal", - traded_sell_signal - ) - notifier.notifyEnterShortTraded(signal) - } - ) - }) + ) + } + ) } else { // VIRTUAL TRADE @@ -438,7 +436,7 @@ socket.on("sell_signal", async (signal) => { ////// socket.emit("traded_sell_signal", traded_sell_signal) - notifier.notifyEnterShortTraded(signal) + notifier.notifyEnterShortTraded(signal); } } else { console.log("PAIR UNKNOWN", alt) @@ -485,10 +483,10 @@ socket.on("sell_signal", async (signal) => { if (margin_pairs.includes(alt + "BTC")) { console.log( "QTY =======mgMarketSell======> " + - qty + - " - " + - alt + - "BTC" + qty + + " - " + + alt + + "BTC" ) bnb_client.mgMarketSell( alt + "BTC", @@ -505,19 +503,19 @@ socket.on("sell_signal", async (signal) => { } ////// - delete trading_pairs[ - signal.pair + signal.stratid - ] - delete trading_types[ - signal.pair + signal.stratid - ] + delete trading_pairs[signal.pair + signal.stratid] + delete trading_types[signal.pair + signal.stratid] delete sell_prices[signal.pair + signal.stratid] delete buy_prices[signal.pair + signal.stratid] delete trading_qty[signal.pair + signal.stratid] delete open_trades[signal.pair + signal.stratid] ////// - console.log("SUCESS 71111111", alt, Number(qty)) + console.log( + "SUCESS 71111111", + alt, + Number(qty) + ) socket.emit( "traded_sell_signal", traded_sell_signal @@ -528,10 +526,10 @@ socket.on("sell_signal", async (signal) => { } else { console.log( "QTY =======marketSell======> " + - qty + - " - " + - alt + - "BTC" + qty + + " - " + + alt + + "BTC" ) bnb_client.marketSell( alt + "BTC", @@ -548,12 +546,8 @@ socket.on("sell_signal", async (signal) => { } ////// - delete trading_pairs[ - signal.pair + signal.stratid - ] - delete trading_types[ - signal.pair + signal.stratid - ] + delete trading_pairs[signal.pair + signal.stratid] + delete trading_types[signal.pair + signal.stratid] delete sell_prices[signal.pair + signal.stratid] delete buy_prices[signal.pair + signal.stratid] delete trading_qty[signal.pair + signal.stratid] @@ -646,10 +640,10 @@ socket.on("close_traded_signal", async (signal) => { if (margin_pairs.includes(alt + "BTC")) { console.log( "CLOSE =========mgMarketSell=========> " + - qty + - " - " + - alt + - "BTC" + qty + + " - " + + alt + + "BTC" ) bnb_client.mgMarketSell( alt + "BTC", @@ -666,18 +660,14 @@ socket.on("close_traded_signal", async (signal) => { } ////// - delete trading_pairs[ - signal.pair + signal.stratid - ] - delete trading_types[ - signal.pair + signal.stratid - ] + delete trading_pairs[signal.pair + signal.stratid] + delete trading_types[signal.pair + signal.stratid] delete sell_prices[signal.pair + signal.stratid] delete buy_prices[signal.pair + signal.stratid] delete trading_qty[signal.pair + signal.stratid] delete open_trades[signal.pair + signal.stratid] ////// - + console.log("SUCESS44444", alt, Number(qty)) socket.emit( "traded_sell_signal", @@ -688,10 +678,10 @@ socket.on("close_traded_signal", async (signal) => { } else { console.log( "CLOSE =========marketSell=========> " + - qty + - " - " + - alt + - "BTC" + qty + + " - " + + alt + + "BTC" ) bnb_client.marketSell( alt + "BTC", @@ -708,12 +698,8 @@ socket.on("close_traded_signal", async (signal) => { } ////// - delete trading_pairs[ - signal.pair + signal.stratid - ] - delete trading_types[ - signal.pair + signal.stratid - ] + delete trading_pairs[signal.pair + signal.stratid] + delete trading_types[signal.pair + signal.stratid] delete sell_prices[signal.pair + signal.stratid] delete buy_prices[signal.pair + signal.stratid] delete trading_qty[signal.pair + signal.stratid] @@ -736,6 +722,7 @@ socket.on("close_traded_signal", async (signal) => { } else { console.log("PAIR UNKNOWN", alt) } + } else { // VIRTUAL TRADE @@ -784,7 +771,9 @@ socket.on("close_traded_signal", async (signal) => { console.log( "ERROR 2 ", alt, - Number(user_payload[tresult].buy_amount), + Number( + user_payload[tresult].buy_amount + ), error.body ) return @@ -799,7 +788,10 @@ socket.on("close_traded_signal", async (signal) => { delete open_trades[signal.pair + signal.stratid] ////// - socket.emit("traded_buy_signal", traded_buy_signal) + socket.emit( + "traded_buy_signal", + traded_buy_signal + ) console.log("----- mgRepay -----") bnb_client.mgRepay( @@ -823,6 +815,7 @@ socket.on("close_traded_signal", async (signal) => { } else { console.log("PAIR UNKNOWN", alt) } + } else { // VIRTUAL TRADE @@ -928,7 +921,7 @@ async function UpdateOpenTrades() { axios .get( "https://bitcoinvsaltcoins.com/api/useropentradedsignals?key=" + - bva_key + bva_key ) .then((response) => { response.data.rows.map((s) => {