384 lines
10 KiB
JavaScript
384 lines
10 KiB
JavaScript
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,
|
|
deletePhase: deletePhase,
|
|
deleteFormula: deleteFormula,
|
|
deleteSituation: deleteSituation,
|
|
deleteCondition: deleteCondition,
|
|
deleteCode: deleteCode
|
|
}
|
|
|
|
return thisObject
|
|
|
|
function destroyPart (node) {
|
|
canvas.floatingSpace.strategyPartConstructor.destroyStrategyPart(node.payload)
|
|
}
|
|
|
|
function deleteTradingSystem (node, rootNodes) {
|
|
/* Can not delete if it is the last one */
|
|
let counter = 0
|
|
for (let i = 0; i < rootNodes.length; i++) {
|
|
let rootNode = rootNodes[i]
|
|
if (rootNode.type === node.type) {
|
|
counter++
|
|
}
|
|
}
|
|
if (counter <= 1) { return }
|
|
|
|
if (node.payload.uiObject.isRunning === true) {
|
|
strategyPart.setNotRunningStatus()
|
|
}
|
|
|
|
while (node.strategies.length > 0) {
|
|
deleteStrategy(node.strategies[0], rootNodes)
|
|
}
|
|
|
|
completeDeletion(node, rootNodes)
|
|
destroyPart(node)
|
|
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) {
|
|
for (let j = 0; j < payload.parentNode.strategies.length; j++) {
|
|
let strategy = payload.parentNode.strategies[j]
|
|
if (strategy.id === node.id) {
|
|
payload.parentNode.strategies.splice(j, 1)
|
|
}
|
|
}
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.triggerStage !== undefined) {
|
|
deleteTriggerStage(node.triggerStage, rootNodes)
|
|
}
|
|
if (node.openStage !== undefined) {
|
|
deleteOpenStage(node.openStage, rootNodes)
|
|
}
|
|
if (node.manageStage !== undefined) {
|
|
deleteManageStage(node.manageStage, rootNodes)
|
|
}
|
|
if (node.closeStage !== undefined) {
|
|
deleteCloseStage(node.closeStage, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteTriggerStage (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.triggerStage = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.triggerOn !== undefined) {
|
|
deleteEvent(node.triggerOn, rootNodes)
|
|
}
|
|
if (node.triggerOff !== undefined) {
|
|
deleteEvent(node.triggerOff, rootNodes)
|
|
}
|
|
if (node.takePosition !== undefined) {
|
|
deleteEvent(node.takePosition, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteOpenStage (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.openStage = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.initialDefinition !== undefined) {
|
|
deleteInitialDefinition(node.initialDefinition, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteManageStage (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.manageStage = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.stopLoss !== undefined) {
|
|
deleteManagedItem(node.stopLoss, rootNodes)
|
|
}
|
|
if (node.takeProfit !== undefined) {
|
|
deleteManagedItem(node.takeProfit, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteCloseStage (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.closeStage = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteInitialDefinition (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.initialDefinition = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.stopLoss !== undefined) {
|
|
deleteManagedItem(node.stopLoss, rootNodes)
|
|
}
|
|
if (node.takeProfit !== undefined) {
|
|
deleteManagedItem(node.takeProfit, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteEvent (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
switch (node.type) {
|
|
case 'Trigger On Event': {
|
|
payload.parentNode.triggerOn = undefined
|
|
break
|
|
}
|
|
case 'Trigger Off Event': {
|
|
payload.parentNode.triggerOff = undefined
|
|
break
|
|
}
|
|
case 'Take Position Event': {
|
|
payload.parentNode.takePosition = undefined
|
|
break
|
|
}
|
|
case 'Next Phase Event': {
|
|
payload.parentNode.nextPhaseEvent = undefined
|
|
break
|
|
}
|
|
}
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
|
|
while (node.situations.length > 0) {
|
|
deleteSituation(node.situations[0], rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteManagedItem (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
switch (node.type) {
|
|
case 'Stop': {
|
|
payload.parentNode.stopLoss = undefined
|
|
break
|
|
}
|
|
case 'Take Profit': {
|
|
payload.parentNode.takeProfit = undefined
|
|
break
|
|
}
|
|
}
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
|
|
while (node.phases.length > 0) {
|
|
deletePhase(node.phases[0])
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deletePhase (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
for (let k = 0; k < payload.parentNode.phases.length; k++) {
|
|
let phase = payload.parentNode.phases[k]
|
|
if (phase.id === node.id) {
|
|
/* Before deleting this phase we need to give its chainParent to the next phase down the chain */
|
|
if (k < payload.parentNode.phases.length - 1) {
|
|
payload.parentNode.phases[k + 1].payload.chainParent = payload.chainParent
|
|
}
|
|
/* Continue destroying this phase */
|
|
payload.parentNode.phases.splice(k, 1)
|
|
}
|
|
}
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
|
|
if (node.formula !== undefined) {
|
|
deleteFormula(node.formula, rootNodes)
|
|
}
|
|
|
|
if (node.nextPhaseEvent !== undefined) {
|
|
deleteEvent(node.nextPhaseEvent, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteFormula (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.formula = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteSituation (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
for (let j = 0; j < payload.parentNode.situations.length; j++) {
|
|
let situation = payload.parentNode.situations[j]
|
|
if (situation.id === node.id) {
|
|
while (situation.conditions.length > 0) {
|
|
let condition = situation.conditions[0]
|
|
deleteCondition(condition, rootNodes)
|
|
}
|
|
situation.conditions = []
|
|
payload.parentNode.situations.splice(j, 1)
|
|
destroyPart(situation)
|
|
cleanNode(situation)
|
|
return
|
|
}
|
|
}
|
|
} else {
|
|
while (node.conditions.length > 0) {
|
|
let condition = node.conditions[0]
|
|
deleteCondition(condition)
|
|
}
|
|
node.conditions = []
|
|
completeDeletion(node, rootNodes)
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
}
|
|
|
|
function deleteCondition (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
for (let i = 0; i < payload.parentNode.conditions.length; i++) {
|
|
let condition = payload.parentNode.conditions[i]
|
|
if (condition.id === node.id) {
|
|
payload.parentNode.conditions.splice(i, 1)
|
|
}
|
|
}
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
if (node.code !== undefined) {
|
|
deleteCode(node.code, rootNodes)
|
|
}
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteCode (node, rootNodes) {
|
|
let payload = node.payload
|
|
if (payload.parentNode !== undefined) {
|
|
payload.parentNode.code = undefined
|
|
} else {
|
|
completeDeletion(node, rootNodes)
|
|
}
|
|
|
|
destroyPart(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function completeDeletion (node, rootNodes) {
|
|
for (let i = 0; i < rootNodes.length; i++) {
|
|
let rootNode = rootNodes[i]
|
|
if (rootNode.id === node.id) {
|
|
rootNodes.splice(i, 1)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanNode (node) {
|
|
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
|
|
node.payload.chainParent = undefined
|
|
node.payload.onMenuItemClick = undefined
|
|
node.handle = undefined
|
|
node.payload = undefined
|
|
node.cleaned = true
|
|
}
|
|
}
|