From 2e32d102de62fd08b40eb5c6cf32d9af7d2e4fb1 Mon Sep 17 00:00:00 2001 From: Smidy13 <77650800+Smidy13@users.noreply.github.com> Date: Sun, 6 Jun 2021 18:22:16 +1200 Subject: [PATCH] Improvement: Social Bot Command Node --- .../nodes/social-bot-command.svg | 182 ++++++++++++++++++ .../Superalgos/Icons/social-bot-command.png | Bin 0 -> 25045 bytes .../Schemas/App-Schema/formula.json | 2 +- .../App-Schema/social-bot-command.json | 49 +++++ .../Schemas/App-Schema/telegram-bot.json | 15 +- .../Trading-Bot/Announcements/SocialBots.js | 7 +- .../Trading-Bot/Announcements/TelegramBot.js | 106 ++++------ .../TradingSessionFunctions.js | 1 + 8 files changed, 283 insertions(+), 79 deletions(-) create mode 100644 Projects/Superalgos/Icons-SVG-Sources/nodes/social-bot-command.svg create mode 100644 Projects/Superalgos/Icons/social-bot-command.png create mode 100644 Projects/Superalgos/Schemas/App-Schema/social-bot-command.json diff --git a/Projects/Superalgos/Icons-SVG-Sources/nodes/social-bot-command.svg b/Projects/Superalgos/Icons-SVG-Sources/nodes/social-bot-command.svg new file mode 100644 index 000000000..f99bd7c9c --- /dev/null +++ b/Projects/Superalgos/Icons-SVG-Sources/nodes/social-bot-command.svg @@ -0,0 +1,182 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Superalgos/Icons/social-bot-command.png b/Projects/Superalgos/Icons/social-bot-command.png new file mode 100644 index 0000000000000000000000000000000000000000..0318ce9ae7b55cd5c8a70dc339ae8437faae7924 GIT binary patch literal 25045 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 literal 0 HcmV?d00001 diff --git a/Projects/Superalgos/Schemas/App-Schema/formula.json b/Projects/Superalgos/Schemas/App-Schema/formula.json index 899eb3258..5acb5a1e1 100644 --- a/Projects/Superalgos/Schemas/App-Schema/formula.json +++ b/Projects/Superalgos/Schemas/App-Schema/formula.json @@ -28,7 +28,7 @@ }, "level": 4, "attachingRules": { - "compatibleTypes": "->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Phase->Simulated Actual Rate->Situation->Indicator Function->Order Rate->" + "compatibleTypes": "->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Phase->Simulated Actual Rate->Situation->Indicator Function->Order Rate->Social Bot Command->" }, "propertyNameAtParent": "formula" } \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/App-Schema/social-bot-command.json b/Projects/Superalgos/Schemas/App-Schema/social-bot-command.json new file mode 100644 index 000000000..dd25f533a --- /dev/null +++ b/Projects/Superalgos/Schemas/App-Schema/social-bot-command.json @@ -0,0 +1,49 @@ +{ + "type": "Social Bot Command", + "editors": { + "config": true + }, + "menuItems": [ + { + "action": "Configure", + "actionFunction": "uiObject.configEditor.activate", + "label": "Configure", + "iconPathOn": "configuration", + "iconPathOff": "configuration" + }, + { + "action": "Add UI Object", + "disableIfPropertyIsDefined": true, + "propertyToCheckFor": "formula", + "label": "Add Formula", + "relatedUiObject": "Formula", + "actionFunction": "payload.executeAction" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionFunction": "payload.executeAction" + } + ], + "initialValues": { + "config": "{ \n\"name\": \"Enter the name of the command without a leading slash\"\n}" + }, + "addLeftIcons": true, + "level": 4, + "attachingRules": { + "compatibleTypes": "->Telegram Bot->" + }, + "childrenNodesProperties": [ + { + "name": "formula", + "type": "node", + "childType": "Formula", + "autoAdd": true + } + ], + "propertyNameAtParent": "socialBotCommand" +} diff --git a/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json b/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json index 6a9829a18..809452173 100644 --- a/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json +++ b/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json @@ -11,6 +11,12 @@ "iconPathOn": "configuration", "iconPathOff": "configuration" }, + { + "action": "Add UI Object", + "label": "Add Social Bot Command", + "relatedUiObject": "Social Bot Command", + "actionFunction": "payload.executeAction" + }, { "action": "Send Telegram Test Message", "label": "Send Telegram Test Message", @@ -36,6 +42,13 @@ "attachingRules": { "compatibleTypes": "->Social Bots->" }, - "childrenNodesProperties": [], + "childrenNodesProperties": [ + { + "name": "socialBotCommand", + "type": "array", + "childType": "Social Bot Command", + "autoAdd": true + } + ], "propertyNameAtParent": "telegramBots" } \ No newline at end of file diff --git a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js index fe7736edd..e334380d9 100644 --- a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js +++ b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js @@ -16,16 +16,15 @@ exports.newSuperalgosBotModulesSocialBots = function (processIndex) { if (prop.toLowerCase().includes("Bots".toLowerCase())) { for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) { let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i] + let config = socialBot.config + let commands = socialBot.socialBotCommand if (socialBot.type === "Telegram Bot") { - let config = socialBot.config socialBot.botInstance = TS.projects.superalgos.botModules.telegramBot.newSuperalgosBotModulesTelegramBot(processIndex) - socialBot.botInstance.initialize(config.botToken, config.chatId) + socialBot.botInstance.initialize(config, commands) } else if (socialBot.type === "Discord Bot") { - let config = socialBot.config socialBot.botInstance = TS.projects.superalgos.botModules.discordBot.newSuperalgosBotModulesDiscordBot(processIndex) socialBot.botInstance.initialize(config) } else if (socialBot.type === "Slack Bot") { - let config = socialBot.config socialBot.botInstance = TS.projects.superalgos.botModules.slackBot.newSuperalgosBotModulesSlackBot(processIndex) socialBot.botInstance.initialize(config) } diff --git a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js index 2d47ba3bc..a5b34f5ed 100644 --- a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js +++ b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/TelegramBot.js @@ -14,9 +14,12 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) { return thisObject - function initialize(botToken, chatId) { + function initialize(config, commands) { /* Telegram Bot Initialization */ try { + let botToken = config.botToken + let chatId = config.chatId + thisObject.chatId = chatId const Telegraf = require('telegraf') @@ -25,16 +28,17 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) { thisObject.telegramBot.start((ctx) => ctx.reply('Hi! I am the Telegram Bot that will tell you what happens with your trading session.')) thisObject.telegramBot.help((ctx) => ctx.replyWithHTML('SUPERALGOS BOT HELP\n\n' + '• Use /stop to stop the session.\n' + - '• Use /help to receive this help message.\n' + - '• Use /balances for episode balances.\n' + - '• Use /counters for episode counters.\n' + - '• Use /statistics for episode statistics.\n' + - '• Use /uptime for episode uptime.')) + '• Use /help to receive this help message.\n\n' + + 'Additional commands can be configured using the Social Bot Command node.')) thisObject.telegramBot.command('stop', (ctx) => TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.')) - thisObject.telegramBot.command('balances', (ctx) => interpretCommand('balances', processIndex)) - thisObject.telegramBot.command('uptime', (ctx) => interpretCommand('uptime', processIndex)) - thisObject.telegramBot.command('statistics', (ctx) => interpretCommand('statistics', processIndex)) - thisObject.telegramBot.command('counters', (ctx) => interpretCommand('counters', processIndex)) + + /* Set up additional commands for each Social Bot Command node */ + if(commands !== undefined) { + for (let i = 0; i < commands.length; i++) { + thisObject.telegramBot.command(commands[i].config.name, (ctx) => interpretCommand(commands[i].formula.code, processIndex)) + } + } + thisObject.telegramBot.launch() const Telegram = require('telegraf/telegram') @@ -67,72 +71,28 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) { let message let tradingEngine - let tradingEpisode - let sessionNode - let sessionName + let tradingSystem + let sessionParameters - tradingEngine = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine - tradingEpisode = tradingEngine.tradingCurrent.tradingEpisode + if(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE !== undefined) { + tradingEngine = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine + tradingSystem = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingSystem + } + sessionParameters = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.tradingParameters - sessionNode = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE - sessionName = sessionNode.name + let taskParameters = { + exchange: TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name, + market: TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + + '/' + + TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName + } - - switch (command) { - case 'balances': { - - let baseAsset = TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName - let quotedAsset = TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName - - message = "SUPERALGOS BALANCES\n\nTrading Session: " + sessionName + - "\nPair: " + baseAsset + "/" + quotedAsset + - "\nBase Asset: " + tradingEpisode.episodeBaseAsset.balance.value + " " + baseAsset + - "\nQuoted Asset: " + tradingEpisode.episodeQuotedAsset.balance.value + " " + quotedAsset - break - } - case 'uptime': { - - let sessionBegin = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_BEGIN - - let dateBegin = new Date(sessionBegin) - let dateNow = new Date(); - - let seconds = Math.floor((dateNow - (dateBegin))/1000) - let minutes = Math.floor(seconds/60) - let hours = Math.floor(minutes/60) - let days = Math.floor(hours/24) - - hours = hours-(days*24) - minutes = minutes-(days*24*60)-(hours*60) - seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60) - - let uptime = days + "D, " + hours + "H, " + minutes + "M, " + seconds + "S" - - message = "SUPERALGOS UPTIME\n\nTrading Session: " + sessionName + - "\nUptime: " + uptime - break - } - case 'statistics': { - - message = "SUPERALGOS STATISTICS\n\nTrading Session: " + sessionName + - "\nDays: " + (tradingEpisode.tradingEpisodeStatistics.days.value).toFixed(2) + - "\nProfit Loss: " + tradingEpisode.tradingEpisodeStatistics.profitLoss.value + - "\nROI: " + (tradingEpisode.tradingEpisodeStatistics.ROI.value).toFixed(2) + - "\nAnnualized Rate Of Return: " + (tradingEpisode.tradingEpisodeStatistics.annualizedRateOfReturn.value).toFixed(2) + - "\nHit Fail: " + tradingEpisode.tradingEpisodeStatistics.hitFail.value - break - } - case 'counters': { - - message = "SUPERALGOS COUNTERS\n\nTrading Session: " + sessionName + - "\nPeriods: " + tradingEpisode.tradingEpisodeCounters.periods.value + - "\nStrategies: " + tradingEpisode.tradingEpisodeCounters.strategies.value + - "\nPositions: " + tradingEpisode.tradingEpisodeCounters.positions.value + - "\nOrders: " + tradingEpisode.tradingEpisodeCounters.orders.value + - "\nHits: " + tradingEpisode.tradingEpisodeCounters.hits.value + - "\nFails: " + tradingEpisode.tradingEpisodeCounters.fails.value - break - } + try { + message = eval(command) + } catch (err) { + TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME, + "[WARN] interpretCommand -> Telegram API error evaluating user formula -> err = " + err.stack) + return } thisObject.telegramAPI.sendMessage(thisObject.chatId, message, {parse_mode: 'HTML'}).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME, diff --git a/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js index d70d32fb5..f59315da3 100644 --- a/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js +++ b/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js @@ -156,6 +156,7 @@ function newSuperalgosFunctionLibraryTradingSessionFunctions() { 'Trading Parameters->' + 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + 'Social Bots->Telegram Bot->Discord Bot->Slack Bot->' + + 'Social Bot Command->Formula->' + 'Exchange Account Asset->Asset->' let session = UI.projects.superalgos.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath)