diff --git a/Commons.js b/Commons.js index 19c917f82..7e32f50cb 100644 --- a/Commons.js +++ b/Commons.js @@ -100,7 +100,7 @@ botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Trading Bot') } if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'AI Bot') + botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Learning Bot') } if (botNode === undefined) { logger.write(MODULE_NAME, "[ERROR] start -> Product Definition not attached to a Bot. Product Definition = "); @@ -118,14 +118,14 @@ if (dataMineNode === undefined) { let tradingMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Trading Mine') if (tradingMineNode === undefined) { - let intelMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Intel Mine') - if (intelMineNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Bot not attached to a Data Mine, Trading Mine or Intel Mine."); + let learningMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Learning Mine') + if (learningMineNode === undefined) { + logger.write(MODULE_NAME, "[ERROR] start -> Bot not attached to a Data Mine, Trading Mine or Learning Mine."); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return } else { if (tradingMineNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Intel Mine witn no codeName defined."); + logger.write(MODULE_NAME, "[ERROR] start -> Learning Mine witn no codeName defined."); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return } diff --git a/DataDependencies.js b/DataDependencies.js index 361fc3307..bc6cbf79e 100644 --- a/DataDependencies.js +++ b/DataDependencies.js @@ -65,7 +65,7 @@ let skipCount = 0 /* - The current nodeArray that we have includes all the dependencies daclared in the Data Mine | Trading Mine | Intel Mine + The current nodeArray that we have includes all the dependencies daclared in the Data Mine | Trading Mine | Learning Mine process dependencies, minus the ones without reference parent, meaning that references Data Mines that are not present at the workspace. From all the remaining dependencies there will be others that we need to filter out, and they are the ones which the user does not have a data product anywhere on the network where diff --git a/DebugLog.js b/DebugLog.js index 3b6f25570..91b318fe7 100644 --- a/DebugLog.js +++ b/DebugLog.js @@ -83,8 +83,8 @@ exports.newDebugLog = function newDebugLog() { if (thisObject.bot.TRADING_SESSION !== undefined) { filePath = filePath + thisObject.bot.TRADING_SESSION.folderName + "/" + executionDatetime; } else { - if (thisObject.bot.AI_SESSION !== undefined) { - filePath = filePath + thisObject.bot.AI_SESSION.folderName + "/" + executionDatetime; + if (thisObject.bot.LEARNING_SESSION !== undefined) { + filePath = filePath + thisObject.bot.LEARNING_SESSION.folderName + "/" + executionDatetime; } else { filePath = filePath + executionDatetime; } diff --git a/TrainingSession.js b/LearningSession.js similarity index 69% rename from TrainingSession.js rename to LearningSession.js index cb5a15256..6b6a5f438 100644 --- a/TrainingSession.js +++ b/LearningSession.js @@ -1,6 +1,6 @@ -exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { +exports.newLearningSession = function newLearningSession(bot, parentLogger) { - const MODULE_NAME = "Training Session" + const MODULE_NAME = "Learning Session" const FULL_LOG = true; let thisObject = { @@ -15,16 +15,16 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { function initialize(pProcessConfig, callBackFunction) { try { /* Initialize this info so that everything is logged propeerly */ - bot.AI_SESSION = { + bot.LEARNING_SESSION = { name: bot.processNode.session.name, id: bot.processNode.session.id } /* Set the folderName for early logging */ if (bot.processNode.session.config.folderName === undefined) { - bot.AI_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.AI_SESSION.id + bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.LEARNING_SESSION.id } else { - bot.AI_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName + bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName } /* Check if there is a session */ @@ -79,11 +79,11 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { /* We are going to run the Definition comming at the event. */ bot.TRADING_SYSTEM = JSON.parse(message.event.tradingSystem) bot.TRADING_ENGINE = JSON.parse(message.event.tradingEngine) - bot.AI_SESSION = JSON.parse(message.event.session) + bot.LEARNING_SESSION = JSON.parse(message.event.session) bot.DEPENDENCY_FILTER = JSON.parse(message.event.dependencyFilter) bot.RESUME = false bot.FIRST_EXECUTION = true - bot.AI_SESSION.stop = stopSession // stop function + bot.LEARNING_SESSION.stop = stopSession // stop function setUpSessionFolderName() @@ -93,7 +93,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { socialBotsModule.initialize() let allGood - switch (bot.AI_SESSION.type) { + switch (bot.LEARNING_SESSION.type) { case 'Backtesting Session': { allGood = startBackTesting(message) break @@ -119,7 +119,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] onSessionRun -> Stopping the Session now. ') } } - socialBotsModule.sendMessage(bot.AI_SESSION.type + " '" + bot.AI_SESSION.name + "' is starting.") + socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is starting.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionRun -> err = " + err.stack); } @@ -131,7 +131,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { function onSessionResume(message) { try { - if (bot.AI_SESSION.stop === undefined) { + if (bot.LEARNING_SESSION.stop === undefined) { parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") return } @@ -145,7 +145,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { bot.RESUME = true bot.STOP_SESSION = false - socialBotsModule.sendMessage(bot.AI_SESSION.type + " '" + bot.AI_SESSION.name + "' is resuming.") + socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is resuming.") } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionResume -> err = " + err.stack); } @@ -153,11 +153,11 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { function stopSession(commandOrigin) { - socialBotsModule.sendMessage(bot.AI_SESSION.type + " '" + bot.AI_SESSION.name + "' is stopping " + commandOrigin) + socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is stopping " + commandOrigin) socialBotsModule.finalize() bot.STOP_SESSION = true if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] stopSession -> Stopping the Session now. ') } - sessionInfo(bot.AI_SESSION, commandOrigin) + sessionInfo(bot.LEARNING_SESSION, commandOrigin) } function setUpSessionFolderName() { @@ -167,12 +167,12 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { Set the folderName for logging, reports, context and data output */ let config - if (bot.AI_SESSION.config !== undefined) { - config = bot.AI_SESSION.config + if (bot.LEARNING_SESSION.config !== undefined) { + config = bot.LEARNING_SESSION.config if (config.folderName === undefined) { - bot.AI_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.AI_SESSION.id + bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.LEARNING_SESSION.id } else { - bot.AI_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName + bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName } } } @@ -183,16 +183,16 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { non critical is missing, we complete it with a default value. */ - if (bot.AI_SESSION.parameters === undefined) { + if (bot.LEARNING_SESSION.parameters === undefined) { let errorMessage = "Session Node with no Parameters." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION, errorMessage) + bot.sessionError(bot.LEARNING_SESSION, errorMessage) return false } /* Time Range */ - if (bot.AI_SESSION.parameters.timeRange === undefined) { // if the Time Range is missing we create a default one. - bot.AI_SESSION.parameters.timeRange = { + if (bot.LEARNING_SESSION.parameters.timeRange === undefined) { // if the Time Range is missing we create a default one. + bot.LEARNING_SESSION.parameters.timeRange = { name: 'Missing Time Range', type: 'Time Range', config: { @@ -202,18 +202,18 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { } } else { /* Check that we received valid dates */ - if (bot.AI_SESSION.type === 'Backtesting Session') { - if (isNaN(new Date(bot.AI_SESSION.parameters.timeRange.config.initialDatetime)).valueOf()) { + if (bot.LEARNING_SESSION.type === 'Backtesting Session') { + if (isNaN(new Date(bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime)).valueOf()) { let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters, errorMessage) return false } } - if (isNaN(new Date(bot.AI_SESSION.parameters.timeRange.config.finalDatetime)).valueOf()) { + if (isNaN(new Date(bot.LEARNING_SESSION.parameters.timeRange.config.finalDatetime)).valueOf()) { let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters, errorMessage) return false } } @@ -222,7 +222,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { let today = (new Date()).valueOf() let aYearAgo = today - global.ONE_YEAR_IN_MILISECONDS let aYearFromNow = today + global.ONE_YEAR_IN_MILISECONDS - switch (bot.AI_SESSION.type) { + switch (bot.LEARNING_SESSION.type) { case 'Backtesting Session': { useDefaultDatetimes(aYearAgo, today) break @@ -248,81 +248,81 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { */ /* Initial Datetime */ - if (bot.AI_SESSION.type === 'Backtesting Session') { - if (bot.AI_SESSION.parameters.timeRange.config.initialDatetime === undefined) { - bot.AI_SESSION.parameters.timeRange.config.initialDatetime = initialDefault + if (bot.LEARNING_SESSION.type === 'Backtesting Session') { + if (bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime === undefined) { + bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime = initialDefault } else { - bot.AI_SESSION.parameters.timeRange.config.initialDatetime = (new Date(bot.AI_SESSION.parameters.timeRange.config.initialDatetime)).valueOf() + bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime = (new Date(bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime)).valueOf() } } else { /* Non backtest session can start from the past only if explicitly configured that way */ - if (bot.AI_SESSION.parameters.timeRange.config.initialDatetime === undefined || bot.AI_SESSION.parameters.timeRange.config.allowStartingFromThePast !== true) { - bot.AI_SESSION.parameters.timeRange.config.initialDatetime = initialDefault + if (bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime === undefined || bot.LEARNING_SESSION.parameters.timeRange.config.allowStartingFromThePast !== true) { + bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime = initialDefault } else { - bot.AI_SESSION.parameters.timeRange.config.initialDatetime = (new Date(bot.AI_SESSION.parameters.timeRange.config.initialDatetime)).valueOf() + bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime = (new Date(bot.LEARNING_SESSION.parameters.timeRange.config.initialDatetime)).valueOf() } } /* Final Datetime */ - if (bot.AI_SESSION.parameters.timeRange.config.finalDatetime === undefined) { - bot.AI_SESSION.parameters.timeRange.config.finalDatetime = finalDefault + if (bot.LEARNING_SESSION.parameters.timeRange.config.finalDatetime === undefined) { + bot.LEARNING_SESSION.parameters.timeRange.config.finalDatetime = finalDefault } else { - bot.AI_SESSION.parameters.timeRange.config.finalDatetime = (new Date(bot.AI_SESSION.parameters.timeRange.config.finalDatetime)).valueOf() + bot.LEARNING_SESSION.parameters.timeRange.config.finalDatetime = (new Date(bot.LEARNING_SESSION.parameters.timeRange.config.finalDatetime)).valueOf() } } /* Time Frame */ - if (bot.AI_SESSION.parameters.timeFrame === undefined) { + if (bot.LEARNING_SESSION.parameters.timeFrame === undefined) { let errorMessage = "Session Parameters Node with no Time Frame." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters, errorMessage) return false } - if (bot.AI_SESSION.parameters.timeFrame.config.label === undefined) { + if (bot.LEARNING_SESSION.parameters.timeFrame.config.label === undefined) { let errorMessage = "Session Parameters Node with no Time Frame Label configuration." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters.timeFrame, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters.timeFrame, errorMessage) return false } - bot.AI_SESSION.parameters.timeFrame.config.value = getTimeFrameFromLabel(bot.AI_SESSION.parameters.timeFrame.config.label) - if (bot.AI_SESSION.parameters.timeFrame.config.value === undefined) { + bot.LEARNING_SESSION.parameters.timeFrame.config.value = getTimeFrameFromLabel(bot.LEARNING_SESSION.parameters.timeFrame.config.label) + if (bot.LEARNING_SESSION.parameters.timeFrame.config.value === undefined) { let errorMessage = "Config error: label value not recognized. Try 01-min or 01-hs for example." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters.timeFrame, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters.timeFrame, errorMessage) return false } /* Session Base Asset */ - if (bot.AI_SESSION.parameters.sessionBaseAsset === undefined) { + if (bot.LEARNING_SESSION.parameters.sessionBaseAsset === undefined) { let errorMessage = "Session Parameters Node with no Session Base Asset." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters, errorMessage) return false } - if (bot.AI_SESSION.parameters.sessionBaseAsset.config.initialBalance === undefined) { + if (bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.initialBalance === undefined) { let errorMessage = "Session Parameters Session Base Asset with no initialBalance configuration." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters.sessionBaseAsset, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters.sessionBaseAsset, errorMessage) return false } /* Session Quoted Asset */ - if (bot.AI_SESSION.parameters.sessionQuotedAsset === undefined) { + if (bot.LEARNING_SESSION.parameters.sessionQuotedAsset === undefined) { let errorMessage = "Session Parameters Node with no Session Quoted Asset." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters, errorMessage) return false } - if (bot.AI_SESSION.parameters.sessionQuotedAsset.config.initialBalance === undefined) { + if (bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.initialBalance === undefined) { let errorMessage = "Session Parameters Session Quoted Asset with no initialBalance configuration." parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.AI_SESSION.parameters.sessionQuotedAsset, errorMessage) + bot.sessionError(bot.LEARNING_SESSION.parameters.sessionQuotedAsset, errorMessage) return false } /* Slippage */ - if (bot.AI_SESSION.parameters.slippage === undefined) { // if the Slippage is missing we create a default one. - bot.AI_SESSION.parameters.slippage = { + if (bot.LEARNING_SESSION.parameters.slippage === undefined) { // if the Slippage is missing we create a default one. + bot.LEARNING_SESSION.parameters.slippage = { name: 'Missing Slippage', type: 'Slippage', config: { @@ -332,19 +332,19 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { } } } - if (bot.AI_SESSION.parameters.slippage.config.marketOrderRate === undefined) { // if the marketOrderRate is missing we create a default one. - bot.AI_SESSION.parameters.slippage.config.marketOrderRate = 0 + if (bot.LEARNING_SESSION.parameters.slippage.config.marketOrderRate === undefined) { // if the marketOrderRate is missing we create a default one. + bot.LEARNING_SESSION.parameters.slippage.config.marketOrderRate = 0 } - if (bot.AI_SESSION.parameters.slippage.config.stopLoss === undefined) { // if the stopLoss is missing we create a default one. - bot.AI_SESSION.parameters.slippage.config.stopLoss = 0 + if (bot.LEARNING_SESSION.parameters.slippage.config.stopLoss === undefined) { // if the stopLoss is missing we create a default one. + bot.LEARNING_SESSION.parameters.slippage.config.stopLoss = 0 } - if (bot.AI_SESSION.parameters.slippage.config.takeProfit === undefined) { // if the takeProfit is missing we create a default one. - bot.AI_SESSION.parameters.slippage.config.takeProfit = 0 + if (bot.LEARNING_SESSION.parameters.slippage.config.takeProfit === undefined) { // if the takeProfit is missing we create a default one. + bot.LEARNING_SESSION.parameters.slippage.config.takeProfit = 0 } /* Fee Structure */ - if (bot.AI_SESSION.parameters.feeStructure === undefined) { // if the Fee Structure is missing we create a default one. - bot.AI_SESSION.parameters.feeStructure = { + if (bot.LEARNING_SESSION.parameters.feeStructure === undefined) { // if the Fee Structure is missing we create a default one. + bot.LEARNING_SESSION.parameters.feeStructure = { name: 'Missing Fee Structure', type: 'Fee Structure', config: { @@ -353,11 +353,11 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { } } } - if (bot.AI_SESSION.parameters.feeStructure.config.maker === undefined) { // if the maker is missing we create a default one. - bot.AI_SESSION.parameters.feeStructure.config.maker = 0 + if (bot.LEARNING_SESSION.parameters.feeStructure.config.maker === undefined) { // if the maker is missing we create a default one. + bot.LEARNING_SESSION.parameters.feeStructure.config.maker = 0 } - if (bot.AI_SESSION.parameters.feeStructure.config.taker === undefined) { // if the taker is missing we create a default one. - bot.AI_SESSION.parameters.feeStructure.config.taker = 0 + if (bot.LEARNING_SESSION.parameters.feeStructure.config.taker === undefined) { // if the taker is missing we create a default one. + bot.LEARNING_SESSION.parameters.feeStructure.config.taker = 0 } return true @@ -371,7 +371,7 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { if (bot.KEY === undefined || bot.SECRET === undefined) { let errorMessage = "Key 'codeName' or 'secret' not provided. Plese check that and try again." if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> startLiveTrading -> " + errorMessage); } - bot.sessionError(bot.AI_SESSION, errorMessage) + bot.sessionError(bot.LEARNING_SESSION, errorMessage) return false } return true @@ -387,20 +387,20 @@ exports.newTrainingSession = function newTrainingSession(bot, parentLogger) { /* Reduce the balance */ let balancePercentage = 1 // This is the default value - if (bot.AI_SESSION.config.balancePercentage !== undefined) { - balancePercentage = bot.AI_SESSION.config.balancePercentage + if (bot.LEARNING_SESSION.config.balancePercentage !== undefined) { + balancePercentage = bot.LEARNING_SESSION.config.balancePercentage } - bot.AI_SESSION.parameters.sessionBaseAsset.config.initialBalance = bot.AI_SESSION.parameters.sessionBaseAsset.config.initialBalance * balancePercentage / 100 - bot.AI_SESSION.parameters.sessionQuotedAsset.config.initialBalance = bot.AI_SESSION.parameters.sessionQuotedAsset.config.initialBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.initialBalance = bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.initialBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.initialBalance = bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.initialBalance * balancePercentage / 100 - bot.AI_SESSION.parameters.sessionBaseAsset.config.minimumBalance = bot.AI_SESSION.parameters.sessionBaseAsset.config.minimumBalance * balancePercentage / 100 - bot.AI_SESSION.parameters.sessionQuotedAsset.config.minimumBalance = bot.AI_SESSION.parameters.sessionQuotedAsset.config.minimumBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.minimumBalance = bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.minimumBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.minimumBalance = bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.minimumBalance * balancePercentage / 100 - bot.AI_SESSION.parameters.sessionBaseAsset.config.maximumBalance = bot.AI_SESSION.parameters.sessionBaseAsset.config.maximumBalance * balancePercentage / 100 - bot.AI_SESSION.parameters.sessionQuotedAsset.config.maximumBalance = bot.AI_SESSION.parameters.sessionQuotedAsset.config.maximumBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.maximumBalance = bot.LEARNING_SESSION.parameters.sessionBaseAsset.config.maximumBalance * balancePercentage / 100 + bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.maximumBalance = bot.LEARNING_SESSION.parameters.sessionQuotedAsset.config.maximumBalance * balancePercentage / 100 - pProcessConfig.normalWaitTime = bot.AI_SESSION.parameters.timeFrame.config.value + pProcessConfig.normalWaitTime = bot.LEARNING_SESSION.parameters.timeFrame.config.value return true } diff --git a/ProcessOutput.js b/ProcessOutput.js index 48d008c7d..c4751f557 100644 --- a/ProcessOutput.js +++ b/ProcessOutput.js @@ -33,7 +33,7 @@ botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Sensor Bot') } if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'AI Bot') + botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Learning Bot') } /* Some validations to verify that everything is in place. */ @@ -123,7 +123,7 @@ botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Sensor Bot') } if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'AI Bot') + botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Learning Bot') } /* Some validations to verify that everything is in place. */ @@ -148,7 +148,7 @@ throw (global.DEFAULT_FAIL_RESPONSE); } } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Bot not attached to a Data Mine | Trading Mine | Intel Mine. Bot = " + JSON.stringify(botNode)); + logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Bot not attached to a Data Mine | Trading Mine | Learning Mine. Bot = " + JSON.stringify(botNode)); throw (global.DEFAULT_FAIL_RESPONSE); } } else { diff --git a/ReinforcementLearning/AiBot.js b/ReinforcementLearning/LearningBot.js similarity index 98% rename from ReinforcementLearning/AiBot.js rename to ReinforcementLearning/LearningBot.js index 01e9c90aa..f12046828 100644 --- a/ReinforcementLearning/AiBot.js +++ b/ReinforcementLearning/LearningBot.js @@ -1,6 +1,6 @@ -exports.newAiBot = function newAiBot(bot, parentLogger) { +exports.newLearningBot = function newLearningBot(bot, parentLogger) { - const MODULE_NAME = "Ai Bot"; + const MODULE_NAME = "Learning Bot"; const FULL_LOG = true; const TRADING_PROCESS_MODULE = require(global.ROOT_DIR + '/LowFrequencyTrading/MachineLearningProcess.js'); @@ -8,7 +8,7 @@ exports.newAiBot = function newAiBot(bot, parentLogger) { const SESSION = require(global.ROOT_DIR + 'TradingSession'); let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - let session = SESSION.newTrainingSession(bot, parentLogger) + let session = SESSION.newLearningSession(bot, parentLogger) const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. @@ -560,17 +560,17 @@ exports.newAiBot = function newAiBot(bot, parentLogger) { if (processConfig.waitsForExecutionFinishedEvent === true) { waitTime = 0 } else { - switch (bot.AI_SESSION.type) { + switch (bot.LEARNING_SESSION.type) { case 'Live Trading Session': { - waitTime = bot.AI_SESSION.parameters.timeFrame.config.value + waitTime = bot.LEARNING_SESSION.parameters.timeFrame.config.value break } case 'Fordward Tessting Session': { - waitTime = bot.AI_SESSION.parameters.timeFrame.config.value + waitTime = bot.LEARNING_SESSION.parameters.timeFrame.config.value break } case 'Paper Trading Session': { - waitTime = bot.AI_SESSION.parameters.timeFrame.config.value + waitTime = bot.LEARNING_SESSION.parameters.timeFrame.config.value break } case 'Backtesting Session': { diff --git a/ReinforcementLearning/TrainingProcess.js b/ReinforcementLearning/LearningProcess.js similarity index 97% rename from ReinforcementLearning/TrainingProcess.js rename to ReinforcementLearning/LearningProcess.js index e7dc6c62e..0ebbd1bb3 100644 --- a/ReinforcementLearning/TrainingProcess.js +++ b/ReinforcementLearning/LearningProcess.js @@ -1,10 +1,10 @@ -exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) { +exports.newLearningProcess = function newLearningProcess(bot, logger, UTILITIES) { /* This Module will load all the process data dependencies from files and send them downstream. After execution, will save the time range and status report of the process. */ const FULL_LOG = true; - const MODULE_NAME = "Training Process"; + const MODULE_NAME = "Learning Process"; const GMT_SECONDS = ':00.000 GMT+0000'; thisObject = { @@ -115,7 +115,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) the simulation loop, once we discover that all candles from a certain date have benn processed. Here is the point where we sync one and the other. */ - let TrainingProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) + let LearningProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) await processSingleFiles() if (await processMarketFiles() === false) { @@ -166,7 +166,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) use it to save Output Files and later the Data Ranges. This is the point where the date calculated by the Simulation is applied at the Trading Process Level. */ - TrainingProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) + LearningProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) if (checkStopTaskGracefully() === false) { break } if (checkStopProcessing() === false) { break } @@ -447,7 +447,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) async function processDailyFiles() { /* Telling the world we are alive and doing well and which date we are processing right now. */ - let processingDateString = TrainingProcessDate.getUTCFullYear() + '-' + utilities.pad(TrainingProcessDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(TrainingProcessDate.getUTCDate(), 2); + let processingDateString = LearningProcessDate.getUTCFullYear() + '-' + utilities.pad(LearningProcessDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(LearningProcessDate.getUTCDate(), 2); bot.processHeartBeat(processingDateString, undefined, "Running...") /* @@ -493,7 +493,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) } } - let dateForPath = TrainingProcessDate.getUTCFullYear() + '/' + utilities.pad(TrainingProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(TrainingProcessDate.getUTCDate(), 2); + let dateForPath = LearningProcessDate.getUTCFullYear() + '/' + utilities.pad(LearningProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(LearningProcessDate.getUTCDate(), 2); let filePath if (dependency.referenceParent.config.codeName === "Multi-Period-Daily") { filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath; @@ -612,7 +612,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) chart, currentTimeFrame, currentTimeFrameLabel, - TrainingProcessDate + LearningProcessDate ) /* @@ -648,7 +648,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) async function writeDataRange(productCodeName) { let dataRange = { begin: contextVariables.dateBeginOfMarket.valueOf(), - end: TrainingProcessDate.valueOf() + global.ONE_DAY_IN_MILISECONDS + end: LearningProcessDate.valueOf() + global.ONE_DAY_IN_MILISECONDS } let fileContent = JSON.stringify(dataRange); @@ -707,7 +707,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) let thisReport = statusDependencies.statusReports.get(reportKey) thisReport.file.lastExecution = bot.currentDaytime - thisReport.file.lastFile = TrainingProcessDate + thisReport.file.lastFile = LearningProcessDate thisReport.file.simulationState = bot.simulationState thisReport.file.timeFrames = currentTimeFrameLabel await thisReport.asyncSave() @@ -721,7 +721,7 @@ exports.newTrainingProcess = function newTrainingProcess(bot, logger, UTILITIES) thisReport.file.simulationState = bot.simulationState thisReport.file.timeFrames = currentTimeFrameLabel - logger.newInternalLoop(bot.codeName, bot.process, TrainingProcessDate) + logger.newInternalLoop(bot.codeName, bot.process, LearningProcessDate) await thisReport.asyncSave() } } diff --git a/ReinforcementLearning/MarkovDecisionProcess.js b/ReinforcementLearning/MarkovDecisionProcess.js index 6b4e1cd1f..072611a7b 100644 --- a/ReinforcementLearning/MarkovDecisionProcess.js +++ b/ReinforcementLearning/MarkovDecisionProcess.js @@ -25,7 +25,7 @@ exports.newMarkovDecisionProcess = function newMarkovDecisionProcess(bot, logger function initialize() { tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.AI_SESSION.parameters + sessionParameters = bot.LEARNING_SESSION.parameters initializeNodeMap(tradingEngine) diff --git a/Root.js b/Root.js index 0511dccad..198f15944 100644 --- a/Root.js +++ b/Root.js @@ -266,8 +266,8 @@ runTradingBot(botConfig, processConfig); break; } - case 'AI Bot': { - runAIBot(botConfig, processConfig); + case 'Learning Bot': { + runLearningBot(botConfig, processConfig); break; } default: { @@ -300,8 +300,8 @@ runTradingBot(botConfig, processConfig); break; } - case 'AI Bot': { - runAIBot(botConfig, processConfig); + case 'Learning Bot': { + runLearningBot(botConfig, processConfig); break; } default: { @@ -347,8 +347,8 @@ runTradingBot(botConfig, processConfig); break; } - case 'AI Bot': { - runAIBot(botConfig, processConfig); + case 'Learning Bot': { + runLearningBot(botConfig, processConfig); break; } default: { @@ -553,7 +553,7 @@ } } - function runAIBot(pBotConfig, pProcessConfig) { + function runLearningBot(pBotConfig, pProcessConfig) { global.TOTAL_PROCESS_INSTANCES_CREATED++ @@ -562,19 +562,19 @@ let logger; logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set('runAIBot', logger) + global.LOGGER_MAP.set('runLearningBot', logger) logger.bot = pBotConfig; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runAIBot -> Entering function."); } + if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> Entering function."); } - let aiBot = TRADING_BOT_MODULE.newAIBot(pBotConfig, logger); - aiBot.initialize(pProcessConfig, onInitializeReady); + let learningBot = TRADING_BOT_MODULE.newLearningBot(pBotConfig, logger); + learningBot.initialize(pProcessConfig, onInitializeReady); function onInitializeReady(err) { if (err.result === global.DEFAULT_OK_RESPONSE.result) { - aiBot.run(whenRunFinishes); + learningBot.run(whenRunFinishes); function whenRunFinishes(err) { @@ -586,34 +586,34 @@ if (err.result === global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); + logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); + logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); logger.persist(); } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Bye."); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished with errors. Please check the logs."); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bye."); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); + console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished with errors. Please check the logs."); logger.persist(); } setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) } } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> Failed to initialize the bot. "); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runAIBot -> onInitializeReady -> err = " + err.message); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> err = " + err.message); + logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> Failed to initialize the bot. "); + console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> err = " + err.message); logger.persist(); setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) } } } catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runAIBot -> err = " + err.stack); + console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> err = " + err.stack); setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) } } diff --git a/StatusReport.js b/StatusReport.js index db34accaa..2a7699e55 100644 --- a/StatusReport.js +++ b/StatusReport.js @@ -104,8 +104,8 @@ sessionPath = bot.TRADING_SESSION.folderName + "/" } - if (bot.AI_SESSION !== undefined && statusDependencyNode.bottype === "AI Bot") { - sessionPath = bot.AI_SESSION.folderName + "/" + if (bot.LEARNING_SESSION !== undefined && statusDependencyNode.bottype === "Learning Bot") { + sessionPath = bot.LEARNING_SESSION.folderName + "/" } /* Now we will see where do we need to fetch this status report from. */ @@ -268,7 +268,7 @@ On the contraty, if we are running a Sensor bot or an Indicator bot, we might, if necesary, use a previous version of a Status Report since there will be no big impact, just some reprocessing. */ - if (bot.TRADING_SESSION !== undefined || bot.AI_SESSION !== undefined) { + if (bot.TRADING_SESSION !== undefined || bot.LEARNING_SESSION !== undefined) { canUserPrevious = false } else { canUserPrevious = true