Bug with Session References fixed

This commit is contained in:
Luis Fernando Molina committed 2020-09-15 20:00:48 +02:00
1 parent f919c88cb0
commit b4cfab3a0d
5 files changed
+174 -113

No files matched your search

@@ -2,7 +2,8 @@ function newChartingSpaceFunctions() {
thisObject = {
addAllMineLayers: addAllMineLayers,
addMissingDashboards: addMissingDashboards,
addMissingTimeMachines: addMissingTimeMachines
addMissingTimeMachines: addMissingTimeMachines,
createTimeMachine: createTimeMachine
}
return thisObject
@@ -100,97 +101,101 @@ function newChartingSpaceFunctions() {
let market = findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
if (market.payload.referenceParent === undefined) { continue }
if (isMissingChildren(node, session, true) === true) {
let mineProducts
let timeMachine = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Time Machine')
timeMachine.payload.referenceParent = session
timeMachine.name = session.name + ' ' + session.type
timeMachine.payload.floatingObject.collapseToggle()
timeMachine.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
/*
We need to create a Timeline Chart for each Data Mine Indicators.
*/
mineProducts = nodeBranchToArray(networkNode, 'Data Mine Products')
for (let j = 0; j < mineProducts.length; j++) {
let mineProduct = mineProducts[j]
/*
We need to filter out the ones that do not belong to the market where
the session is running at.
*/
if (mineProduct.payload.parentNode.payload.referenceParent === undefined) { continue }
if (mineProduct.payload.parentNode.payload.referenceParent.id !== market.payload.referenceParent.id) { continue }
let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
timelineChart.name = mineProduct.name
timelineChart.layersManager.payload.referenceParent = mineProduct
timelineChart.payload.floatingObject.collapseToggle()
timelineChart.layersManager.payload.floatingObject.collapseToggle()
let menu = timelineChart.layersManager.payload.uiObject.menu
menu.internalClick('Add All Mine Layers')
menu.internalClick('Add All Mine Layers')
}
mineProducts = nodeBranchToArray(networkNode, 'Trading Mine Products')
for (let j = 0; j < mineProducts.length; j++) {
let mineProduct = mineProducts[j]
/*
The mine products found so far, belongs to any session. To filer all the sessions
that are not the one we are interested in, we do the following:
*/
if (mineProduct.payload.parentNode === undefined) { continue }
if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent === undefined) { continue }
if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent.id !== session.id) { continue }
/*
At the current version of Superalgos, beta 6, there is only one Trading Mine,
with only one bot, and it has so many data products that we want to put them
in 3 different timeline charts. So we will create 3 charts, connect them,
and delete from each one 1/3 of the layers. We do all that next:
*/
for (let k = 0; k < 3; k++) {
let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
timelineChart.layersManager.payload.referenceParent = mineProduct
timelineChart.payload.floatingObject.collapseToggle()
timelineChart.layersManager.payload.floatingObject.collapseToggle()
let menu = timelineChart.layersManager.payload.uiObject.menu
menu.internalClick('Add All Mine Layers')
menu.internalClick('Add All Mine Layers')
switch (k) {
case 0: {
timelineChart.name = 'Trading Engine'
deleteNodeByName('Trading System')
deleteNodeByName('Objects')
break
}
case 1: {
timelineChart.name = 'Trading System'
deleteNodeByName('Trading Engine')
deleteNodeByName('Objects')
break
}
case 2: {
timelineChart.name = 'Objects'
deleteNodeByName('Trading Engine')
deleteNodeByName('Trading System')
break
}
}
function deleteNodeByName(nodeName) {
let nodeToDelete = findNodeInNodeMesh(timelineChart.layersManager, undefined, nodeName, true, true, false, false)
if (nodeToDelete === undefined) { return }
functionLibraryNodeDeleter.deleteUIObject(nodeToDelete, rootNodes)
}
}
}
createTimeMachine(node, session, market.payload.referenceParent, networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
}
}
}
}
}
function createTimeMachine(dashboard, session, market, networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) {
let mineProducts
let timeMachine = functionLibraryUiObjectsFromNodes.addUIObject(dashboard, 'Time Machine')
timeMachine.payload.referenceParent = session
timeMachine.name = session.name + ' ' + session.type
timeMachine.payload.floatingObject.collapseToggle()
timeMachine.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
/*
We need to create a Timeline Chart for each Data Mine Indicators.
*/
mineProducts = nodeBranchToArray(networkNode, 'Data Mine Products')
for (let j = 0; j < mineProducts.length; j++) {
let mineProduct = mineProducts[j]
/*
We need to filter out the ones that do not belong to the market where
the session is running at.
*/
if (mineProduct.payload.parentNode.payload.referenceParent === undefined) { continue }
if (mineProduct.payload.parentNode.payload.referenceParent.id !== market.id) { continue }
let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
timelineChart.name = mineProduct.name
timelineChart.layersManager.payload.referenceParent = mineProduct
timelineChart.payload.floatingObject.collapseToggle()
timelineChart.layersManager.payload.floatingObject.collapseToggle()
let menu = timelineChart.layersManager.payload.uiObject.menu
menu.internalClick('Add All Mine Layers')
menu.internalClick('Add All Mine Layers')
}
mineProducts = nodeBranchToArray(networkNode, 'Trading Mine Products')
for (let j = 0; j < mineProducts.length; j++) {
let mineProduct = mineProducts[j]
/*
The mine products found so far, belongs to any session. To filer all the sessions
that are not the one we are interested in, we do the following:
*/
if (mineProduct.payload.parentNode === undefined) { continue }
if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent === undefined) { continue }
if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent.id !== session.id) { continue }
/*
At the current version of Superalgos, beta 6, there is only one Trading Mine,
with only one bot, and it has so many data products that we want to put them
in 3 different timeline charts. So we will create 3 charts, connect them,
and delete from each one 1/3 of the layers. We do all that next:
*/
for (let k = 0; k < 3; k++) {
let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
timelineChart.layersManager.payload.referenceParent = mineProduct
timelineChart.payload.floatingObject.collapseToggle()
timelineChart.layersManager.payload.floatingObject.collapseToggle()
let menu = timelineChart.layersManager.payload.uiObject.menu
menu.internalClick('Add All Mine Layers')
menu.internalClick('Add All Mine Layers')
switch (k) {
case 0: {
timelineChart.name = 'Trading Engine'
deleteNodeByName('Trading System')
deleteNodeByName('Objects')
break
}
case 1: {
timelineChart.name = 'Trading System'
deleteNodeByName('Trading Engine')
deleteNodeByName('Objects')
break
}
case 2: {
timelineChart.name = 'Objects'
deleteNodeByName('Trading Engine')
deleteNodeByName('Trading System')
break
}
}
function deleteNodeByName(nodeName) {
let nodeToDelete = findNodeInNodeMesh(timelineChart.layersManager, undefined, nodeName, true, true, false, false)
if (nodeToDelete === undefined) { return }
functionLibraryNodeDeleter.deleteUIObject(nodeToDelete, rootNodes)
}
}
}
}
function addMissingDashboards(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) {
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
@@ -206,7 +206,7 @@ function newCryptoEcosystemFunctions() {
}
}
function installMarket(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) {
function installMarket(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions) {
let market = node
let cryptoExchange = findNodeInNodeMesh(node, 'Crypto Exchange', undefined, true, false, true, false)
@@ -214,7 +214,7 @@ function newCryptoEcosystemFunctions() {
node.payload.uiObject.setErrorMessage('Market must be a descendant of a Crypto Exchange')
return
}
let environmentArray = []
let dashboardsArray = []
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
@@ -253,6 +253,8 @@ function newCryptoEcosystemFunctions() {
menuClick(marketDataTask, 'Add Missing Data Mine Tasks', true)
menuClickOfNodeArray(marketDataTask.dataMineTasks, 'Add All Tasks', true)
let sessionsCreatedArray = []
/*
Next we complete the missing stuff at Testing Environment
*/
@@ -272,15 +274,20 @@ function newCryptoEcosystemFunctions() {
return
}
/* This will be needed at the charging space, for creating Dashboards */
environmentArray.push({ environmentNode: environmentFound, networkNode: networkNode})
let exchangeTradingTasks = findOrCreateChildWithReference(environmentFound, 'Exchange Trading Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes)
exchangeTradingTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let marketTradingTask = findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
menuClick(marketTradingTask, 'Add Missing Trading Mine Tasks', true)
menuClickOfNodeArray(marketTradingTask.tradingMineTasks, 'Add All Tasks', true)
/* This will be needed at the charging space, for creating Dashboards */
let backtestingSessionsArray = nodeBranchToArray(marketTradingTask, 'Backtesting Session')
let liveTradingSessionsArray = nodeBranchToArray(marketTradingTask, 'Live Trading Session')
let allSessionsArray = backtestingSessionsArray.concat(liveTradingSessionsArray)
sessionsCreatedArray = sessionsCreatedArray.concat(allSessionsArray)
dashboardsArray.push({ environmentNode: environmentFound, networkNode: networkNode, sessionsArray: allSessionsArray })
}
/*
Here we complete the missing stuff at Session Independent Data
@@ -309,9 +316,36 @@ function newCryptoEcosystemFunctions() {
let exchangeSessions = findOrCreateChildWithReference(sessionBasedData, 'Exchange Sessions', cryptoExchange, functionLibraryUiObjectsFromNodes)
exchangeSessions.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
menuClick(exchangeSessions, 'Add Missing Session References', true)
/*
We need to delete all the session references related to the market we are installing.
We make a copy of the array so that if we need to delete some nodes it does not
affect the loop evaluating the nodes.
*/
let sessionReferencesArray = []
for (let i = 0; i < exchangeSessions.sessionReferences.length; i++) {
sessionReference = exchangeSessions.sessionReferences[i]
sessionReferencesArray.push(sessionReference)
}
for (let i = 0; i < sessionReferencesArray.length; i++) {
sessionReference = sessionReferencesArray[i]
if (sessionReference.singleMarketTradingData === undefined) { continue }
if (sessionReference.singleMarketTradingData.payload.referenceParent === undefined) { continue }
if (sessionReference.singleMarketTradingData.payload.referenceParent.id === node.id) {
functionLibraryNodeDeleter.deleteUIObject(sessionReference, rootNodes)
}
}
/*
Create the new session references.
*/
for (let i = 0; i < sessionsCreatedArray.length; i++) {
let session = sessionsCreatedArray[i]
if (isMissingChildren(exchangeSessions, session, true) === true) {
functionLibraryDataStorageFunctions.createSessionReference(exchangeSessions, session, functionLibraryUiObjectsFromNodes)
}
}
/*
Create everything inside the session references.
*/
for (let j = 0; j < exchangeSessions.sessionReferences.length; j++) {
sessionReference = exchangeSessions.sessionReferences[j]
menuClick(sessionReference.singleMarketTradingData, 'Add All Trading Mine Products', true)
@@ -323,18 +357,20 @@ function newCryptoEcosystemFunctions() {
function installInChartingSpace(chartingSpace) {
for (let i = 0; i < environmentArray.length; i++) {
let environment = environmentArray[i]
if (isMissingChildren(chartingSpace, environment.environmentNode, true) === true) {
let dashboard = functionLibraryUiObjectsFromNodes.addUIObject(chartingSpace, 'Dashboard')
dashboard.payload.referenceParent = environment.environmentNode
dashboard.name = environment.environmentNode.type + ' ' + environment.networkNode.name
for (let i = 0; i < dashboardsArray.length; i++) {
let arrayItem = dashboardsArray[i]
let dashboard = findOrCreateChildWithReference(chartingSpace, 'Dashboard', arrayItem.environmentNode, functionLibraryUiObjectsFromNodes)
dashboard.name = arrayItem.environmentNode.type + ' ' + arrayItem.networkNode.name
for (let j = 0; j < arrayItem.sessionsArray.length; j++) {
let session = arrayItem.sessionsArray[j]
functionLibraryChartingSpaceFunctions.createTimeMachine(dashboard, session, node, arrayItem.networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
}
}
}
}
function uninstallMarket(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) {
function uninstallMarket(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions) {
}
}
@@ -6,7 +6,8 @@ function newDataStorageFunctions() {
addMissingSessionReferences: addMissingSessionReferences,
addMissingSingleMarketData: addMissingSingleMarketData,
addMissingExchangeSessions: addMissingExchangeSessions,
addMissingExchangeDataProducts: addMissingExchangeDataProducts
addMissingExchangeDataProducts: addMissingExchangeDataProducts,
createSessionReference: createSessionReference
}
return thisObject
@@ -100,20 +101,24 @@ function newDataStorageFunctions() {
for (let i = 0; i < sessionsArray.length; i++) {
let session = sessionsArray[i]
if (isMissingChildren(node, session, true) === true) {
let sessionReference = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Session Reference')
sessionReference.payload.referenceParent = session
/*
Now I will connect the Session Reference child that is auto created with the market
where the Session was found.
*/
let marketTradingTasks = findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
sessionReference.singleMarketTradingData.payload.referenceParent = marketTradingTasks.payload.referenceParent
marketTradingTasks.payload.floatingObject.collapseToggle()
createSessionReference(node, session, functionLibraryUiObjectsFromNodes)
}
}
}
}
function createSessionReference(node, session, functionLibraryUiObjectsFromNodes) {
let sessionReference = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Session Reference')
sessionReference.payload.referenceParent = session
/*
Now I will connect the Session Reference child that is auto created with the market
where the Session was found.
*/
let marketTradingTasks = findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
sessionReference.singleMarketTradingData.payload.referenceParent = marketTradingTasks.payload.referenceParent
marketTradingTasks.payload.floatingObject.collapseToggle()
}
function addMissingSingleMarketData(node, rootNodes, functionLibraryUiObjectsFromNodes) {
if (node.payload.referenceParent === undefined) { return }
if (node.payload.referenceParent.exchangeMarkets === undefined) { return }
+2 -2
View File
@@ -702,12 +702,12 @@ function newWorkspace() {
break
case 'Install Market':
{
functionLibraryCryptoEcosystemFunctions.installMarket(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
functionLibraryCryptoEcosystemFunctions.installMarket(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions)
}
break
case 'Uninstall Market':
{
functionLibraryCryptoEcosystemFunctions.uninstallMarket(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
functionLibraryCryptoEcosystemFunctions.uninstallMarket(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions)
}
break
case 'Add All Output Datasets':
+15
View File
@@ -274,6 +274,9 @@ function newFloatingObject() {
}
function invisiblePhysics() {
if (thisObject.payload === undefined) {return}
if (thisObject.payload.uiObject === undefined) {return}
if (thisObject.payload.uiObject !== undefined) {
thisObject.payload.uiObject.invisiblePhysics()
}
@@ -589,6 +592,9 @@ function newFloatingObject() {
}
function drawBackground() {
if (thisObject.payload === undefined) {return}
if (thisObject.payload.uiObject === undefined) {return}
if (canvas.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return }
if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) {
if (thisObject.payload.uiObject.isShowing !== true) {
@@ -599,6 +605,9 @@ function newFloatingObject() {
}
function drawMiddleground() {
if (thisObject.payload === undefined) {return}
if (thisObject.payload.uiObject === undefined) {return}
if (canvas.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return }
if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) {
if (thisObject.payload.uiObject.isShowing !== true) {
@@ -609,6 +618,9 @@ function newFloatingObject() {
}
function drawForeground() {
if (thisObject.payload === undefined) {return}
if (thisObject.payload.uiObject === undefined) {return}
if (canvas.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return }
if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) {
if (thisObject.payload.uiObject.isShowing !== true) {
@@ -619,6 +631,9 @@ function newFloatingObject() {
}
function drawOnFocus() {
if (thisObject.payload === undefined) {return}
if (thisObject.payload.uiObject === undefined) {return}
thisObject.payload.uiObject.drawOnFocus()
}