From 4330ef1e0477ea8f964f9dcbd69ab2c4382a7ff8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 12:37:49 +0200 Subject: [PATCH] All new menu item actions implemented --- FloatingSpace/StrategyPartConstructor.js | 32 +++++++- .../FunctionLibraries/NodeDeleter.js | 76 +++++++++++++++---- .../FunctionLibraries/PartsFromNodes.js | 39 ++++++++++ StrategySpace/Workspace/Workspace.js | 27 +++++++ 4 files changed, 156 insertions(+), 18 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index daa1ef5c7..6bbae4fc4 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -132,7 +132,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40 + angle: -50 }, { action: 'Delete Trading System', @@ -144,7 +144,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0 + angle: -20 }, { action: 'New Strategy', @@ -157,7 +157,20 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 40 + angle: +20 + }, + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: false, + iconPathOn: 'quality', + iconPathOff: 'quality', + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 50 }, { action: 'Download', @@ -420,6 +433,19 @@ function newStrategyPartConstructor () { currentRadius: 0, angle: -40 }, + { + action: 'Add Position Size', + actionFunction: payload.onMenuItemClick, + label: 'Add Position Size', + visible: false, + iconPathOn: 'responsive', + iconPathOff: 'responsive', + relatedStrategyPart: 'Position Size', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + }, { action: 'Delete Trigger Stage', actionFunction: payload.onMenuItemClick, diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 9ed435656..6e015633a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -1,11 +1,14 @@ function newNodeDeleter () { thisObject = { deleteTradingSystem: deleteTradingSystem, + deleteParameters: deleteParameters, + deleteBaseAsset: deleteBaseAsset, deleteStrategy: deleteStrategy, deleteTriggerStage: deleteTriggerStage, deleteOpenStage: deleteOpenStage, deleteManageStage: deleteManageStage, deleteCloseStage: deleteCloseStage, + deletePositionSize: deletePositionSize, deleteInitialDefinition: deleteInitialDefinition, deleteEvent: deleteEvent, deleteManagedItem: deleteManagedItem, @@ -38,7 +41,7 @@ function newNodeDeleter () { } while (node.strategies.length > 0) { - deleteStrategy(node.strategies[0]) + deleteStrategy(node.strategies[0], rootNodes) } completeDeletion(node, rootNodes) @@ -46,6 +49,49 @@ function newNodeDeleter () { cleanNode(node) } +function deleteParameters() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.parameters = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.baseAsset !== undefined) { + deleteBaseAsset(node.baseAsset, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + +function deleteBaseAsset() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.baseAsset = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + +function deletePositionSize() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.positionSize = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + + function deleteStrategy (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { @@ -59,16 +105,16 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.triggerStage !== undefined) { - deleteTriggerStage(node.triggerStage) + deleteTriggerStage(node.triggerStage, rootNodes) } if (node.openStage !== undefined) { - deleteOpenStage(node.openStage) + deleteOpenStage(node.openStage, rootNodes) } if (node.manageStage !== undefined) { - deleteManageStage(node.manageStage) + deleteManageStage(node.manageStage, rootNodes) } if (node.closeStage !== undefined) { - deleteCloseStage(node.closeStage) + deleteCloseStage(node.closeStage, rootNodes) } destroyPart(node) cleanNode(node) @@ -82,13 +128,13 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.triggerOn !== undefined) { - deleteEvent(node.triggerOn) + deleteEvent(node.triggerOn, rootNodes) } if (node.triggerOff !== undefined) { - deleteEvent(node.triggerOff) + deleteEvent(node.triggerOff, rootNodes) } if (node.takePosition !== undefined) { - deleteEvent(node.takePosition) + deleteEvent(node.takePosition, rootNodes) } destroyPart(node) cleanNode(node) @@ -102,7 +148,7 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.initialDefinition !== undefined) { - deleteInitialDefinition(node.initialDefinition) + deleteInitialDefinition(node.initialDefinition, rootNodes) } destroyPart(node) cleanNode(node) @@ -116,10 +162,10 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.stopLoss !== undefined) { - deleteManagedItem(node.stopLoss) + deleteManagedItem(node.stopLoss, rootNodes) } if (node.takeProfit !== undefined) { - deleteManagedItem(node.takeProfit) + deleteManagedItem(node.takeProfit, rootNodes) } destroyPart(node) cleanNode(node) @@ -144,10 +190,10 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.stopLoss !== undefined) { - deleteManagedItem(node.stopLoss) + deleteManagedItem(node.stopLoss, rootNodes) } if (node.takeProfit !== undefined) { - deleteManagedItem(node.takeProfit) + deleteManagedItem(node.takeProfit, rootNodes) } destroyPart(node) cleanNode(node) @@ -179,7 +225,7 @@ function newNodeDeleter () { } while (node.situations.length > 0) { - deleteSituation(node.situations[0]) + deleteSituation(node.situations[0], rootNodes) } destroyPart(node) cleanNode(node) @@ -258,7 +304,7 @@ function newNodeDeleter () { if (situation.id === node.id) { while (situation.conditions.length > 0) { let condition = situation.conditions[0] - deleteCondition(condition) + deleteCondition(condition, rootNodes) } situation.conditions = [] payload.parentNode.situations.splice(j, 1) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index b623c2b17..6c67f1d53 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -2,9 +2,12 @@ function newPartsFromNodes () { thisObject = { createPartFromNode: createPartFromNode, newStrategy: newStrategy, + addParameters: addParameters, + addMissingParameters: addMissingParameters, addMissingStages: addMissingStages, addMissingEvents: addMissingEvents, addMissingItems: addMissingItems, + addPositionSize: addPositionSize, addInitialDefinition: addInitialDefinition, addPhase: addPhase, addFormula: addFormula, @@ -264,6 +267,29 @@ function newPartsFromNodes () { createPart('Take Profit', 'Initial Take Profit', strategy.openStage.initialDefinition.takeProfit, strategy.openStage.initialDefinition, strategy.openStage.initialDefinition) } + function addParameters (node) { + if (node.parameters === undefined) { + node.parameters = { + name: 'Parameters' + } + createPart('Parameters', '', node.parameters, node, node) + addMissingParameters(node.parameters) + } + } + + function addMissingParameters (node) { + if (node.baseAsset === undefined) { + node.baseAsset = { + name: 'Base Asset', + formula: { + code: DEFAULT_FORMULA_TEXT + } + } + createPart('Base Asset', '', node.baseAsset, node, node) + createPart('Formula', '', node.baseAsset.formula, node.baseAsset, node.baseAsset) + } + } + function addMissingStages (node) { if (node.triggerStage === undefined) { node.triggerStage = { @@ -339,6 +365,19 @@ function newPartsFromNodes () { } } + function addPositionSize (node) { + if (node.positionSize === undefined) { + node.positionSize = { + name: 'Position Size', + formula: { + code: DEFAULT_FORMULA_TEXT + } + } + createPart('Position Size', '', node.positionSize, node, node) + createPart('Formula', '', node.positionSize.formula, node.positionSize, node.positionSize) + } + } + function addMissingItems (node) { if (node.type === 'Initial Definition') { if (node.stopLoss === undefined) { diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index be8aaab73..3107151f9 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -169,6 +169,16 @@ function newWorkspace () { functionLibraryPartsFromNodes.newStrategy(payload.node) } break + case 'Add Parameters': + { + functionLibraryPartsFromNodes.addParameters(payload.node) + } + break + case 'Add Missing Parameters': + { + functionLibraryPartsFromNodes.addMissingParameters(payload.node) + } + break case 'Add Missing Stages': { functionLibraryPartsFromNodes.addMissingStages(payload.node) @@ -179,6 +189,11 @@ function newWorkspace () { functionLibraryPartsFromNodes.addMissingEvents(payload.node) } break + case 'Add Position Size': + { + functionLibraryPartsFromNodes.addPositionSize(payload.node) + } + break case 'Add Missing Items': { functionLibraryPartsFromNodes.addMissingItems(payload.node) @@ -223,6 +238,14 @@ function newWorkspace () { functionLibraryNodeDeleter.deleteTradingSystem(payload.node, rootNodes) break } + case 'Delete Parameters': { + functionLibraryNodeDeleter.deleteParameters(payload.node, rootNodes) + break + } + case 'Delete Base Asset': { + functionLibraryNodeDeleter.deleteBaseAsset(payload.node, rootNodes) + break + } case 'Delete Strategy': { functionLibraryNodeDeleter.deleteStrategy(payload.node, rootNodes) break @@ -243,6 +266,10 @@ function newWorkspace () { functionLibraryNodeDeleter.deleteCloseStage(payload.node, rootNodes) break } + case 'Delete Position Size': { + functionLibraryNodeDeleter.deletePositionSize(payload.node, rootNodes) + break + } case 'Delete Initial Definition': { functionLibraryNodeDeleter.deleteInitialDefinition(payload.node, rootNodes) break