From c1cddc688357a055ea8751b2ded34a43ebcd4dce Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 29 Jan 2021 18:30:12 +0100 Subject: [PATCH] Switch between Trading Sessions --- Projects/Superalgos/Schemas/AppSchema.json | 24 +++++++++++++++++ .../UI/Function-Libraries/ActionSwitch.js | 26 ++++++++++++++++++- .../UI/Function-Libraries/NodeDeleter.js | 1 - .../Function-Libraries/UiObjectsFromNodes.js | 7 ----- .../UI/Spaces/Floating-Space/FloatingLayer.js | 12 +++++++++ .../UI/Spaces/Floating-Space/UiObject.js | 2 +- .../Floating-Space/UiObjectConstructor.js | 12 +++++++++ 7 files changed, 74 insertions(+), 10 deletions(-) diff --git a/Projects/Superalgos/Schemas/AppSchema.json b/Projects/Superalgos/Schemas/AppSchema.json index d15025284..b509ef075 100644 --- a/Projects/Superalgos/Schemas/AppSchema.json +++ b/Projects/Superalgos/Schemas/AppSchema.json @@ -2839,6 +2839,12 @@ "relatedUiObject": "Trading Parameters", "actionFunction": "payload.executeAction" }, + { + "action": "Switch To Paper Trading", + "label": "Switch To Paper Trading", + "relatedUiObject": "Paper Trading Session", + "actionFunction": "payload.executeAction" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -10093,6 +10099,12 @@ "relatedUiObject": "Trading Parameters", "actionFunction": "payload.executeAction" }, + { + "action": "Switch To Backtesting", + "label": "Switch To Backtesting", + "relatedUiObject": "Backtesting Session", + "actionFunction": "payload.executeAction" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -10194,6 +10206,12 @@ "relatedUiObject": "Trading Parameters", "actionFunction": "payload.executeAction" }, + { + "action": "Switch To Live Trading", + "label": "Switch To Live Trading", + "relatedUiObject": "Live Trading Session", + "actionFunction": "payload.executeAction" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -10321,6 +10339,12 @@ "relatedUiObject": "Trading Parameters", "actionFunction": "payload.executeAction" }, + { + "action": "Switch To Forward Testing", + "label": "Switch To Forward Testing", + "relatedUiObject": "Forward Testing Session", + "actionFunction": "payload.executeAction" + }, { "action": "Delete UI Object", "askConfirmation": true, diff --git a/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js b/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js index 9fe670bcd..ab4716639 100644 --- a/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js @@ -634,7 +634,7 @@ function newSuperalgosActionSwitch() { { let definition = getSchemaDocument(action.node) if (definition !== undefined) { - UI.projects.superalgos.spaces.docsSpace.openSpaceAreaAndNavigateTo(action.node.project,'Node', action.node.type) + UI.projects.superalgos.spaces.docsSpace.openSpaceAreaAndNavigateTo(action.node.project, 'Node', action.node.type) } } break @@ -678,6 +678,30 @@ function newSuperalgosActionSwitch() { UI.projects.superalgos.functionLibraries.workspaceFunctions.addMissingWorkspaceProjects(action.node, action.rootNodes) } break + case 'Switch To Forward Testing': + { + action.node.type = "Forward Testing Session" + UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload) + } + break + case 'Switch To Live Trading': + { + action.node.type = "Live Trading Session" + UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload) + } + break + case 'Switch To Paper Trading': + { + action.node.type = "Paper Trading Session" + UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload) + } + break + case 'Switch To Backtesting': + { + action.node.type = "Backtesting Session" + UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload) + } + break } } } diff --git a/Projects/Superalgos/UI/Function-Libraries/NodeDeleter.js b/Projects/Superalgos/UI/Function-Libraries/NodeDeleter.js index 864825d20..769966af1 100644 --- a/Projects/Superalgos/UI/Function-Libraries/NodeDeleter.js +++ b/Projects/Superalgos/UI/Function-Libraries/NodeDeleter.js @@ -156,7 +156,6 @@ function newSuperalgosFunctionLibraryNodeDeleter() { node.payload.targetPosition.x = undefined node.payload.targetPosition.y = undefined node.payload.visible = undefined - node.payload.subTitle = undefined node.payload.title = undefined node.payload.node = undefined node.payload.parentNode = undefined diff --git a/Projects/Superalgos/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Superalgos/UI/Function-Libraries/UiObjectsFromNodes.js index bfd05f2d8..397e603ea 100644 --- a/Projects/Superalgos/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Superalgos/UI/Function-Libraries/UiObjectsFromNodes.js @@ -641,13 +641,6 @@ function newSuperalgosFunctionLibraryUiObjectsFromNodes() { } } - /* Setting the title */ - if (title !== undefined) { - payload.subTitle = title - } else { - payload.subTitle = uiObjectType - } - payload.visible = true payload.title = name payload.node = node diff --git a/Projects/Superalgos/UI/Spaces/Floating-Space/FloatingLayer.js b/Projects/Superalgos/UI/Spaces/Floating-Space/FloatingLayer.js index fe4400c63..6b722352f 100644 --- a/Projects/Superalgos/UI/Spaces/Floating-Space/FloatingLayer.js +++ b/Projects/Superalgos/UI/Spaces/Floating-Space/FloatingLayer.js @@ -210,6 +210,12 @@ function newFloatingLayer() { let newInvisibleArray = [] for (let i = 0; i < invisibleFloatingObjects.length; i++) { let floatingObject = invisibleFloatingObjects[i] + + if (floatingObject.payload === undefined) { + /* The floating object was replaced by another one. */ + invisibleFloatingObjects.splice(i, 1) + return + } collapsePhysics(floatingObject) @@ -227,6 +233,12 @@ function newFloatingLayer() { for (let i = 0; i < visibleFloatingObjects.length; i++) { let floatingObject = visibleFloatingObjects[i] + if (floatingObject.payload === undefined) { + /* The floating object was replaced by another one. */ + visibleFloatingObjects.splice(i, 1) + return + } + collapsePhysics(floatingObject) if (floatingObject.isParentCollapsed === true) { diff --git a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js index e297e2ebe..baa359708 100644 --- a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js +++ b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js @@ -1679,7 +1679,7 @@ function newUiObject() { if (radius > 6) { const MAX_LABEL_LENGTH = 30 - label = thisObject.payload.subTitle + label = thisObject.payload.node.type label = addIndexNumber(label) if (label !== undefined) { diff --git a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObjectConstructor.js b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObjectConstructor.js index f90321a4d..53d8b71e0 100644 --- a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObjectConstructor.js +++ b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObjectConstructor.js @@ -25,10 +25,22 @@ function newUiObjectConstructor() { } function createUiObject(userAddingNew, payload) { + + /* + In case we are replacing an existing uiObject and floatingObject + */ + if (payload.floatingObject !== undefined) { + payload.floatingObject.finalize() + } + if (payload.uiObject !== undefined) { + payload.uiObject.finalize() + } + let floatingObject = newFloatingObject() floatingObject.fitFunction = UI.projects.superalgos.spaces.floatingSpace.fitIntoVisibleArea floatingObject.container.connectToParent(UI.projects.superalgos.spaces.floatingSpace.container, false, false, false, false, false, false, false, false) floatingObject.initialize('UI Object', payload) + payload.floatingObject = floatingObject /*