More refactoring - Portfolio-Management

This commit is contained in:
Philip Love committed 2021-10-30 03:21:20 -04:00
1 parent 40c8afcbd2
commit a9adf7bf7a
18 files changed
+435 -125

No files matched your search

+38 -2
View File
@@ -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' {} \;
@@ -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)
@@ -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)
}
}
@@ -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
@@ -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')
}
}
}
}
@@ -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
@@ -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)
}
}
@@ -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() {
@@ -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.
@@ -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 */
@@ -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)
}
}
@@ -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) {
@@ -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.
@@ -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
) {
/*
@@ -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)
}
}
@@ -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)
}
}
@@ -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
@@ -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()
}