From a9adf7bf7a20f4338c4487707b18c22c50df8004 Mon Sep 17 00:00:00 2001 From: Philip Love Date: Sat, 30 Oct 2021 03:21:20 -0400 Subject: [PATCH] More refactoring - Portfolio-Management --- PM_changes | 40 +++- .../UI/Function-Libraries/TaskFunctions.js | 219 ++++++++++++++++-- .../Spaces/Charting-Space/PlottersManager.js | 151 ++++++++---- .../Charting-Space/Plotting/RecordValues.js | 28 ++- .../UI/Spaces/Design-Space/Workspace.js | 9 + .../UI/Spaces/Floating-Space/FloatingSpace.js | 21 +- .../UI/Spaces/Panel-Space/Layer.js | 26 ++- .../PortfolioEpisode.js | 2 +- .../PortfolioOrders.js | 10 +- .../PortfolioOutput.js | 4 +- .../PortfolioPosition.js | 4 +- .../PortfolioProcess.js | 8 +- .../PortfolioRecords.js | 6 +- .../PortfolioSimulation.js | 16 +- .../PortfolioStages.js | 4 +- .../PortfolioStrategy.js | 4 +- .../Portfolio-Bot/PortfolioSession.js | 4 +- .../UI/Function-Libraries/ActionSwitch.js | 4 + 18 files changed, 435 insertions(+), 125 deletions(-) diff --git a/PM_changes b/PM_changes index e90c46acd..c676c675b 100644 --- a/PM_changes +++ b/PM_changes @@ -46,15 +46,51 @@ Projects/Foundations/UI/Function-Libraries/ ActionSwitch.js: cp case statements run-all, stop-all, add-missing, references, products, etc. Line 506 && 512 may not need to have been cloned but I did for now - regarding live and paper trading. + Skipping: - Projects/Foundations/UI/Function-Libraries/ChartingSpaceFunctions.js + Projects/Foundatoins/UI/Function-Libraries/ChartingSpaceFunctions.js Projects/Foundations/UI/Function-Libraries/CryptoEcosystemFunctions.js Projects/Foundations/UI/Function-Libraries/ DataStorageFunctions.js: Many things cloned. But on line 156 only did 'addMissingSession(livePortfolioSessionArray) not back|forward|paper + TaskFunctions.js: + run/stop | addMissing - Portfolio Tasks. Project|Exchange|Market|Mine + Line 148 - Only cloned 'Live Portfolio Session->' + Line 198 - Only cloned 'Production Portfolio Tasks->' Skipping: - Projects/Foundations/UI/Function-Libraries - Appears 'tradingSystem' var here is just a parameter so no need change. + Projects/Foundations/UI/Function-Libraries/DependenciesFilter.js: + Appears 'tradingSystem' var here is just a parameter so no need change. + +Projects/Foundations/UI/Spaces/ + /Charting-Space/PlottersManager.js: + /Plotting/RecordValues.js: + /Design-Space/Workspace.js: + /Floating-Space/FloatingSpace.js: + /Panel-Space/Layer.js: Line 173 Only 'Live Portfolio Session' + +Projects/Visual-Scripting/UI/Function-Libraries/ + ActionsSwitch.js: *** NOTE: Not sure how to handle line 14 at the current moment. *** + +Skipping: + Projects/Foundations/UI/Spaces/Floating-Space/ConditionEditor.js + +Skipping: + Projects/Governance/UI/Function-Libraries/ActionSwitch.js: + Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js: + Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js: + Projects/Machine-Learning/* + Projects/Network/* + node_modules, */My-Workspaces, */My-Log-Files, *.json, .gitignore, desktop.js, Environment.js, README.md, run.js, setup.js, Tested-Exchanges, CODEOWNERS, DesktopApp.js, WebApp.js, Projects/Social-Bots/*, Projects/Social-Trading/*, Projects/Governance/* + + + +----- Changes made inside Portfolio-Management (Clone of Algorithmic-Trading) ----- +References to trading changed to portfolio regardless of capitalization: + Examples: + find ./ -type f -exec sed -i 's/trading/portfolio/g' {} \; + find ./ -type f -exec sed -i 's/Trading/Portfolio/g' {} \; + find ./ -type f -exec sed -i 's/TRADING/PORTFOLIO/g' {} \; diff --git a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js index 4e1884a41..6b1f764a6 100644 --- a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js +++ b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js @@ -50,6 +50,19 @@ function newFoundationsFunctionLibraryTaskFunctions() { addMissingMarketLearningTasks: addMissingMarketLearningTasks, addMissingLearningMineTasks: addMissingLearningMineTasks, + runAllProjectPortfolioTasks: runAllProjectPortfolioTasks, + stopAllProjectPortfolioTasks: stopAllProjectPortfolioTasks, + runAllExchangePortfolioTasks: runAllExchangePortfolioTasks, + stopAllExchangePortfolioTasks: stopAllExchangePortfolioTasks, + runAllMarketPortfolioTasks: runAllMarketPortfolioTasks, + stopAllMarketPortfolioTasks: stopAllMarketPortfolioTasks, + runAllPortfolioMineTasks: runAllPortfolioMineTasks, + stopAllPortfolioMineTasks: stopAllPortfolioMineTasks, + addMissingProjectPortfolioTasks: addMissingProjectPortfolioTasks, + addMissingExchangePortfolioTasks: addMissingExchangePortfolioTasks, + addMissingMarketPortfolioTasks: addMissingMarketPortfolioTasks, + addMissingPortfolioMineTasks: addMissingPortfolioMineTasks, + addAllTasks: addAllTasks } @@ -64,7 +77,7 @@ function newFoundationsFunctionLibraryTaskFunctions() { let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id) - /* First we setup everything so as to listen to the response from the Task Manger */ + /* First we setup everything so as to listen to the response from the Task Manager */ let eventSubscriptionIdOnStatus let key = 'Task Client - ' + node.id eventsServerClient.listenToEvent(key, 'Task Status', undefined, node.id, onResponse, onStatus) @@ -120,18 +133,19 @@ function newFoundationsFunctionLibraryTaskFunctions() { 'API Data Fetcher Bot Instance->' + 'Indicator Bot Instance->' + 'Trading Bot Instance->' + + 'Portfolio Bot Instance->' + 'Learning Bot Instance->' + - 'Sensor Process Instance->Time Frames Filter->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' + + 'Sensor Process Instance->Time Frames Filter->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Portfolio Process Instance->Learning Process Instance->' + 'Execution Started Event->' + 'Key Reference->Exchange Account Key->' + 'Task Manager->' + - 'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' + - 'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->' + - 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->' + + 'Data Mine Tasks->Trading Mine Tasks->Portfolio Mine Tasks->Learning Mine Tasks->' + + 'Market Data Tasks->Market Trading Tasks->Market Portfolio Tasks->Market Learning Tasks->' + + 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Portfolio Tasks->Exchange Learning Tasks->' + 'Market->Exchange Markets->Crypto Exchange->' + 'Market Base Asset->Market Quoted Asset->Asset->' + - 'Project Data Tasks->Project Trading Tasks->Project Learning Tasks->Project Definition->' + - 'Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->' + + 'Project Data Tasks->Project Trading Tasks->Project Portfolio Tasks->Project Learning Tasks->Project Definition->' + + 'Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->Live Portfolio Session->' + 'Back Learning Session->Live Learning Session->' + 'Process Definition->' + 'Process Output->' + @@ -160,9 +174,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { 'API Data Fetcher Bot->' + 'Indicator Bot->' + 'Trading Bot->' + + 'Portfolio Bot->' + 'Learning Bot->' + 'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' + - 'Data Mine->Trading Mine->Learning Mine->' + + 'Data Mine->Trading Mine->Portfolio Mine->Learning Mine->' + 'API Map Reference->' + 'API Map->API Version->API Endpoint->API Query Parameters->API Query Parameter->API Path Parameters->API Path Parameter->API Query Responses->API Query Response->API Response Schema->' + 'API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->' @@ -171,24 +186,24 @@ function newFoundationsFunctionLibraryTaskFunctions() { let networkLightingPath = '->LAN Network->LAN Network Node->' + 'Data Storage->' + - 'Data Mines Data->Trading Mines Data->Learning Mines Data->' + - 'Project Data Products->Project Trading Products->Project Learning Products->' + - 'Exchange Data Products->Exchange Trading Products->Exchange Learning Products->' + - 'Market Data Products->Market Trading Products->Market Learning Products->' + + 'Data Mines Data->Trading Mines Data->Portfolio Mines Data->Learning Mines Data->' + + 'Project Data Products->Project Trading Products->Project Portfolio Products->Project Learning Products->' + + 'Exchange Data Products->Exchange Trading Products->Exchange Portfolio Products->Exchange Learning Products->' + + 'Market Data Products->Market Trading Products->Market Portfolio Products->Market Learning Products->' + 'Market->Market Base Asset->Market Quoted Asset->Asset->' + 'Exchange Markets->Crypto Exchange->' + 'Data Mine Products->Bot Products->' + 'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' + 'Data Product->Product Definition->' + - 'Data Tasks->Learning Tasks->Testing Trading Tasks->Production Trading Tasks->' + - 'Project Data Tasks->Project Trading Tasks->Project Learning Tasks->' + - 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->Crypto Exchange->' + - 'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->Market->' + - 'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' + + 'Data Tasks->Learning Tasks->Testing Trading Tasks->Production Trading Tasks->Production Portfolio Tasks->' + + 'Project Data Tasks->Project Trading Tasks->Project Portfolio Tasks->Project Learning Tasks->' + + 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Portfolio Tasks->Exchange Learning Tasks->Crypto Exchange->' + + 'Market Data Tasks->Market Trading Tasks->Market Portfolio Tasks->Market Learning Tasks->Market->' + + 'Data Mine Tasks->Trading Mine Tasks->Portfolio Mine Tasks->Learning Mine Tasks->' + 'Task Manager->Task->' + - 'Indicator Bot Instance->Sensor Bot Instance->API Data Fetcher Bot Instance->Trading Bot Instance->Learning Bot Instance->' + - 'Indicator Process Instance->Sensor Process Instance->API Data Fetcher Process Instance->Trading Process Instance->Learning Process Instance->' + - 'Paper Trading Session->Forward Testing Session->Backtesting Session->Live Trading Session->Back Learning Session->Live Learning Session->' + + 'Indicator Bot Instance->Sensor Bot Instance->API Data Fetcher Bot Instance->Trading Bot Instance->Portfolio Bot Instance->Learning Bot Instance->' + + 'Indicator Process Instance->Sensor Process Instance->API Data Fetcher Process Instance->Trading Process Instance->Portfolio Process Instance->Learning Process Instance->' + + 'Paper Trading Session->Forward Testing Session->Backtesting Session->Live Trading Session->Live Portfolio Session->Back Learning Session->Live Learning Session->' + 'API Map Reference->' + 'Market->' + 'Process Definition->' @@ -296,7 +311,7 @@ function newFoundationsFunctionLibraryTaskFunctions() { } if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside a Data Tasks, Learning Tasks, Testing or Production Trading Tasks node.') + node.payload.uiObject.setErrorMessage('Task needs to be inside a Data Tasks, Learning Tasks, Portfolio Tasks, Testing or Production Trading Tasks node.') return } @@ -403,6 +418,26 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function runAllProjectPortfolioTasks(parent) { + for (let i = 0; i < parent.projectPortfolioTasks.length; i++) { + let node = parent.projectPortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Run All Exchange Portfolio Tasks') + menu.internalClick('Run All Exchange Portfolio Tasks') + } + } + + function stopAllProjectPortfolioTasks(parent) { + for (let i = 0; i < parent.projectPortfolioTasks.length; i++) { + let node = parent.projectPortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Stop All Exchange Portfolio Tasks') + menu.internalClick('Stop All Exchange Portfolio Tasks') + } + } + function runAllProjectLearningTasks(parent) { for (let i = 0; i < parent.projectLearningTasks.length; i++) { let node = parent.projectLearningTasks[i] @@ -463,6 +498,26 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function runAllExchangePortfolioTasks(parent) { + for (let i = 0; i < parent.exchangePortfolioTasks.length; i++) { + let node = parent.exchangePortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Run All Market Portfolio Tasks') + menu.internalClick('Run All Market Portfolio Tasks') + } + } + + function stopAllExchangePortfolioTasks(parent) { + for (let i = 0; i < parent.exchangePortfolioTasks.length; i++) { + let node = parent.exchangePortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Stop All Market Portfolio Tasks') + menu.internalClick('Stop All Market Portfolio Tasks') + } + } + function runAllExchangeLearningTasks(parent) { for (let i = 0; i < parent.exchangeLearningTasks.length; i++) { let node = parent.exchangeLearningTasks[i] @@ -513,6 +568,16 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function runAllMarketPortfolioTasks(parent) { + for (let i = 0; i < parent.marketPortfolioTasks.length; i++) { + let node = parent.marketPortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Run All Portfolio Mine Tasks') + menu.internalClick('Run All Portfolio Mine Tasks') + } + } + function runAllMarketLearningTasks(parent) { for (let i = 0; i < parent.marketLearningTasks.length; i++) { let node = parent.marketLearningTasks[i] @@ -533,6 +598,16 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function stopAllMarketPortfolioTasks(parent) { + for (let i = 0; i < parent.marketPortfolioTasks.length; i++) { + let node = parent.marketPortfolioTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Stop All Portfolio Mine Tasks') + menu.internalClick('Stop All Portfolio Mine Tasks') + } + } + function stopAllMarketLearningTasks(parent) { for (let i = 0; i < parent.marketLearningTasks.length; i++) { let node = parent.marketLearningTasks[i] @@ -573,6 +648,16 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function runAllPortfolioMineTasks(parent) { + for (let i = 0; i < parent.portfolioMineTasks.length; i++) { + let node = parent.portfolioMineTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Run All Task Managers') + menu.internalClick('Run All Task Managers') + } + } + function runAllLearningMineTasks(parent) { for (let i = 0; i < parent.learningMineTasks.length; i++) { let node = parent.learningMineTasks[i] @@ -593,6 +678,16 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function stopAllPortfolioMineTasks(parent) { + for (let i = 0; i < parent.portfolioMineTasks.length; i++) { + let node = parent.portfolioMineTasks[i] + let menu = node.payload.uiObject.menu + + menu.internalClick('Stop All Task Managers') + menu.internalClick('Stop All Task Managers') + } + } + function stopAllLearningMineTasks(parent) { for (let i = 0; i < parent.learningMineTasks.length; i++) { let node = parent.learningMineTasks[i] @@ -611,6 +706,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks', 'Trading Tasks') } + function addMissingProjectPortfolioTasks(node, rootNodes) { + addMissingProjectTasks(node, rootNodes, 'Project Portfolio Tasks', 'Portfolio Tasks') + } + function addMissingProjectLearningTasks(node, rootNodes) { addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks', 'Learning Tasks') } @@ -647,6 +746,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { addMissingExchangeTasks(node, rootNodes, 'Exchange Trading Tasks') } + function addMissingExchangePortfolioTasks(node, rootNodes) { + addMissingExchangeTasks(node, rootNodes, 'Exchange Portfolio Tasks') + } + function addMissingExchangeLearningTasks(node, rootNodes) { addMissingExchangeTasks(node, rootNodes, 'Exchange Learning Tasks') } @@ -678,6 +781,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { addMissingMarketTasks(node, 'Market Trading Tasks') } + function addMissingMarketPortfolioTasks(node) { + addMissingMarketTasks(node, 'Market Portfolio Tasks') + } + function addMissingMarketLearningTasks(node) { addMissingMarketTasks(node, 'Market Learning Tasks') } @@ -707,6 +814,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { addMissingMineTasks(node, rootNodes, 'Trading Mine', 'Trading Mine Tasks') } + function addMissingPortfolioMineTasks(node, rootNodes) { + addMissingMineTasks(node, rootNodes, 'Portfolio Mine', 'Portfolio Mine Tasks') + } + function addMissingLearningMineTasks(node, rootNodes) { addMissingMineTasks(node, rootNodes, 'Learning Mine', 'Learning Mine Tasks') } @@ -746,6 +857,10 @@ function newFoundationsFunctionLibraryTaskFunctions() { addTradingTasks() break } + case 'Portfolio Mine Tasks': { + addPortfolioTasks() + break + } } function addDataTasks() { @@ -770,6 +885,15 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } + function addPortfolioTasks() { + for (let i = 0; i < rootNodes.length; i++) { + let rootNode = rootNodes[i] + if (rootNode.type === 'Portfolio System') { + addTasks(rootNode) + } + } + } + function addTasks(systemNode) { let mine = node.payload.referenceParent @@ -777,6 +901,7 @@ function newFoundationsFunctionLibraryTaskFunctions() { addTasksForBotArray(mine.apiDataFetcherBots) addTasksForBotArray(mine.indicatorBots) addTasksForBotArray(mine.tradingBots) + addTasksForBotArray(mine.portfolioBots) addTasksForBotArray(mine.learningBots) function addTasksForBotArray(botsArray) { @@ -823,6 +948,15 @@ function newFoundationsFunctionLibraryTaskFunctions() { addProcessInstance(task, bot, botInstance) break } + case 'Portfolio Bot': { + let task = addTask(taskManager) + + botInstance = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Portfolio Bot Instance') + botInstance.name = bot.name + + addProcessInstance(task, bot, botInstance) + break + } case 'Learning Bot': { let task /* @@ -937,6 +1071,49 @@ function newFoundationsFunctionLibraryTaskFunctions() { } } } + case 'Portfolio Bot': { + processInstance = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Portfolio Process Instance') + UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(processInstance, process) + + if (node.payload.parentNode === undefined) { return } + if (node.payload.parentNode.payload === undefined) { return } + if (node.payload.parentNode.payload.parentNode === undefined) { return } + if (node.payload.parentNode.payload.parentNode.payload === undefined) { return } + if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return } + if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return } + + let environment = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode + let session + + switch (environment.type) { + case 'Testing Portfolio Tasks': { + addSession('Backtesting Session') + break + } + case 'Production Portfolio Tasks': { + addSession('Live Portfolio Session') + break + } + } + break + + function addSession(sessionType) { + session = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(processInstance, sessionType) + session.name = task.name + let config = JSON.parse(session.config) + config.folderName = session.name.split(" ").join("-") + session.config = JSON.stringify(config) + + for (let m = 0; m < rootNodes.length; m++) { + let rootNode = rootNodes[m] + if (rootNode.type === 'Portfolio Engine' && rootNode.isPlugin === true) { + let portfolioEngine = rootNode + UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(session.portfolioEngineReference, portfolioEngine) + UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(session.portfolioSystemReference, systemNode) + } + } + } + } case 'Learning Bot': { processInstance = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Learning Process Instance') UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(processInstance, process) diff --git a/Projects/Foundations/UI/Spaces/Charting-Space/PlottersManager.js b/Projects/Foundations/UI/Spaces/Charting-Space/PlottersManager.js index 39d1955e8..796644922 100644 --- a/Projects/Foundations/UI/Spaces/Charting-Space/PlottersManager.js +++ b/Projects/Foundations/UI/Spaces/Charting-Space/PlottersManager.js @@ -138,17 +138,20 @@ function newPlottersManager() { let exchange = layer.exchange let plotterModule = layer.plotterModule let session - let tradingOrLearningSystem - let tradingOrLearningEngine + let tradingOrLearningOrPortfolioSystem + let tradingOrLearningOrPortfolioEngine /* - A layer can be referencing a Data Product in 3 different branches of the Network hiriatchy. + A layer can be referencing a Data Product in 3 different branches of the Network hierarchy. Two of those branches have sessions. */ let sessionReference = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Trading Session Reference', undefined, false, true, true, true) if (sessionReference === undefined) { sessionReference = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Learning Session Reference', undefined, false, true, true, true) } + if (sessionReference === undefined) { + sessionReference = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Portfolio Session Reference', undefined, false, true, true, true) + } if (sessionReference !== undefined) { session = sessionReference.referenceParent @@ -158,16 +161,22 @@ function newPlottersManager() { } /* From the session we might be able to reach the Trading System or the Trading Engine */ if (session.tradingSystemReference !== undefined) { - tradingOrLearningSystem = session.tradingSystemReference.referenceParent + tradingOrLearningOrPortfolioSystem = session.tradingSystemReference.referenceParent } if (session.tradingEngineReference !== undefined) { - tradingOrLearningEngine = session.tradingEngineReference.referenceParent + tradingOrLearningOrPortfolioEngine = session.tradingEngineReference.referenceParent + } + if (session.portfolioSystemReference !== undefined) { + tradingOrLearningOrPortfolioSystem = session.portfolioSystemReference.referenceParent + } + if (session.portfolioEngineReference !== undefined) { + tradingOrLearningOrPortfolioEngine = session.portfolioEngineReference.referenceParent } if (session.learningSystemReference !== undefined) { - tradingOrLearningSystem = session.learningSystemReference.referenceParent + tradingOrLearningOrPortfolioSystem = session.learningSystemReference.referenceParent } if (session.learningEngineReference !== undefined) { - tradingOrLearningEngine = session.learningEngineReference.referenceParent + tradingOrLearningOrPortfolioEngine = session.learningEngineReference.referenceParent } } @@ -258,16 +267,22 @@ function newPlottersManager() { connector.nodesHighlights = newNodesHighlights() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesHighlights.initialize(tradingOrLearningSystem) + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesHighlights.initialize(tradingOrLearningEngine) + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesHighlights.initialize(tradingOrLearningSystem) + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesHighlights.initialize(tradingOrLearningEngine) + connector.nodesHighlights.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesHighlights.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesHighlights.onRecordChange) @@ -276,16 +291,22 @@ function newPlottersManager() { connector.nodesValues = newNodesValues() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesValues.initialize(tradingOrLearningSystem) + connector.nodesValues.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesValues.initialize(tradingOrLearningEngine) + connector.nodesValues.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesValues.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesValues.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesValues.initialize(tradingOrLearningSystem) + connector.nodesValues.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesValues.initialize(tradingOrLearningEngine) + connector.nodesValues.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesValues.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesValues.onRecordChange) @@ -294,16 +315,22 @@ function newPlottersManager() { connector.nodesErrors = newNodesErrors() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesErrors.initialize(tradingOrLearningSystem) + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesErrors.initialize(tradingOrLearningEngine) + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesErrors.initialize(tradingOrLearningSystem) + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesErrors.initialize(tradingOrLearningEngine) + connector.nodesErrors.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesErrors.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesErrors.onRecordChange) @@ -312,16 +339,22 @@ function newPlottersManager() { connector.nodesWarnings = newNodesWarnings() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesWarnings.initialize(tradingOrLearningSystem) + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesWarnings.initialize(tradingOrLearningEngine) + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesWarnings.initialize(tradingOrLearningSystem) + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesWarnings.initialize(tradingOrLearningEngine) + connector.nodesWarnings.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesWarnings.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesWarnings.onRecordChange) @@ -330,16 +363,22 @@ function newPlottersManager() { connector.nodesInfos = newNodesInfos() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesInfos.initialize(tradingOrLearningSystem) + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesInfos.initialize(tradingOrLearningEngine) + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesInfos.initialize(tradingOrLearningSystem) + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesInfos.initialize(tradingOrLearningEngine) + connector.nodesInfos.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesInfos.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesInfos.onRecordChange) @@ -348,16 +387,22 @@ function newPlottersManager() { connector.nodesRunning = newNodesRunning() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesRunning.initialize(tradingOrLearningSystem) + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesRunning.initialize(tradingOrLearningEngine) + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesRunning.initialize(tradingOrLearningSystem) + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesRunning.initialize(tradingOrLearningEngine) + connector.nodesRunning.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesRunning.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesRunning.onRecordChange) @@ -366,16 +411,22 @@ function newPlottersManager() { connector.nodesStatus = newNodesStatus() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesStatus.initialize(tradingOrLearningSystem) + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesStatus.initialize(tradingOrLearningEngine) + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesStatus.initialize(tradingOrLearningSystem) + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesStatus.initialize(tradingOrLearningEngine) + connector.nodesStatus.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesStatus.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesStatus.onRecordChange) @@ -384,16 +435,22 @@ function newPlottersManager() { connector.nodesProgress = newNodesProgress() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesProgress.initialize(tradingOrLearningSystem) + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesProgress.initialize(tradingOrLearningEngine) + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesProgress.initialize(tradingOrLearningSystem) + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesProgress.initialize(tradingOrLearningEngine) + connector.nodesProgress.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesProgress.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesProgress.onRecordChange) @@ -402,16 +459,22 @@ function newPlottersManager() { connector.nodesAnnounements = newNodesAnnouncements() switch (plotterModule.config.connectTo) { case 'Trading System': - connector.nodesAnnounements.initialize(tradingOrLearningSystem) + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioSystem) break case 'Trading Engine': - connector.nodesAnnounements.initialize(tradingOrLearningEngine) + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioEngine) + break + case 'Portfolio System': + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioSystem) + break + case 'Portfolio Engine': + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioEngine) break case 'Learning System': - connector.nodesAnnounements.initialize(tradingOrLearningSystem) + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioSystem) break case 'Learning Engine': - connector.nodesAnnounements.initialize(tradingOrLearningEngine) + connector.nodesAnnounements.initialize(tradingOrLearningOrPortfolioEngine) break } connector.nodesAnnounements.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesAnnounements.onRecordChange) @@ -422,7 +485,7 @@ function newPlottersManager() { */ if (plotterModule.recordValues !== undefined) { connector.recordValues = newRecordValues() - connector.recordValues.initialize(tradingOrLearningSystem, tradingOrLearningEngine, productDefinition) + connector.recordValues.initialize(tradingOrLearningOrPortfolioSystem, tradingOrLearningOrPortfolioEngine, productDefinition) connector.recordValues.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.recordValues.onRecordChange) } } diff --git a/Projects/Foundations/UI/Spaces/Charting-Space/Plotting/RecordValues.js b/Projects/Foundations/UI/Spaces/Charting-Space/Plotting/RecordValues.js index e68cf7c0a..cd0195ca4 100644 --- a/Projects/Foundations/UI/Spaces/Charting-Space/Plotting/RecordValues.js +++ b/Projects/Foundations/UI/Spaces/Charting-Space/Plotting/RecordValues.js @@ -11,6 +11,8 @@ function newRecordValues() { let tradingSystem let tradingEngine + let portfolioSystem + let portfolioEngine let learningSystem let learningEngine let productDefinition @@ -20,24 +22,32 @@ function newRecordValues() { function finalize() { tradingSystem = undefined tradingEngine = undefined + portfolioSystem = undefined + portfolioEngine = undefined learningSystem = undefined learningEngine = undefined productDefinition = undefined propertyTargetNodeMap = undefined } - function initialize(pTradingOrLearningSystem, pTradingOrLearningEngine, pProductDefinition) { - if (pTradingOrLearningSystem.type === 'Trading System') { - tradingSystem = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningSystem.id) + function initialize(pTradingOrLearningOrPortfolioSystem, pTradingOrLearningOrPortfolioEngine, pProductDefinition) { + if (pTradingOrLearningOrPortfolioSystem.type === 'Trading System') { + tradingSystem = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioSystem.id) } - if (pTradingOrLearningSystem.type === 'Learning System') { - learningSystem = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningSystem.id) + if (pTradingOrLearningOrPortfolioSystem.type === 'Portfolio System') { + portfolioSystem = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioSystem.id) } - if (pTradingOrLearningEngine.type === 'Trading Engine') { - tradingEngine = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningEngine.id) + if (pTradingOrLearningOrPortfolioSystem.type === 'Learning System') { + learningSystem = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioSystem.id) } - if (pTradingOrLearningEngine.type === 'Learning Engine') { - learningEngine = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningEngine.id) + if (pTradingOrLearningOrPortfolioEngine.type === 'Trading Engine') { + tradingEngine = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioEngine.id) + } + if (pTradingOrLearningOrPortfolioEngine.type === 'Portfolio Engine') { + portfolioEngine = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioEngine.id) + } + if (pTradingOrLearningOrPortfolioEngine.type === 'Learning Engine') { + learningEngine = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingOrLearningOrPortfolioEngine.id) } productDefinition = pProductDefinition diff --git a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js index 02281b4e2..896789121 100644 --- a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js +++ b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js @@ -157,6 +157,7 @@ function newWorkspace() { function runTasksAndSessions() { executeAction({ name: 'Syncronize Tasks', project: 'Visual-Scripting' }) executeAction({ name: 'Syncronize Trading Sessions', project: 'Visual-Scripting' }) + executeAction({ name: 'Syncronize Portfolio Sessions', project: 'Visual-Scripting' }) executeAction({ name: 'Syncronize Learning Sessions', project: 'Visual-Scripting' }) } @@ -514,6 +515,14 @@ function newWorkspace() { lanNetworkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') lanNetworkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') } + if (lanNetworkNode.testingPortfolioTasks !== undefined && lanNetworkNode.testingPortfolioTasks.payload !== undefined) { + lanNetworkNode.testingPortfolioTasks.payload.uiObject.menu.internalClick('Stop All Exchange Portfolio Tasks') + lanNetworkNode.testingPortfolioTasks.payload.uiObject.menu.internalClick('Stop All Exchange Portfolio Tasks') + } + if (lanNetworkNode.productionPortfolioTasks !== undefined && lanNetworkNode.productionPortfolioTasks.payload !== undefined) { + lanNetworkNode.productionPortfolioTasks.payload.uiObject.menu.internalClick('Stop All Exchange Portfolio Tasks') + lanNetworkNode.productionPortfolioTasks.payload.uiObject.menu.internalClick('Stop All Exchange Portfolio Tasks') + } } } } diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/FloatingSpace.js b/Projects/Foundations/UI/Spaces/Floating-Space/FloatingSpace.js index 1ff25bc7c..61dcb49e7 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/FloatingSpace.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/FloatingSpace.js @@ -270,15 +270,18 @@ function newFoundationsFloatingSpace() { /* Exceptions that are never considered far. */ if ( - payload.node.type === 'Trading System' || - payload.node.type === 'Learning System' || - payload.node.type === 'Trading Engine' || - payload.node.type === 'Learning Engine' || - payload.node.type === 'LAN Network' || - payload.node.type === 'Crypto Ecosystem' || - payload.node.type === 'Charting Space' || - payload.node.type === 'Data Mine' || - payload.node.type === 'Trading Mine' || + payload.node.type === 'Trading System' || + payload.node.type === 'Portfolio System' || + payload.node.type === 'Learning System' || + payload.node.type === 'Trading Engine' || + payload.node.type === 'Portfolio Engine' || + payload.node.type === 'Learning Engine' || + payload.node.type === 'LAN Network' || + payload.node.type === 'Crypto Ecosystem' || + payload.node.type === 'Charting Space' || + payload.node.type === 'Data Mine' || + payload.node.type === 'Trading Mine' || + payload.node.type === 'Portfolio Mine' || payload.node.type === 'Learning Mine' ) { return false diff --git a/Projects/Foundations/UI/Spaces/Panel-Space/Layer.js b/Projects/Foundations/UI/Spaces/Panel-Space/Layer.js index cac303b34..2f06809eb 100644 --- a/Projects/Foundations/UI/Spaces/Panel-Space/Layer.js +++ b/Projects/Foundations/UI/Spaces/Panel-Space/Layer.js @@ -160,25 +160,28 @@ function newLayer() { '->Layer->' + 'Data Product->' + '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->' + + 'Bot Products->Data Mine Products->Trading Mine Products->Portfolio Mine Products->Learning Mine Products->' + 'Market Data Products->Exchange Data Products->' + - 'Trading Session Reference->Learning Session Reference->' + + 'Trading Session Reference->Portfolio Session Reference->Learning Session Reference->' + 'Market Trading Products->Exchange Trading Products->' + + 'Market Portfolio Products->Exchange Portfolio Products->' + 'Market Learning Products->Exchange Learning Products->' + - 'Project Data Products->Project Learning Products->Project Trading Products->' + - 'Data Mines Data->Trading Mines Data->Learning Mines Data->Data Storage->LAN Network Node->' + + 'Project Data Products->Project Learning Products->Project Portfolio Products->Project Trading Products->' + + 'Data Mines Data->Trading Mines Data->Portfolio Mines Data->Learning Mines Data->Data Storage->LAN Network Node->' + 'Data Storage->LAN Network Node->' + 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + + 'Live Portfolio Session->' + 'Back Learning Session->Live Learning Session->' + 'Trading System Reference->Trading Engine Reference->Trading System->Trading Engine->' + + 'Portfolio System Reference->Portfolio Engine Reference->Portfolio System->Portfolio Engine->' + 'Learning System Reference->Learning Engine Reference->Learning System->Learning Engine->' + 'Market->Market Base Asset->Asset->' + 'Market Quoted Asset->Asset->' + 'Exchange Markets->Crypto Exchange->' + 'Product Definition->' + 'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' + - 'Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Learning Bot->' + - 'Data Mine->Trading Mine->Learning Mine->' + + 'Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Portfolio Bot->Learning Bot->' + + 'Data Mine->Trading Mine->Portfolio Mine->Learning Mine->' + 'Dataset Definition->' + 'Record Definition->Record Property->Record Formula->' + 'Data Building Procedure->Procedure Loop->Procedure Javascript Code->Procedure Initialization->Procedure Javascript Code->' + @@ -235,6 +238,9 @@ function newLayer() { if (thisObject.bot === undefined) { thisObject.bot = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Trading Bot', undefined, false, true, true, true) } + if (thisObject.bot === undefined) { + thisObject.bot = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Portfolio Bot', undefined, false, true, true, true) + } if (thisObject.bot === undefined) { thisObject.bot = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Learning Bot', undefined, false, true, true, true) } @@ -249,8 +255,11 @@ function newLayer() { if (thisObject.mine === undefined) { thisObject.mine = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Learning Mine', undefined, false, true, true, true) if (thisObject.mine === undefined) { - thisObject.payload.uiObject.setErrorMessage('Data Mine or Trading Mine or Learning Mine not Found') - return + thisObject.mine = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Portfolio Mine', undefined, false, true, true, true) + if (thisObject.mine === undefined) { + thisObject.payload.uiObject.setErrorMessage('Data Mine or Trading Mine or Portfolio Mine or Learning Mine not Found') + return + } } } } @@ -714,4 +723,3 @@ function newLayer() { UI.projects.foundations.utilities.drawPrint.drawIcon(thisObject.quotedAssetIcon, 4.6 / 8, 2 / 10, 0, 0, 14, thisObject.container) } } - diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioEpisode.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioEpisode.js index c6554f046..50306a40f 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioEpisode.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioEpisode.js @@ -82,7 +82,7 @@ exports.newPortfolioManagementBotModulesPortfolioEpisode = function (processInde } function resetEpisode() { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.learningEpisode) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.learningEpisode) } function updateEnds() { diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOrders.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOrders.js index 358cf6b04..673dc922f 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOrders.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOrders.js @@ -90,7 +90,7 @@ exports.newPortfolioManagementBotModulesPortfolioOrders = function (processIndex if (portfolioSystemOrder.referenceParent === undefined) { badDefinitionUnhandledException(undefined, 'Order Reference Missing', portfolioSystemOrder) } - let portfolioEngineOrder = TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.getNodeById(portfolioSystemOrder.referenceParent.id) + let portfolioEngineOrder = TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.getNodeById(portfolioSystemOrder.referenceParent.id) if (portfolioEngineOrder.status === undefined) { badDefinitionUnhandledException(undefined, 'Status Node Missing', portfolioEngineOrder) @@ -114,7 +114,7 @@ exports.newPortfolioManagementBotModulesPortfolioOrders = function (processIndex let portfolioSystemOrder = orders[i] portfolioSystemValidations(portfolioSystemOrder) - let portfolioEngineOrder = TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.getNodeById(portfolioSystemOrder.referenceParent.id) + let portfolioEngineOrder = TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.getNodeById(portfolioSystemOrder.referenceParent.id) portfolioEngineValidations(portfolioEngineOrder) switch (portfolioEngineOrder.status.value) { @@ -199,11 +199,11 @@ exports.newPortfolioManagementBotModulesPortfolioOrders = function (processIndex if (portfolioEngineOrder.status.value === 'Closed') { switch (portfolioEngineOrder.type) { case 'Market Order': { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngineOrder, portfolioEngine.portfolioLast.marketOrders) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngineOrder, portfolioEngine.portfolioLast.marketOrders) break } case 'Limit Order': { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngineOrder, portfolioEngine.portfolioLast.limitOrders) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngineOrder, portfolioEngine.portfolioLast.limitOrders) break } } @@ -1293,7 +1293,7 @@ exports.newPortfolioManagementBotModulesPortfolioOrders = function (processIndex function resetPortfolioEngineDataStructure(portfolioEngineOrder, portfolioSystemOrder, stageStatus) { if (portfolioEngineOrder.status.value === 'Closed') { /* We reset the order data structure inside the Portfolio Engine to its initial value */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngineOrder) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngineOrder) if (portfolioSystemOrder.config.spawnMultipleOrders !== true) { /* We close the lock so as to prevent this data structure to be used again during this same stage execution. diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOutput.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOutput.js index b07776c55..c13882749 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOutput.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioOutput.js @@ -23,9 +23,9 @@ exports.newPortfolioManagementBotModulesPortfolioOutput = function (processIndex let fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex) if (timeFrame > TS.projects.foundations.globals.timeFrames.dailyTimeFramesArray()[0][0]) { - TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES = false + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES = false } else { - TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES = true + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES = true } /* Preparing everything for the Simulation */ diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioPosition.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioPosition.js index c5ec48817..26ee88660 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioPosition.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioPosition.js @@ -103,7 +103,7 @@ exports.newPortfolioManagementBotModulesPortfolioPosition = function (processInd /* Now that the position is closed, it is the right time to move this position from current to last at the Portfolio Engine data structure. */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngine.portfolioCurrent.position, portfolioEngine.portfolioLast.position) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngine.portfolioCurrent.position, portfolioEngine.portfolioLast.position) cycleBasedStatistics() @@ -416,7 +416,7 @@ exports.newPortfolioManagementBotModulesPortfolioPosition = function (processInd function resetPortfolioEngineDataStructure() { if (portfolioEngine.portfolioCurrent.position.status.value === 'Closed') { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.position) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.position) } } diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioProcess.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioProcess.js index 11188ea40..1ffacea73 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioProcess.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioProcess.js @@ -16,7 +16,7 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.portfolioManagement.botModules.portfolioEngine.newPortfolioManagementBotModulesPortfolioEngine(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT = TS.projects.portfolioManagement.botModules.portfolioEngine.newPortfolioManagementBotModulesPortfolioEngine(processIndex) let portfolioOutputModuleObject = TS.projects.portfolioManagement.botModules.portfolioOutput.newPortfolioManagementBotModulesPortfolioOutput(processIndex) let currentTimeFrame = {} @@ -41,12 +41,12 @@ /* Here is where the Portfolio Engine and Portfolio Systems received are moved to the simulation state. */ - TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.portfolioEngine = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_NODE - TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.portfolioSystem = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_SYSTEM_NODE + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.portfolioEngine = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_NODE + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.portfolioSystem = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_SYSTEM_NODE } /* We set up the Portfolio Engine Module. */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initialize() + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initialize() /* Initializing the Portfolio Process Date */ if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_FIRST_LOOP === true && TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING === false) { diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioRecords.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioRecords.js index 27eec55bd..01cdc09dc 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioRecords.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioRecords.js @@ -45,11 +45,11 @@ exports.newPortfolioManagementBotModulesPortfolioRecords = function (processInde let product = dataset.parentNode let outputDatasetArray = outputDatasetsMap.get(product.config.codeName) - if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES === true && dataset.config.type === 'Daily Files') { + if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES === true && dataset.config.type === 'Daily Files') { persistRecords() } - if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES === false && dataset.config.type === 'Market Files') { + if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES === false && dataset.config.type === 'Market Files') { persistRecords() } @@ -239,7 +239,7 @@ exports.newPortfolioManagementBotModulesPortfolioRecords = function (processInde if (recordProperty.config.codeName === product.config.propertyNameThatDefinesObject) { let propertyValue = record[j] - if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES) { + if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES) { if (product.config.doNotCutObjectInDays !== true) { /* By default we will cut objects in days. diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioSimulation.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioSimulation.js index 401e13c40..e9e02b94c 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioSimulation.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioSimulation.js @@ -47,7 +47,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI let propertyName = 'at' + sessionParameters.timeFrame.config.label.replace('-', '') let candles = chart[propertyName].candles - if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES) { + if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES) { /* We need to purge from the candles array all the candles from the previous day that comes when processing daily files. @@ -132,7 +132,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle End @ ' + (new Date(candle.end)).toUTCString()) - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCandle(candle) // We move the current candle we are standing at, to the portfolio engine data structure to make it available to anyone, including conditions and formulas. + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.setCurrentCandle(candle) // We move the current candle we are standing at, to the portfolio engine data structure to make it available to anyone, including conditions and formulas. /* We emit a heart beat so that the UI can now where we are at the overal process.*/ heartBeat() @@ -162,7 +162,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI */ portfolioSystemModuleObject.mantain() portfolioEpisodeModuleObject.mantain() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.mantain() + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.mantain() /* Run the first cycle of the Portfolio System. In this first cycle we @@ -171,7 +171,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI orders can not be created, since otherwise the could be cancelled at the second cycle without spending real time at the order book. */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCycle('First') + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.setCurrentCycle('First') await runCycle() /* @@ -195,7 +195,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI without the need to wait until the next candle. Orders can not be cancelled during the second cycle. */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCycle('Second') + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.setCurrentCycle('Second') await runCycle() checkIfWeNeedToStopAfterBothCycles() @@ -209,7 +209,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI /* Reset Data Structures */ portfolioSystemModuleObject.reset() portfolioEpisodeModuleObject.reset() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.reset() + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.reset() let infoMessage = 'Processing candle # ' + portfolioEngine.portfolioCurrent.portfolioEpisode.candle.index.value + ' @ the ' + portfolioEngine.portfolioCurrent.portfolioEpisode.cycle.value + ' cycle.' TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, @@ -376,7 +376,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(dataDependencies) /* Finding the Current Element on Daily Files */ - if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES) { + if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES) { for (let j = 0; j < TS.projects.foundations.globals.timeFrames.dailyTimeFramesArray().length; j++) { let mapKey = TS.projects.foundations.globals.timeFrames.dailyTimeFramesArray()[j][1] let propertyName = 'at' + mapKey.replace('-', '') @@ -495,7 +495,7 @@ exports.newPortfolioManagementBotModulesPortfolioSimulation = function (processI */ let candlesPerDay = SA.projects.foundations.globals.timeConstants.ONE_DAY_IN_MILISECONDS / sessionParameters.timeFrame.config.value if ( - TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES && + TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_PROCESSING_DAILY_FILES && portfolioEngine.portfolioCurrent.portfolioEpisode.candle.index.value + 1 + 1 === candlesPerDay ) { /* diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStages.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStages.js index bd0d053eb..9e736569a 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStages.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStages.js @@ -295,7 +295,7 @@ exports.newPortfolioManagementBotModulesPortfolioStages = function (processIndex let portfolioEngineStage = portfolioEngine.portfolioCurrent.strategyOpenStage /* Reset the Exchange Orders data structure to its initial value */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.exchangeOrders) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.exchangeOrders) /* Entry Position size and rate */ portfolioSystem.evalFormulas(portfolioSystemStage, 'Initial Targets') @@ -1231,7 +1231,7 @@ exports.newPortfolioManagementBotModulesPortfolioStages = function (processIndex resetStage(portfolioEngine.portfolioCurrent.strategyCloseStage) } function resetStage(stage) { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(stage) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(stage) } } diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStrategy.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStrategy.js index 0b98021bb..6863c232e 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStrategy.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/Low-Frequency-Portfolio/PortfolioStrategy.js @@ -63,7 +63,7 @@ exports.newPortfolioManagementBotModulesPortfolioStrategy = function (processInd /* Now that the strategy is closed, it is the right time to move this strategy from current to last at the Portfolio Engine data structure. */ - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngine.portfolioCurrent.strategy, portfolioEngine.portfolioLast.strategy) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.cloneValues(portfolioEngine.portfolioCurrent.strategy, portfolioEngine.portfolioLast.strategy) } function updateEnds() { @@ -75,7 +75,7 @@ exports.newPortfolioManagementBotModulesPortfolioStrategy = function (processInd function resetPortfolioEngineDataStructure() { if (portfolioEngine.portfolioCurrent.strategy.status.value === 'Closed') { - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.strategy) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_MODULE_OBJECT.initializeNode(portfolioEngine.portfolioCurrent.strategy) } } diff --git a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/PortfolioSession.js b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/PortfolioSession.js index 4c034f5ed..9baaf7f0d 100644 --- a/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/PortfolioSession.js +++ b/Projects/Portfolio-Management/TS/Bot-Modules/Portfolio-Bot/PortfolioSession.js @@ -110,8 +110,8 @@ } /* We are going to initialize here these constants whose values are comming at the event. */ - TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_SYSTEM_NODE = JSON.parse(message.event.portfolioSystem) - TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_NODE = JSON.parse(message.event.portfolioEngine) + TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_SYSTEM_NODE = JSON.parse(message.event.portfolioSystem) + TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).PORTFOLIO_ENGINE_NODE = JSON.parse(message.event.portfolioEngine) TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE = JSON.parse(message.event.session) TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).DEPENDENCY_FILTER = JSON.parse(message.event.dependencyFilter) TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING = false diff --git a/Projects/Visual-Scripting/UI/Function-Libraries/ActionSwitch.js b/Projects/Visual-Scripting/UI/Function-Libraries/ActionSwitch.js index 785bb7a46..90e737045 100644 --- a/Projects/Visual-Scripting/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Visual-Scripting/UI/Function-Libraries/ActionSwitch.js @@ -50,6 +50,10 @@ function newVisualScriptingActionSwitch() { UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd() } break + case 'Syncronize Portfolio Sessions': { + UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.syncronizePortfolioSessionsFoundAtWorkspaceWithBackEnd() + } + break case 'Syncronize Learning Sessions': { UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd() }