From fd905430636ce4a6e21083d7ec3f37d106053219 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 30 Nov 2020 12:40:07 +0100 Subject: [PATCH] session stop function --- .../TS/Function-Libraries/SessionFunctions.js | 9 +++++++++ .../Superalgos/TS/Globals/ProcessVariables.js | 1 + TaskServer/LearningSession.js | 12 +++++------ .../LowFrequencyTrading/TradingProcess.js | 2 +- .../LowFrequencyTrading/TradingSimulation.js | 6 +++--- .../ReinforcementLearning/LearningProcess.js | 2 +- TaskServer/TelegramBot.js | 2 +- TaskServer/TradingSession.js | 20 +++++-------------- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Projects/Superalgos/TS/Function-Libraries/SessionFunctions.js b/Projects/Superalgos/TS/Function-Libraries/SessionFunctions.js index a0dd3b545..b0c61f28b 100644 --- a/Projects/Superalgos/TS/Function-Libraries/SessionFunctions.js +++ b/Projects/Superalgos/TS/Function-Libraries/SessionFunctions.js @@ -1,6 +1,7 @@ exports.newSuperalgosFunctionLibrariesSessionFunctions = function () { let thisObject = { + stopSession: stopSession, emitSessionStatus: emitSessionStatus, finalizeSessions: finalizeSessions, sessionError: sessionError, @@ -10,6 +11,14 @@ exports.newSuperalgosFunctionLibrariesSessionFunctions = function () { return thisObject + function stopSession(processIndex, commandOrigin) { + + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is stopping " + commandOrigin) + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.finalize() + bot.STOP_SESSION = true + TS.projects.superalgos.functionLibraries.sessionFunctions.sessionInfo(processIndex, bot.TRADING_SESSION, commandOrigin, parentLogger) + } + function emitSessionStatus(status, key) { switch (status) { case 'Running': { diff --git a/Projects/Superalgos/TS/Globals/ProcessVariables.js b/Projects/Superalgos/TS/Globals/ProcessVariables.js index 69e06b340..14f71bdc3 100644 --- a/Projects/Superalgos/TS/Globals/ProcessVariables.js +++ b/Projects/Superalgos/TS/Globals/ProcessVariables.js @@ -21,6 +21,7 @@ exports.newSuperalgosGlobalsProcessVariables = function () { SESSION_FOLDER_NAME This is the folder name for Session related data and logs. MAIN_LOOP_COUNTER This is the counter of main loops for a bot process. LOGS_TO_DELETE_QUEUE This stores the logs that need to be deleted, for auto mantainance. + SOCIAL_BOTS_MODULE This is the module that controls social bots. */ return thisObject } \ No newline at end of file diff --git a/TaskServer/LearningSession.js b/TaskServer/LearningSession.js index f736b5f55..12b545a0b 100644 --- a/TaskServer/LearningSession.js +++ b/TaskServer/LearningSession.js @@ -7,7 +7,7 @@ exports.newLearningSession = function (processIndex, bot, parentLogger) { } const SOCIAL_BOTS_MODULE = require('./SocialBots.js') - let socialBotsModule = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) return thisObject; @@ -92,7 +92,7 @@ exports.newLearningSession = function (processIndex, bot, parentLogger) { /* We validate all parameters received and complete some that might be missing if needed. */ if (checkParemeters() === false) { return } - socialBotsModule.initialize() + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.initialize() let allGood switch (bot.LEARNING_SESSION.type) { @@ -121,7 +121,7 @@ exports.newLearningSession = function (processIndex, bot, parentLogger) { parentLogger.write(MODULE_NAME, '[IMPORTANT] onSessionRun -> Stopping the Session now. ') } - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is starting.") + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is starting.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionRun -> err = " + err.stack); } @@ -147,7 +147,7 @@ exports.newLearningSession = function (processIndex, bot, parentLogger) { bot.RESUME = true bot.STOP_SESSION = false - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is resuming.") + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is resuming.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionResume -> err = " + err.stack); } @@ -155,8 +155,8 @@ exports.newLearningSession = function (processIndex, bot, parentLogger) { function stopSession(commandOrigin) { - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is stopping " + commandOrigin) - socialBotsModule.finalize() + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.LEARNING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is stopping " + commandOrigin) + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.finalize() bot.STOP_SESSION = true parentLogger.write(MODULE_NAME, '[IMPORTANT] stopSession -> Stopping the Session now. ') TS.projects.superalgos.functionLibraries.sessionFunctions.sessionInfo(processIndex, bot.LEARNING_SESSION, commandOrigin, parentLogger) diff --git a/TaskServer/LowFrequencyTrading/TradingProcess.js b/TaskServer/LowFrequencyTrading/TradingProcess.js index 430f59234..e80fa699b 100644 --- a/TaskServer/LowFrequencyTrading/TradingProcess.js +++ b/TaskServer/LowFrequencyTrading/TradingProcess.js @@ -733,7 +733,7 @@ Backtests needs only one execution of this process to complete. */ if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') } - bot.TRADING_SESSION.stop('Backtesting Session Finished.') + TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') } } } diff --git a/TaskServer/LowFrequencyTrading/TradingSimulation.js b/TaskServer/LowFrequencyTrading/TradingSimulation.js index d8da65347..bee1eaa21 100644 --- a/TaskServer/LowFrequencyTrading/TradingSimulation.js +++ b/TaskServer/LowFrequencyTrading/TradingSimulation.js @@ -71,7 +71,7 @@ exports.newTradingSimulation = function (processIndex, bot, logger, tradingEngin This will happen when the sessionParameters.timeRange.config.initialDatetime is beyond the last candle available, meaning that the dataSet needs to be updated with more up-to-date data. */ - bot.TRADING_SESSION.stop('Data is not up-to-date enough. Please start the Masters Data Mining Operation.') + TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'Data is not up-to-date enough. Please start the Masters Data Mining Operation.') if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Data is not up-to-date enough. Stopping the Session now. ') } return } @@ -210,7 +210,7 @@ exports.newTradingSimulation = function (processIndex, bot, logger, tradingEngin if (checkFinalDatetime() === false) { closeEpisode('Final Datetime Reached') breakLoop = true - bot.TRADING_SESSION.stop('Final Datetime Reached') + TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'Final Datetime Reached') if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Final Datetime Reached. Stopping the Session now. ') } return } @@ -218,7 +218,7 @@ exports.newTradingSimulation = function (processIndex, bot, logger, tradingEngin if (checkMinimunAndMaximunBalance() === false) { closeEpisode('Min or Max Balance Reached') breakLoop = true - bot.TRADING_SESSION.stop('Min or Max Balance Reached') + TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'Min or Max Balance Reached') if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Min or Max Balance Reached. Stopping the Session now. ') } return } diff --git a/TaskServer/ReinforcementLearning/LearningProcess.js b/TaskServer/ReinforcementLearning/LearningProcess.js index 473b21a7c..42613d97d 100644 --- a/TaskServer/ReinforcementLearning/LearningProcess.js +++ b/TaskServer/ReinforcementLearning/LearningProcess.js @@ -733,7 +733,7 @@ exports.newLearningProcess = function (processIndex, bot, logger, UTILITIES) { Backtests needs only one execution of this process to complete. */ if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') } - bot.TRADING_SESSION.stop('Backtesting Session Finished.') + TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'Backtesting Session Finished.') } } } diff --git a/TaskServer/TelegramBot.js b/TaskServer/TelegramBot.js index 79b7c5212..226e08cc3 100644 --- a/TaskServer/TelegramBot.js +++ b/TaskServer/TelegramBot.js @@ -23,7 +23,7 @@ exports.newTelegramBot = function newTelegramBot(bot, logger) { thisObject.telegramBot = new Telegraf(botToken) 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.reply('I can stop the session if you type STOP.')) - thisObject.telegramBot.hears('STOP', (ctx) => bot.TRADING_SESSION.stop(' by STOP command at Telegram.')) + thisObject.telegramBot.hears('STOP', (ctx) => TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, ' by STOP command at Telegram.')) thisObject.telegramBot.launch() const Telegram = require('telegraf/telegram') diff --git a/TaskServer/TradingSession.js b/TaskServer/TradingSession.js index 8198f6f8a..e0195d9cf 100644 --- a/TaskServer/TradingSession.js +++ b/TaskServer/TradingSession.js @@ -7,7 +7,7 @@ } const SOCIAL_BOTS_MODULE = require('./SocialBots.js') - let socialBotsModule = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) return thisObject; @@ -86,14 +86,13 @@ bot.DEPENDENCY_FILTER = JSON.parse(message.event.dependencyFilter) bot.RESUME = false bot.FIRST_EXECUTION = true - bot.TRADING_SESSION.stop = stopSession // stop function setUpSessionFolderName() /* We validate all parameters received and complete some that might be missing if needed. */ if (checkParemeters() === false) { return } - socialBotsModule.initialize() + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.initialize() let allGood switch (bot.TRADING_SESSION.type) { @@ -122,7 +121,7 @@ parentLogger.write(MODULE_NAME, '[IMPORTANT] onSessionRun -> Stopping the Session now. ') } - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is starting.") + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is starting.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionRun -> err = " + err.stack); } @@ -134,7 +133,7 @@ function onSessionResume(message) { try { - if (bot.TRADING_SESSION.stop === undefined) { + if (TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession === undefined) { parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") return } @@ -148,21 +147,12 @@ bot.RESUME = true bot.STOP_SESSION = false - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is resuming.") + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is resuming.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionResume -> err = " + err.stack); } } - function stopSession(commandOrigin) { - - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + TS.projects.superalgos.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name + "' is stopping " + commandOrigin) - socialBotsModule.finalize() - bot.STOP_SESSION = true - parentLogger.write(MODULE_NAME, '[IMPORTANT] stopSession -> Stopping the Session now. ') - TS.projects.superalgos.functionLibraries.sessionFunctions.sessionInfo(processIndex, bot.TRADING_SESSION, commandOrigin, parentLogger) - } - function setUpSessionFolderName() { /* The session object is overwritten when the session is run. For that reason we