From ec299db1594ad093ec5e5d12db5d928b25fc0110 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 4 Nov 2020 09:39:21 +0100 Subject: [PATCH] Learning Sessions Implemented --- .../Function-Libraries/ActionSwitch.js | 9 +- .../ChartingSpaceFunctions.js | 2 + .../CryptoEcosystemFunctions.js | 269 +++++++++++------- .../DataStorageFunctions.js | 32 ++- .../Function-Libraries/SessionFunctions.js | 2 +- .../Function-Libraries/UiObjectsFromNodes.js | 2 +- Projects/Superalgos/Schemas/AppSchema.json | 4 +- .../Spaces/Charting-Space/PlottersManager.js | 9 +- .../Superalgos/Spaces/Panel-Space/Layer.js | 2 +- 9 files changed, 207 insertions(+), 124 deletions(-) diff --git a/Projects/Superalgos/Function-Libraries/ActionSwitch.js b/Projects/Superalgos/Function-Libraries/ActionSwitch.js index 7450a2e11..5395d3242 100644 --- a/Projects/Superalgos/Function-Libraries/ActionSwitch.js +++ b/Projects/Superalgos/Function-Libraries/ActionSwitch.js @@ -426,9 +426,14 @@ function newSuperalgosActionSwitch() { functionLibraryDataStorageFunctions.addAllTradingMineProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) } break - case 'Add Missing Session References': + case 'Add Missing Trading Session References': { - functionLibraryDataStorageFunctions.addMissingSessionReferences(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) + functionLibraryDataStorageFunctions.addMissingTradingSessionReferences(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) + } + break + case 'Add Missing Learning Session References': + { + functionLibraryDataStorageFunctions.addMissingLearningSessionReferences(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) } break case 'Add Missing Market Data Products': diff --git a/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js b/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js index f323cc2b5..0aa7c4a7f 100644 --- a/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js +++ b/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js @@ -87,11 +87,13 @@ function newChartingSpaceFunctions() { let fordwardTestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Forward Testing Session') let paperTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Paper Trading Session') let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Live Trading Session') + let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Learning Session') scanSessionArray(backtestingSessionsArray) scanSessionArray(fordwardTestingSessionsArray) scanSessionArray(paperTradingSessionsArray) scanSessionArray(liveTradingSessionsArray) + scanSessionArray(learningSessionsArray) function scanSessionArray(sessionsArray) { for (let i = 0; i < sessionsArray.length; i++) { diff --git a/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js b/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js index ce6d82dac..7a1ed6a61 100644 --- a/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js +++ b/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js @@ -251,134 +251,185 @@ function newCryptoEcosystemFunctions() { } function installInNetworkNode(networkNode) { - /* - Here we complete the missing stuff at Data Mining - */ - let dataMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mining', node, true) - if (dataMining === undefined) { - node.payload.uiObject.setErrorMessage('Data Mining node not found at Network Node ' + networkNode.name) - return - } - let exchangeDataTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMining, 'Exchange Data Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeDataTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketDataTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataTasks, 'Market Data Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + let tradingSessionsCreatedArray = [] + let learningSessionsCreatedArray = [] - UI.projects.superalgos.utilities.menu.menuClick(marketDataTask, 'Add Missing Data Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataTask.dataMineTasks, 'Add All Tasks', true) - /* - Here we complete the missing stuff at Learning Mining - */ - let learningMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mining', node, true) - if (learningMining === undefined) { - node.payload.uiObject.setErrorMessage('Learning Mining node not found at Network Node ' + networkNode.name) - return - } + installDataMiningTasks() + installLearningMiningTasks() + isntallTradingMiningTasks() - let exchangeLearningTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMining, 'Exchange Learning Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeLearningTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketLearningTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningTasks, 'Market Learning Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + installDataMinesData() + installLearningMinesData() + installTradingMineData() - UI.projects.superalgos.utilities.menu.menuClick(marketLearningTask, 'Add Missing Learning Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketLearningTask.learningMineTasks, 'Add All Tasks', true) - - let sessionsCreatedArray = [] - /* - Next we complete the missing stuff at Testing Environment - */ - installEnvironment('Testing Environment') - /* - Next we complete the missing stuff at Production Environment - */ - installEnvironment('Production Environment') - - function installEnvironment(environment) { + function installDataMiningTasks() { /* - Now we install the environmnet at the current Network Node + Here we complete the missing stuff at Data Mining */ - let environmentFound = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, environment, node, true) - if (environmentFound === undefined) { - node.payload.uiObject.setErrorMessage(environment + ' node not found at Network Node ' + networkNode.name) + let dataMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mining', node, true) + if (dataMining === undefined) { + node.payload.uiObject.setErrorMessage('Data Mining node not found at Network Node ' + networkNode.name) return } - let exchangeTradingTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(environmentFound, 'Exchange Trading Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeTradingTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketTradingTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + let exchangeDataTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMining, 'Exchange Data Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeDataTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketDataTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataTasks, 'Market Data Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - UI.projects.superalgos.utilities.menu.menuClick(marketTradingTask, 'Add Missing Trading Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketTradingTask.tradingMineTasks, 'Add All Tasks', true) - - /* This will be needed at the charging space, for creating Dashboards */ - let backtestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Backtesting Session') - let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Live Trading Session') - let allSessionsArray = backtestingSessionsArray.concat(liveTradingSessionsArray) - sessionsCreatedArray = sessionsCreatedArray.concat(allSessionsArray) - - dashboardsArray.push({ environmentNode: environmentFound, networkNode: networkNode, sessionsArray: allSessionsArray }) - } - /* - Here we complete the missing stuff at Data Mines Data - */ - let dataMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mines Data', node, true) - if (dataMinesData === undefined) { - node.payload.uiObject.setErrorMessage('Data Mines Data node not found at Network Node ' + networkNode.name) - return + UI.projects.superalgos.utilities.menu.menuClick(marketDataTask, 'Add Missing Data Mine Tasks', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataTask.dataMineTasks, 'Add All Tasks', true) } - let exchangeDataProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMinesData, 'Exchange Data Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeDataProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketDataProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketDataProducts.payload.floatingObject.collapseToggle() + function installLearningMiningTasks() { + /* + Here we complete the missing stuff at Learning Mining + */ + let learningMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mining', node, true) + if (learningMining === undefined) { + node.payload.uiObject.setErrorMessage('Learning Mining node not found at Network Node ' + networkNode.name) + return + } - UI.projects.superalgos.utilities.menu.menuClick(marketDataProducts, 'Add All Data Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataProducts.dataMineProducts, 'Add All Data Products', true) - /* - Here we complete the missing stuff at Learning Mines Data - */ - let learningMineData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mines Data', node, true) - if (learningMineData === undefined) { - node.payload.uiObject.setErrorMessage('Learning Mines Data node not found at Network Node ' + networkNode.name) - return + let exchangeLearningTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMining, 'Exchange Learning Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeLearningTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketLearningTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningTasks, 'Market Learning Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + + UI.projects.superalgos.utilities.menu.menuClick(marketLearningTask, 'Add Missing Learning Mine Tasks', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketLearningTask.learningMineTasks, 'Add All Tasks', true) + + /* This will be needed at the charting space, for creating Dashboards */ + let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Learning Session') + learningSessionsCreatedArray = learningSessionsCreatedArray.concat(learningSessionsArray) } - let exchangeLearningProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMineData, 'Exchange Learning Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeLearningProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketLearningProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningProducts, 'Market Learning Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketLearningProducts.payload.floatingObject.collapseToggle() + function isntallTradingMiningTasks() { + /* + Next we complete the missing stuff at Testing Environment + */ + installEnvironment('Testing Environment') + /* + Next we complete the missing stuff at Production Environment + */ + installEnvironment('Production Environment') - UI.projects.superalgos.utilities.menu.menuClick(marketLearningProducts, 'Add All Learning Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketLearningProducts.learningMineProducts, 'Add All Learning Products', true) - /* - Finally we complete the missing stuff at Trading Mines Data - */ - let tradingMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Trading Mines Data', node, true) - if (tradingMinesData === undefined) { - node.payload.uiObject.setErrorMessage('Trading Mines Data node not found at Network Node ' + networkNode.name) - return - } + function installEnvironment(environment) { + /* + Now we install the environmnet at the current Network Node + */ + let environmentFound = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, environment, node, true) + if (environmentFound === undefined) { + node.payload.uiObject.setErrorMessage(environment + ' node not found at Network Node ' + networkNode.name) + return + } - let exchangeTradingProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(tradingMinesData, 'Exchange Trading Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeTradingProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketTradingProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingProducts, 'Market Trading Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketTradingProducts.payload.floatingObject.collapseToggle() - /* - Create the new session references. - */ - for (let i = 0; i < sessionsCreatedArray.length; i++) { - let session = sessionsCreatedArray[i] - if (UI.projects.superalgos.utilities.children.isMissingChildren(marketTradingProducts, session, true) === true) { - functionLibraryDataStorageFunctions.createSessionReference(marketTradingProducts, session, functionLibraryUiObjectsFromNodes) + let exchangeTradingTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(environmentFound, 'Exchange Trading Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeTradingTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketTradingTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + + UI.projects.superalgos.utilities.menu.menuClick(marketTradingTask, 'Add Missing Trading Mine Tasks', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketTradingTask.tradingMineTasks, 'Add All Tasks', true) + + /* This will be needed at the charting space, for creating Dashboards */ + let backtestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Backtesting Session') + let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Live Trading Session') + let paperTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Paper Trading Session') + let forwardSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Forward Testing Session') + let allSessionsArray = backtestingSessionsArray + .concat(liveTradingSessionsArray) + .concat(paperTradingSessionsArray) + .concat(forwardSessionsArray) + tradingSessionsCreatedArray = tradingSessionsCreatedArray.concat(allSessionsArray) + + dashboardsArray.push({ environmentNode: environmentFound, networkNode: networkNode, sessionsArray: allSessionsArray }) } } - /* - Create everything inside the session references. - */ - for (let j = 0; j < marketTradingProducts.tradingSessionReferences.length; j++) { - let sessionReference = marketTradingProducts.tradingSessionReferences[j] - UI.projects.superalgos.utilities.menu.menuClick(sessionReference, 'Add All Trading Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(sessionReference.tradingMineProducts, 'Add All Data Products', true) - sessionReference.payload.floatingObject.collapseToggle() + + function installDataMinesData() { + /* + Here we complete the missing stuff at Data Mines Data + */ + let dataMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mines Data', node, true) + if (dataMinesData === undefined) { + node.payload.uiObject.setErrorMessage('Data Mines Data node not found at Network Node ' + networkNode.name) + return + } + + let exchangeDataProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMinesData, 'Exchange Data Products', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeDataProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketDataProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + marketDataProducts.payload.floatingObject.collapseToggle() + + UI.projects.superalgos.utilities.menu.menuClick(marketDataProducts, 'Add All Data Mine Products', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataProducts.dataMineProducts, 'Add All Data Products', true) + } + + function installLearningMinesData() { + /* + Here we complete the missing stuff at Learning Mines Data + */ + let learningMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mines Data', node, true) + if (learningMinesData === undefined) { + node.payload.uiObject.setErrorMessage('Learning Mines Data node not found at Network Node ' + networkNode.name) + return + } + + let exchangeLearningProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMinesData, 'Exchange Learning Products', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeLearningProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketLearningProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningProducts, 'Market Learning Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + marketLearningProducts.payload.floatingObject.collapseToggle() + /* + Create the new session references. + */ + for (let i = 0; i < learningSessionsCreatedArray.length; i++) { + let session = learningSessionsCreatedArray[i] + if (UI.projects.superalgos.utilities.children.isMissingChildren(marketLearningProducts, session, true) === true) { + functionLibraryDataStorageFunctions.createSessionReference(marketLearningProducts, session, functionLibraryUiObjectsFromNodes) + } + } + /* + Create everything inside the session references. + */ + for (let j = 0; j < marketLearningProducts.learningSessionReferences.length; j++) { + let sessionReference = marketLearningProducts.learningSessionReferences[j] + UI.projects.superalgos.utilities.menu.menuClick(sessionReference, 'Add All Learning Mine Products', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(sessionReference.learningMineProducts, 'Add All Data Products', true) + sessionReference.payload.floatingObject.collapseToggle() + } + } + + function installTradingMineData() { + /* + Finally we complete the missing stuff at Trading Mines Data + */ + let tradingMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Trading Mines Data', node, true) + if (tradingMinesData === undefined) { + node.payload.uiObject.setErrorMessage('Trading Mines Data node not found at Network Node ' + networkNode.name) + return + } + + let exchangeTradingProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(tradingMinesData, 'Exchange Trading Products', cryptoExchange, functionLibraryUiObjectsFromNodes) + exchangeTradingProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let marketTradingProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingProducts, 'Market Trading Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) + marketTradingProducts.payload.floatingObject.collapseToggle() + /* + Create the new session references. + */ + for (let i = 0; i < tradingSessionsCreatedArray.length; i++) { + let session = tradingSessionsCreatedArray[i] + if (UI.projects.superalgos.utilities.children.isMissingChildren(marketTradingProducts, session, true) === true) { + functionLibraryDataStorageFunctions.createSessionReference(marketTradingProducts, session, functionLibraryUiObjectsFromNodes) + } + } + /* + Create everything inside the session references. + */ + for (let j = 0; j < marketTradingProducts.tradingSessionReferences.length; j++) { + let sessionReference = marketTradingProducts.tradingSessionReferences[j] + UI.projects.superalgos.utilities.menu.menuClick(sessionReference, 'Add All Trading Mine Products', true) + UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(sessionReference.tradingMineProducts, 'Add All Data Products', true) + sessionReference.payload.floatingObject.collapseToggle() + } } } } diff --git a/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js b/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js index 6aa9bb3a8..38ce00644 100644 --- a/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js +++ b/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js @@ -4,7 +4,8 @@ function newDataStorageFunctions() { addAllDataMineProducts: addAllDataMineProducts, addAllTradingMineProducts: addAllTradingMineProducts, addAllLearningMineProducts: addAllLearningMineProducts, - addMissingSessionReferences: addMissingSessionReferences, + addMissingTradingSessionReferences: addMissingTradingSessionReferences, + addMissingLearningSessionReferences: addMissingLearningSessionReferences, addMissingMarketDataProducts: addMissingMarketDataProducts, addMissingMarketTradingProducts: addMissingMarketTradingProducts, addMissingExchangeTradingProducts: addMissingExchangeTradingProducts, @@ -96,7 +97,7 @@ function newDataStorageFunctions() { } } - function addMissingSessionReferences(node, rootNodes, functionLibraryUiObjectsFromNodes) { + function addMissingTradingSessionReferences(node, rootNodes, functionLibraryUiObjectsFromNodes) { let networkNode = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false) if (networkNode === undefined) { return } @@ -117,14 +118,35 @@ function newDataStorageFunctions() { let marketTradingTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false) if (node.payload.referenceParent.id !== marketTradingTasks.payload.referenceParent.id) { continue } if (UI.projects.superalgos.utilities.children.isMissingChildren(node, session, true) === true) { - createSessionReference(node, session, functionLibraryUiObjectsFromNodes) + createSessionReference(node, session, 'Trading Session Reference', functionLibraryUiObjectsFromNodes) } } } } - function createSessionReference(node, session, functionLibraryUiObjectsFromNodes) { - let sessionReference = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Trading Session Reference') + function addMissingLearningSessionReferences(node, rootNodes, functionLibraryUiObjectsFromNodes) { + let networkNode = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false) + if (networkNode === undefined) { return } + + let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Learning Session') + + addMissingSession(learningSessionsArray) + + function addMissingSession(sessionsArray) { + for (let i = 0; i < sessionsArray.length; i++) { + let session = sessionsArray[i] + /* We will filter out all the sessions that does not belong to the market we are in */ + let marketLearningTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Learning Tasks', undefined, true, false, true, false) + if (node.payload.referenceParent.id !== marketLearningTasks.payload.referenceParent.id) { continue } + if (UI.projects.superalgos.utilities.children.isMissingChildren(node, session, true) === true) { + createSessionReference(node, session, 'Learning Session Reference', functionLibraryUiObjectsFromNodes) + } + } + } + } + + function createSessionReference(node, session, nodeType, functionLibraryUiObjectsFromNodes) { + let sessionReference = functionLibraryUiObjectsFromNodes.addUIObject(node, nodeType) sessionReference.payload.referenceParent = session } diff --git a/Projects/Superalgos/Function-Libraries/SessionFunctions.js b/Projects/Superalgos/Function-Libraries/SessionFunctions.js index c6ee0b50a..41210ca41 100644 --- a/Projects/Superalgos/Function-Libraries/SessionFunctions.js +++ b/Projects/Superalgos/Function-Libraries/SessionFunctions.js @@ -114,7 +114,7 @@ function newSessionFunctions() { let tradingEngine = functionLibraryProtocolNode.getProtocolNode(node.tradingEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath) lightingPath = '' + - 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + + 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->Learning Session->' + 'Parameters->' + 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + 'Exchange Account Asset->Asset->' + diff --git a/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js b/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js index 71fd4bf0c..b2ec8564d 100644 --- a/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js @@ -642,7 +642,7 @@ function newUiObjectsFromNodes() { /* Check if there are sessions to run */ if (userAddingNew === false && node.savedPayload !== undefined) { - if (uiObjectType === 'Live Trading Session' || uiObjectType === 'Forward Testing Session' || uiObjectType === 'Backtesting Session' || uiObjectType === 'Paper Trading Session') { + if (uiObjectType === 'Live Trading Session' || uiObjectType === 'Forward Testing Session' || uiObjectType === 'Backtesting Session' || uiObjectType === 'Paper Trading Session' || uiObjectType === 'Learning Session') { if (sessionsFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a session that was running while backed up sessionsFoundAtWorkspace.push(node) } diff --git a/Projects/Superalgos/Schemas/AppSchema.json b/Projects/Superalgos/Schemas/AppSchema.json index b3d22f69a..a33ad6633 100644 --- a/Projects/Superalgos/Schemas/AppSchema.json +++ b/Projects/Superalgos/Schemas/AppSchema.json @@ -16399,7 +16399,7 @@ "actionFunction": "payload.executeAction" }, { - "action": "Add Missing Session References", + "action": "Add Missing Trading Session References", "label": "Add Missing Sessions", "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", @@ -16449,7 +16449,7 @@ "actionFunction": "payload.executeAction" }, { - "action": "Add Missing Session References", + "action": "Add Missing Learning Session References", "label": "Add Missing Sessions", "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", diff --git a/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js b/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js index b76246b79..6f86fe4e1 100644 --- a/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js +++ b/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js @@ -142,15 +142,18 @@ function newPlottersManager() { let tradingEngine /* - A layer can be referencing a Data Product in two different branches of the Network hiriatchy. - In one of those braches we can get the Session node, at the other we Cannot. + A layer can be referencing a Data Product in 3 different branches of the Network hiriatchy. + Two of those branches have sessions. */ let sessionReference = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Trading Session Reference', undefined, false, true, true, true) + if (sessionReference === undefined) { + sessionReference = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Learning Session Reference', undefined, false, true, true, true) + } if (sessionReference !== undefined) { session = sessionReference.referenceParent if (session === undefined) { - logger.write('[ERROR] initializePlotter -> Sessioin is Undefined at Trading Session Reference -> Plotter will not be loaded. ') + logger.write('[ERROR] initializePlotter -> Session Reference without a Reference Parent -> Plotter will not be loaded. ') return } /* From the session we might be able to reach the Trading System or the Trading Engine */ diff --git a/Projects/Superalgos/Spaces/Panel-Space/Layer.js b/Projects/Superalgos/Spaces/Panel-Space/Layer.js index 7c965298e..594a5f6a9 100644 --- a/Projects/Superalgos/Spaces/Panel-Space/Layer.js +++ b/Projects/Superalgos/Spaces/Panel-Space/Layer.js @@ -163,7 +163,7 @@ function newLayer() { 'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' + 'Bot Products->Data Mine Products->Trading Mine Products->Learning Mine Products->' + 'Market Data Products->Exchange Data Products->' + - 'Trading Session Reference->' + + 'Trading Session Reference->Learning Session Reference->' + 'Market Trading Products->Exchange Trading Products->' + 'Market Learning Products->Exchange Learning Products->' + 'Data Mines Data->Trading Mines Data->Learning Mines Data->Data Storage->Network Node->' +