From 169675c19af66e326fa9ec4ca4fba442fa255b75 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 13 Sep 2020 10:21:18 +0200 Subject: [PATCH] Trading Mining --- .../FunctionLibraries/TaskFunctions.js | 86 ++++++++++++++++++- .../FunctionLibraries/UiObjectsFromNodes.js | 38 +++++++- DesignSpace/Workspace/Workspace.js | 10 +++ 3 files changed, 126 insertions(+), 8 deletions(-) diff --git a/DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js b/DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js index 8bedc60b3..e8d0b5139 100644 --- a/DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js +++ b/DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js @@ -11,7 +11,9 @@ function newTaskFunctions() { runAllExchangeTradingTasks: runAllExchangeTradingTasks, stopAllExchangeTradingTasks: stopAllExchangeTradingTasks, addMissingExchangeDataTasks: addMissingExchangeDataTasks, - addMissingMarketDataTasks: addMissingMarketDataTasks + addMissingMarketDataTasks: addMissingMarketDataTasks, + addMissingDataMineTasks: addMissingDataMineTasks, + addAllTasks: addAllTasks } return thisObject @@ -35,7 +37,7 @@ function newTaskFunctions() { 'Indicator Bot Instance->Time Frames Filter->' + 'Trading Bot Instance->' + 'Sensor Process Instance->Indicator Process Instance->Trading Process Instance->' + - 'Market Reference->Execution Started Event->' + + 'Execution Started Event->' + 'Key Reference->Exchange Account Key->' + 'Market->Exchange Markets->Crypto Exchange->' + 'Market Base Asset->Market Quoted Asset->Asset->' + @@ -79,7 +81,7 @@ function newTaskFunctions() { 'Indicator Bot Instance->Sensor Bot Instance->Trading Bot Instance->' + 'Indicator Process Instance->Sensor Process Instance->Trading Process Instance->' + 'Paper Trading Session->Forward Testing Session->Backtesting Session->Live Trading Session->' + - 'Market Reference->Market->' + + 'Market->' + 'Process Definition->' let networkDefinition = functionLibraryProtocolNode.getProtocolNode(networkNode.payload.parentNode, false, true, true, false, false, networkLightingPath) @@ -263,7 +265,7 @@ function newTaskFunctions() { for (let i = 0; i < rootNodes.length; i++) { let rootNode = rootNodes[i] if (rootNode.type === 'Crypto Ecosystem') { - cryptoEcosystem = rootNode + let cryptoEcosystem = rootNode for (let j = 0; j < cryptoEcosystem.cryptoExchanges.length; j++) { let cryptoExchanges = cryptoEcosystem.cryptoExchanges[j] for (let k = 0; k < cryptoExchanges.exchanges.length; k++) { @@ -294,4 +296,80 @@ function newTaskFunctions() { } } } + + function addMissingDataMineTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { + for (let i = 0; i < rootNodes.length; i++) { + let rootNode = rootNodes[i] + if (rootNode.type === 'Data Mine') { + let dataMine = rootNode + + if (isMissingChildren(node, dataMine, true) === true) { + let dataMineTasks = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Data Mine Tasks') + dataMineTasks.payload.referenceParent = dataMine + } + } + } + } + + function addAllTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { + if (node.payload === undefined) { return } + if (node.payload.referenceParent === undefined) { return } + + let dataMine = node.payload.referenceParent + + let taskManager = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Task Manager') + + addTasksForBotArray(dataMine.sensorBots) + addTasksForBotArray(dataMine.indicatorBots) + + function addTasksForBotArray(botsArray) { + for (let i = 0; i < botsArray.length; i++) { + let bot = botsArray[i] + + let task = functionLibraryUiObjectsFromNodes.addUIObject(taskManager, 'Task') + task.name = bot.name + + let botInstance + switch (bot.type) { + case 'Sensor Bot': { + botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Sensor Bot Instance') + botInstance.name = bot.name + break + } + case 'Indicator Bot': { + botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Indicator Bot Instance') + botInstance.name = bot.name + break + } + case 'Trading Bot': { + botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Trading Bot Instance') + botInstance.name = bot.name + break + } + } + + for (let j = 0; j < bot.processes.length; j++) { + let process = bot.processes[j] + let processInstance + switch (bot.type) { + case 'Sensor Bot': { + processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Sensor Process Instance') + processInstance.payload.referenceParent = process + break + } + case 'Indicator Bot': { + processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Indicator Process Instance') + processInstance.payload.referenceParent = process + break + } + case 'Trading Bot': { + processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Trading Process Instance') + processInstance.payload.referenceParent = process + break + } + } + } + } + } + } } diff --git a/DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js b/DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js index 9f6094a2f..417c88a7e 100644 --- a/DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js +++ b/DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js @@ -59,6 +59,7 @@ function newUiObjectsFromNodes() { function addIncludedNodes(includedNames) { let blobService = newFileStorage() let includedDataMines = includedNames.includedDataMines + let includedTradingMines = includedNames.includedTradingMines let includedTradingSystems = includedNames.includedTradingSystems let includedSuperScripts = includedNames.includedSuperScripts let includedTradingEngines = includedNames.includedTradingEngines @@ -88,7 +89,36 @@ function newUiObjectsFromNodes() { receivedNode.isIncluded = true node.rootNodes.unshift(receivedNode) totalIncluded++ - if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length) { + if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) { + addUserDefinedNodes() + } + } + } + + for (let i = 0; i < includedTradingMines.length; i++) { + let name = includedTradingMines[i] + blobService.getFileFromHost('TradingMines' + '/' + name, onFileReceived, true) + function onFileReceived(err, text, response) { + if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + console.log('Cannot load included Trading Mine ' + name + '. The workspace can not be loaded.') + return + } + let receivedNode = JSON.parse(text) + for (let i = 0; i < node.rootNodes.length; i++) { + let rootNode = node.rootNodes[i] + if (rootNode.type === 'Trading Mine') { + if (rootNode.config !== undefined) { + let config = JSON.parse(rootNode.config) + if (config.name === name) { + rootNodes.splice(i, 1) + } + } + } + } + receivedNode.isIncluded = true + node.rootNodes.unshift(receivedNode) + totalIncluded++ + if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) { addUserDefinedNodes() } } @@ -117,7 +147,7 @@ function newUiObjectsFromNodes() { receivedNode.isIncluded = true node.rootNodes.unshift(receivedNode) totalIncluded++ - if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length) { + if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) { addUserDefinedNodes() } } @@ -146,7 +176,7 @@ function newUiObjectsFromNodes() { receivedNode.isIncluded = true node.rootNodes.unshift(receivedNode) totalIncluded++ - if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length) { + if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) { addUserDefinedNodes() } } @@ -172,7 +202,7 @@ function newUiObjectsFromNodes() { receivedNode.isIncluded = true node.rootNodes.unshift(receivedNode) totalIncluded++ - if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length) { + if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) { addUserDefinedNodes() } } diff --git a/DesignSpace/Workspace/Workspace.js b/DesignSpace/Workspace/Workspace.js index a9d80f2d9..a9e26aa43 100644 --- a/DesignSpace/Workspace/Workspace.js +++ b/DesignSpace/Workspace/Workspace.js @@ -621,6 +621,16 @@ function newWorkspace() { functionLibraryTaskFunctions.addMissingMarketDataTasks(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes) } break + case 'Add Missing Data Mine Tasks': + { + functionLibraryTaskFunctions.addMissingDataMineTasks(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes) + } + break + case 'Add All Tasks': + { + functionLibraryTaskFunctions.addAllTasks(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes) + } + break case 'Add Missing Crypto Exchanges': { functionLibraryCCXTFunctions.addMissingExchanges(payload.node, functionLibraryUiObjectsFromNodes)