Files
Superalgos/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js
T

957 lines
44 KiB
JavaScript

function newFoundationsFunctionLibraryTaskFunctions() {
let thisObject = {
syncronizeTaskWithBackEnd: syncronizeTaskWithBackEnd,
runTask: runTask,
stopTask: stopTask,
runAllTasks: runAllTasks,
stopAllTasks: stopAllTasks,
runAllTaskManagers: runAllTaskManagers,
stopAllTaskManagers: stopAllTaskManagers,
runAllProjectDataTasks: runAllProjectDataTasks,
stopAllProjectDataTasks: stopAllProjectDataTasks,
runAllProjectTradingTasks: runAllProjectTradingTasks,
stopAllProjectTradingTasks: stopAllProjectTradingTasks,
runAllProjectLearningTasks: runAllProjectLearningTasks,
stopAllProjectLearningTasks: stopAllProjectLearningTasks,
runAllExchangeDataTasks: runAllExchangeDataTasks,
stopAllExchangeDataTasks: stopAllExchangeDataTasks,
runAllExchangeTradingTasks: runAllExchangeTradingTasks,
stopAllExchangeTradingTasks: stopAllExchangeTradingTasks,
runAllExchangeLearningTasks: runAllExchangeLearningTasks,
stopAllExchangeLearningTasks: stopAllExchangeLearningTasks,
runAllMarketDataTasks: runAllMarketDataTasks,
stopAllMarketDataTasks: stopAllMarketDataTasks,
runAllMarketTradingTasks: runAllMarketTradingTasks,
stopAllMarketTradingTasks: stopAllMarketTradingTasks,
runAllMarketLearningTasks: runAllMarketLearningTasks,
stopAllMarketLearningTasks: stopAllMarketLearningTasks,
runAllDataMineTasks: runAllDataMineTasks,
stopAllDataMineTasks: stopAllDataMineTasks,
runAllTradingMineTasks: runAllTradingMineTasks,
stopAllTradingMineTasks: stopAllTradingMineTasks,
runAllLearningMineTasks: runAllLearningMineTasks,
stopAllLearningMineTasks: stopAllLearningMineTasks,
addMissingProjectDataTasks: addMissingProjectDataTasks,
addMissingExchangeDataTasks: addMissingExchangeDataTasks,
addMissingMarketDataTasks: addMissingMarketDataTasks,
addMissingDataMineTasks: addMissingDataMineTasks,
addMissingProjectTradingTasks: addMissingProjectTradingTasks,
addMissingExchangeTradingTasks: addMissingExchangeTradingTasks,
addMissingMarketTradingTasks: addMissingMarketTradingTasks,
addMissingTradingMineTasks: addMissingTradingMineTasks,
addMissingProjectLearningTasks: addMissingProjectLearningTasks,
addMissingExchangeLearningTasks: addMissingExchangeLearningTasks,
addMissingMarketLearningTasks: addMissingMarketLearningTasks,
addMissingLearningMineTasks: addMissingLearningMineTasks,
addAllTasks: addAllTasks
}
return thisObject
function syncronizeTaskWithBackEnd(node) {
let lanNetworkNode = validations(node)
if (lanNetworkNode === undefined) {
/* Nodes that do not belong to a network can not get ready. */
return
}
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
/* First we setup everything so as to listen to the response from the Task Manger */
let eventSubscriptionIdOnStatus
let key = 'Task Client - ' + node.id
eventsServerClient.listenToEvent(key, 'Task Status', undefined, node.id, onResponse, onStatus)
function onResponse(message) {
eventSubscriptionIdOnStatus = message.eventSubscriptionId
}
function onStatus(message) {
eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id)
if (message.event.status === 'Task Process Running') {
node.payload.uiObject.menu.internalClick('Run Task')
}
}
/* Second we ask the Task Manager if this Task has a process Running. */
let event = {
taskId: node.id
}
eventsServerClient.raiseEvent('Task Manager', 'Task Status', event)
}
function runTask(node, isDebugging, callBackFunction) {
let lanNetworkNode = validations(node)
if (lanNetworkNode === undefined) {
/* This means that the validations failed. */
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
return
}
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
for (let i = 0; i < node.bot.processes.length; i++) {
let process = node.bot.processes[i]
process.payload.uiObject.run(eventsServerClient)
if (process.session !== undefined) {
process.session.payload.uiObject.reset()
}
}
let taskLightingPath = '->Task->' +
'Sensor Bot Instance->' +
'API Data Fetcher Bot Instance->' +
'Indicator Bot Instance->Time Frames Filter->' +
'Trading Bot Instance->' +
'Learning Bot Instance->' +
'Sensor Process Instance->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' +
'Execution Started Event->' +
'Key Reference->Exchange Account Key->' +
'Task Manager->' +
'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' +
'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->' +
'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->' +
'Market->Exchange Markets->Crypto Exchange->' +
'Market Base Asset->Market Quoted Asset->Asset->' +
'Project Data Tasks->Project Trading Tasks->Project Learning Tasks->Project Definition->' +
'Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->' +
'Back Learning Session->Live Learning Session->' +
'Process Definition->' +
'Process Output->' +
'Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->' +
'Output Dataset->Dataset Definition->Product Definition->API Query Parameters->API Query Parameter->API Path Parameters->API Path Parameter->' +
'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' +
'Process Dependencies->' +
'Status Dependency->Status Report->Process Definition->' +
'Data Mine Data Dependencies->Bot Data Dependencies->' +
'Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->' +
'Data Dependency->Dataset Definition->Product Definition->' +
'Record Definition->Record Property->Record Formula->' +
'API Response Field Reference->' +
'API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->' +
'API Response Schema->API Query Response->API Query Responses->API Endpoint->' +
'Data Building Procedure->' +
'Procedure Initialization->Procedure Javascript Code->' +
'Procedure Loop->Procedure Javascript Code->' +
'Calculations Procedure->' +
'Procedure Initialization->Procedure Javascript Code->' +
'Procedure Loop->Procedure Javascript Code->' +
'Status Report->' +
'Execution Finished Event->' +
'Execution Started Event->Execution Finished Event->Process Definition->' +
'Sensor Bot->' +
'API Data Fetcher Bot->' +
'Indicator Bot->' +
'Trading Bot->' +
'Learning Bot->' +
'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' +
'Data Mine->Trading Mine->Learning Mine->' +
'API Map Reference->' +
'API Map->API Version->API Endpoint->API Query Parameters->API Query Parameter->API Path Parameters->API Path Parameter->API Query Responses->API Query Response->API Response Schema->' +
'API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->API Response Field->'
let taskDefinition = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, taskLightingPath)
let networkLightingPath = '->LAN Network->LAN Network Node->' +
'Data Storage->' +
'Data Mines Data->Trading Mines Data->Learning Mines Data->' +
'Project Data Products->Project Trading Products->Project Learning Products->' +
'Exchange Data Products->Exchange Trading Products->Exchange Learning Products->' +
'Market Data Products->Market Trading Products->Market Learning Products->' +
'Market->Market Base Asset->Market Quoted Asset->Asset->' +
'Exchange Markets->Crypto Exchange->' +
'Data Mine Products->Bot Products->' +
'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' +
'Data Product->Product Definition->' +
'Data Tasks->Learning Tasks->Testing Trading Tasks->Production Trading Tasks->' +
'Project Data Tasks->Project Trading Tasks->Project Learning Tasks->' +
'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->Crypto Exchange->' +
'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->Market->' +
'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' +
'Task Manager->Task->' +
'Indicator Bot Instance->Sensor Bot Instance->API Data Fetcher Bot Instance->Trading Bot Instance->Learning Bot Instance->' +
'Indicator Process Instance->Sensor Process Instance->API Data Fetcher Process Instance->Trading Process Instance->Learning Process Instance->' +
'Paper Trading Session->Forward Testing Session->Backtesting Session->Live Trading Session->Back Learning Session->Live Learning Session->' +
'API Map Reference->' +
'Market->' +
'Process Definition->'
let networkDefinition = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(lanNetworkNode.payload.parentNode, false, true, true, false, false, networkLightingPath)
/*
We will also send all the project schemas we have to the Task Server.
*/
let projectSchemas = []
for (let k = 0; k < PROJECTS_SCHEMA.length; k++) {
let projectDefinition = PROJECTS_SCHEMA[k]
let project = {
name: projectDefinition.name,
schema: SCHEMAS_BY_PROJECT.get(projectDefinition.name).array.appSchema
}
projectSchemas.push(project)
}
let event = {
projectSchemas: JSON.stringify(projectSchemas),
taskId: node.id,
taskName: node.name,
taskDefinition: JSON.stringify(taskDefinition),
networkDefinition: JSON.stringify(networkDefinition)
}
if (isDebugging === true) {
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE)
eventsServerClient.raiseEvent('Task Server', 'Debug Task Started', event)
return
}
node.payload.uiObject.run(eventsServerClient, callBackFunction)
eventsServerClient.raiseEvent('Task Manager', 'Run Task', event)
}
function stopTask(node, callBackFunction) {
let lanNetworkNode = validations(node)
if (lanNetworkNode === undefined) {
/* This means that the validations failed. */
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
return
}
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
let event = {
taskId: node.id,
taskName: node.name
}
node.payload.uiObject.stop(callBackFunction, undefined, true)
eventsServerClient.raiseEvent('Task Manager', 'Stop Task', event)
if (node.bot === undefined) { return }
if (node.bot.processes.length === 0) { return }
for (let i = 0; i < node.bot.processes.length; i++) {
let process = node.bot.processes[i]
process.payload.uiObject.stop(undefined, undefined, true)
if (process.session !== undefined) {
process.session.payload.uiObject.reset()
}
}
}
function validations(node) {
if (node.bot === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to have a Bot Instance.')
return
}
if (node.bot.processes.length === 0) {
node.payload.uiObject.setErrorMessage('Task Bot Instance needs to have al least once Process Instance.')
return
}
if (node.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside a Task Manager.')
return
}
let taskManager = node.payload.parentNode
if (taskManager.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside Mine Tasks.')
return
}
if (taskManager.payload.parentNode.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside Market Tasks.')
return
}
if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside Exchange Tasks.')
return
}
if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside a Data Tasks, Learning Tasks, Testing or Production Trading Tasks node.')
return
}
if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) {
node.payload.uiObject.setErrorMessage('Task needs to be inside a Network Node.')
return
}
let lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(taskManager, 'LAN Network Node', undefined, true, false, true, false)
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'host') === undefined) {
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid Host property at its config.')
return
}
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'webPort') === undefined) {
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webPort property at its config.')
return
}
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'webSocketsPort') === undefined) {
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webSocketsPort property at its config.')
return
}
return lanNetworkNode
}
function runAllTasks(taskManager) {
for (let i = 0; i < taskManager.tasks.length; i++) {
let node = taskManager.tasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run Task')
}
}
function stopAllTasks(taskManager) {
for (let i = 0; i < taskManager.tasks.length; i++) {
let node = taskManager.tasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop Task')
}
}
function runAllTaskManagers(parent) {
for (let i = 0; i < parent.taskManagers.length; i++) {
let node = parent.taskManagers[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Tasks')
menu.internalClick('Run All Tasks')
}
}
function stopAllTaskManagers(parent) {
for (let i = 0; i < parent.taskManagers.length; i++) {
let node = parent.taskManagers[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Tasks')
menu.internalClick('Stop All Tasks')
}
}
function runAllProjectDataTasks(parent) {
for (let i = 0; i < parent.projectDataTasks.length; i++) {
let node = parent.projectDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Exchange Data Tasks')
menu.internalClick('Run All Exchange Data Tasks')
}
}
function stopAllProjectDataTasks(parent) {
for (let i = 0; i < parent.projectDataTasks.length; i++) {
let node = parent.projectDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Exchange Data Tasks')
menu.internalClick('Stop All Exchange Data Tasks')
}
}
function runAllProjectTradingTasks(parent) {
for (let i = 0; i < parent.projectTradingTasks.length; i++) {
let node = parent.projectTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Exchange Trading Tasks')
menu.internalClick('Run All Exchange Trading Tasks')
}
}
function stopAllProjectTradingTasks(parent) {
for (let i = 0; i < parent.projectTradingTasks.length; i++) {
let node = parent.projectTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Exchange Trading Tasks')
menu.internalClick('Stop All Exchange Trading Tasks')
}
}
function runAllProjectLearningTasks(parent) {
for (let i = 0; i < parent.projectLearningTasks.length; i++) {
let node = parent.projectLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Exchange Learning Tasks')
menu.internalClick('Run All Exchange Learning Tasks')
}
}
function stopAllProjectLearningTasks(parent) {
for (let i = 0; i < parent.projectLearningTasks.length; i++) {
let node = parent.projectLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Exchange Learning Tasks')
menu.internalClick('Stop All Exchange Learning Tasks')
}
}
function runAllExchangeDataTasks(parent) {
for (let i = 0; i < parent.exchangeDataTasks.length; i++) {
let node = parent.exchangeDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Market Data Tasks')
menu.internalClick('Run All Market Data Tasks')
}
}
function stopAllExchangeDataTasks(parent) {
for (let i = 0; i < parent.exchangeDataTasks.length; i++) {
let node = parent.exchangeDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Market Data Tasks')
menu.internalClick('Stop All Market Data Tasks')
}
}
function runAllExchangeTradingTasks(parent) {
for (let i = 0; i < parent.exchangeTradingTasks.length; i++) {
let node = parent.exchangeTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Market Trading Tasks')
menu.internalClick('Run All Market Trading Tasks')
}
}
function stopAllExchangeTradingTasks(parent) {
for (let i = 0; i < parent.exchangeTradingTasks.length; i++) {
let node = parent.exchangeTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Market Trading Tasks')
menu.internalClick('Stop All Market Trading Tasks')
}
}
function runAllExchangeLearningTasks(parent) {
for (let i = 0; i < parent.exchangeLearningTasks.length; i++) {
let node = parent.exchangeLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Market Learning Tasks')
menu.internalClick('Run All Market Learning Tasks')
}
}
function stopAllExchangeLearningTasks(parent) {
for (let i = 0; i < parent.exchangeLearningTasks.length; i++) {
let node = parent.exchangeLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Market Learning Tasks')
menu.internalClick('Stop All Market Learning Tasks')
}
}
function runAllMarketDataTasks(parent) {
for (let i = 0; i < parent.marketDataTasks.length; i++) {
let node = parent.marketDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Data Mine Tasks')
menu.internalClick('Run All Data Mine Tasks')
}
}
function stopAllMarketDataTasks(parent) {
for (let i = 0; i < parent.marketDataTasks.length; i++) {
let node = parent.marketDataTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Data Mine Tasks')
menu.internalClick('Stop All Data Mine Tasks')
}
}
function runAllMarketTradingTasks(parent) {
for (let i = 0; i < parent.marketTradingTasks.length; i++) {
let node = parent.marketTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Trading Mine Tasks')
menu.internalClick('Run All Trading Mine Tasks')
}
}
function runAllMarketLearningTasks(parent) {
for (let i = 0; i < parent.marketLearningTasks.length; i++) {
let node = parent.marketLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Learning Mine Tasks')
menu.internalClick('Run All Learning Mine Tasks')
}
}
function stopAllMarketTradingTasks(parent) {
for (let i = 0; i < parent.marketTradingTasks.length; i++) {
let node = parent.marketTradingTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Trading Mine Tasks')
menu.internalClick('Stop All Trading Mine Tasks')
}
}
function stopAllMarketLearningTasks(parent) {
for (let i = 0; i < parent.marketLearningTasks.length; i++) {
let node = parent.marketLearningTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Learning Mine Tasks')
menu.internalClick('Stop All Learning Mine Tasks')
}
}
function runAllDataMineTasks(parent) {
for (let i = 0; i < parent.dataMineTasks.length; i++) {
let node = parent.dataMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Task Managers')
menu.internalClick('Run All Task Managers')
}
}
function stopAllDataMineTasks(parent) {
for (let i = 0; i < parent.dataMineTasks.length; i++) {
let node = parent.dataMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Task Managers')
menu.internalClick('Stop All Task Managers')
}
}
function runAllTradingMineTasks(parent) {
for (let i = 0; i < parent.tradingMineTasks.length; i++) {
let node = parent.tradingMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Task Managers')
menu.internalClick('Run All Task Managers')
}
}
function runAllLearningMineTasks(parent) {
for (let i = 0; i < parent.learningMineTasks.length; i++) {
let node = parent.learningMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Run All Task Managers')
menu.internalClick('Run All Task Managers')
}
}
function stopAllTradingMineTasks(parent) {
for (let i = 0; i < parent.tradingMineTasks.length; i++) {
let node = parent.tradingMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Task Managers')
menu.internalClick('Stop All Task Managers')
}
}
function stopAllLearningMineTasks(parent) {
for (let i = 0; i < parent.learningMineTasks.length; i++) {
let node = parent.learningMineTasks[i]
let menu = node.payload.uiObject.menu
menu.internalClick('Stop All Task Managers')
menu.internalClick('Stop All Task Managers')
}
}
function addMissingProjectDataTasks(node, rootNodes) {
addMissingProjectTasks(node, rootNodes, 'Project Data Tasks', 'Data Tasks')
}
function addMissingProjectTradingTasks(node, rootNodes) {
addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks', 'Trading Tasks')
}
function addMissingProjectLearningTasks(node, rootNodes) {
addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks', 'Learning Tasks')
}
function addMissingProjectTasks(node, rootNodes, newNodeType, taskType) {
for (let k = 0; k < PROJECTS_SCHEMA.length; k++) {
let projectDefinition = PROJECTS_SCHEMA[k]
let project = projectDefinition.name
if (projectDefinition.tasks === undefined) { continue }
if (projectDefinition.tasks.includes(taskType) === false) { continue }
for (let j = 0; j < rootNodes.length; j++) {
let rootNode = rootNodes[j]
if (rootNode.type === project + ' Project') {
let projectDefinition = rootNode.projectDefinition
if (projectDefinition !== undefined) {
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) {
let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, node.project)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition)
}
}
}
}
}
}
function addMissingExchangeDataTasks(node, rootNodes) {
addMissingExchangeTasks(node, rootNodes, 'Exchange Data Tasks')
}
function addMissingExchangeTradingTasks(node, rootNodes) {
addMissingExchangeTasks(node, rootNodes, 'Exchange Trading Tasks')
}
function addMissingExchangeLearningTasks(node, rootNodes) {
addMissingExchangeTasks(node, rootNodes, 'Exchange Learning Tasks')
}
function addMissingExchangeTasks(node, rootNodes, newNodeType) {
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
if (rootNode.type === 'Crypto Ecosystem') {
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++) {
let cryptoExchange = cryptoExchanges.exchanges[k]
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, cryptoExchange, true) === true) {
let exchangeTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(exchangeTasks, cryptoExchange)
}
}
}
}
}
}
function addMissingMarketDataTasks(node) {
addMissingMarketTasks(node, 'Market Data Tasks')
}
function addMissingMarketTradingTasks(node) {
addMissingMarketTasks(node, 'Market Trading Tasks')
}
function addMissingMarketLearningTasks(node) {
addMissingMarketTasks(node, 'Market Learning Tasks')
}
function addMissingMarketTasks(node, newNodeType) {
if (node.payload === undefined) { return }
if (node.payload.referenceParent === undefined) { return }
if (node.payload.referenceParent.exchangeMarkets === undefined) { return }
let markets = node.payload.referenceParent.exchangeMarkets.markets
for (let i = 0; i < markets.length; i++) {
let market = markets[i]
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, market, true) === true) {
let marketDataTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(marketDataTasks, market)
}
}
}
function addMissingDataMineTasks(node, rootNodes) {
addMissingMineTasks(node, rootNodes, 'Data Mine', 'Data Mine Tasks')
}
function addMissingTradingMineTasks(node, rootNodes) {
addMissingMineTasks(node, rootNodes, 'Trading Mine', 'Trading Mine Tasks')
}
function addMissingLearningMineTasks(node, rootNodes) {
addMissingMineTasks(node, rootNodes, 'Learning Mine', 'Learning Mine Tasks')
}
function addMissingMineTasks(node, rootNodes, rootNodeType, newNodeType) {
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
if (rootNode.type === rootNodeType) {
let mine = rootNode
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, mine, true) === true) {
let dataMineTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dataMineTasks, mine)
}
}
}
}
function addAllTasks(node, rootNodes) {
if (node.payload === undefined) { return }
if (node.payload.referenceParent === undefined) { return }
let taskManager = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Task Manager')
taskManager.name = node.payload.referenceParent.name
taskManager.payload.floatingObject.collapseToggle()
switch (node.type) {
case 'Data Mine Tasks': {
addDataTasks()
break
}
case 'Learning Mine Tasks': {
addLearningTasks()
break
}
case 'Trading Mine Tasks': {
addTradingTasks()
break
}
}
function addDataTasks() {
addTasks()
}
function addLearningTasks() {
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
if (rootNode.type === 'Learning System') {
addTasks(rootNode)
}
}
}
function addTradingTasks() {
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
if (rootNode.type === 'Trading System') {
addTasks(rootNode)
}
}
}
function addTasks(systemNode) {
let mine = node.payload.referenceParent
addTasksForBotArray(mine.sensorBots)
addTasksForBotArray(mine.apiDataFetcherBots)
addTasksForBotArray(mine.indicatorBots)
addTasksForBotArray(mine.tradingBots)
addTasksForBotArray(mine.learningBots)
function addTasksForBotArray(botsArray) {
if (botsArray === undefined) { return }
for (let i = 0; i < botsArray.length; i++) {
let bot = botsArray[i]
let botInstance
switch (bot.type) {
case 'Sensor Bot': {
let task = addTask(taskManager)
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Sensor Bot Instance')
botInstance.name = bot.name
addProcessInstance(task, bot, botInstance)
break
}
case 'API Data Fetcher Bot': {
let task = addTask(taskManager)
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'API Data Fetcher Bot Instance')
botInstance.name = bot.name
addProcessInstance(task, bot, botInstance)
break
}
case 'Indicator Bot': {
let task = addTask(taskManager)
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Indicator Bot Instance')
botInstance.name = bot.name
addProcessInstance(task, bot, botInstance)
break
}
case 'Trading Bot': {
let task = addTask(taskManager)
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Trading Bot Instance')
botInstance.name = bot.name
addProcessInstance(task, bot, botInstance)
break
}
case 'Learning Bot': {
let task
/*
For Learning Bots we will add two Tasks, each one with a different
Session Type.
*/
task = addTask(taskManager)
task.name = 'Back ' + task.name
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Learning Bot Instance')
botInstance.name = 'Back ' + bot.name
addProcessInstance(task, bot, botInstance, 'Back Learning Session')
task = addTask(taskManager)
task.name = 'Live ' + task.name
botInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(task, 'Learning Bot Instance')
botInstance.name = 'Live ' + bot.name
addProcessInstance(task, bot, botInstance, 'Live Learning Session')
break
}
}
function addTask(taskManager) {
let task = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(taskManager, 'Task')
if (systemNode !== undefined) {
task.name = systemNode.name
} else {
task.name = bot.name
}
return task
}
function addProcessInstance(task, bot, botInstance, sessionType) {
for (let j = 0; j < bot.processes.length; j++) {
let process = bot.processes[j]
let processInstance
switch (bot.type) {
case 'Sensor Bot': {
processInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Sensor Process Instance')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance, process)
break
}
case 'API Data Fetcher Bot': {
processInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'API Data Fetcher Process Instance')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance, process)
/*
We will locate and reference the API MAP that has the same codeName than the data mine.
*/
let apiMaps = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('API Map')
for (let i = 0; i < apiMaps.length; i++) {
let apiMap = apiMaps[i]
let apiMapCodeName = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(apiMap.payload, 'codeName')
let mineCodeName = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(mine.payload, 'codeName')
if (apiMapCodeName === mineCodeName) {
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance.apiMapReference, apiMap)
break
}
}
break
}
case 'Indicator Bot': {
processInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Indicator Process Instance')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance, process)
break
}
case 'Trading Bot': {
processInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Trading Process Instance')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance, process)
if (node.payload.parentNode === undefined) { return }
if (node.payload.parentNode.payload === undefined) { return }
if (node.payload.parentNode.payload.parentNode === undefined) { return }
if (node.payload.parentNode.payload.parentNode.payload === undefined) { return }
if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return }
if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return }
let environment = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode
let session
switch (environment.type) {
case 'Testing Trading Tasks': {
addSession('Backtesting Session')
break
}
case 'Production Trading Tasks': {
addSession('Live Trading Session')
break
}
}
break
function addSession(sessionType) {
session = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(processInstance, sessionType)
session.name = task.name
let config = JSON.parse(session.config)
config.folderName = session.name.split(" ").join("-")
session.config = JSON.stringify(config)
for (let m = 0; m < rootNodes.length; m++) {
let rootNode = rootNodes[m]
if (rootNode.type === 'Trading Engine' && rootNode.isPlugin === true) {
let tradingEngine = rootNode
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(session.tradingEngineReference, tradingEngine)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(session.tradingSystemReference, systemNode)
}
}
}
}
case 'Learning Bot': {
processInstance = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(botInstance, 'Learning Process Instance')
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(processInstance, process)
let session
addSession(sessionType)
break
function addSession(sessionType) {
session = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(processInstance, sessionType)
session.name = task.name
let config = JSON.parse(session.config)
config.folderName = session.name.split(" ").join("-")
session.config = JSON.stringify(config)
for (let m = 0; m < rootNodes.length; m++) {
let rootNode = rootNodes[m]
if (rootNode.type === 'Learning Engine' && rootNode.isPlugin === true) {
let learningEngine = rootNode
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(session.learningEngineReference, learningEngine)
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(session.learningSystemReference, systemNode)
}
}
}
}
}
processInstance.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_90
}
}
}
}
}
}
}