Includes Implemented
This commit is contained in:
1 parent
c77b9af992
commit
e494dd8ad9
31 files changed
+681
-217
No files matched your search
@@ -13,11 +13,14 @@ TASK_SERVER_PATH=./TaskServer
|
||||
INTER_PROCESS_FILES_PATH=./Inter-Process-Files
|
||||
STORAGE_PATH=./Data-Storage
|
||||
PLOTTERS_PATH=./Legacy-Code
|
||||
DATA_MINES_PATH=./Data-Mines
|
||||
TRADING_MINES_PATH=./Trading-Mines
|
||||
TRADING_SYSTEMS_PATH=./Trading-Systems
|
||||
SUPER_SCRIPTS_PATH=./Super-Scripts
|
||||
TRADING_ENGINES_PATH=./Trading-Engines
|
||||
|
||||
DATA_MINES_PATH=./Includes/Data-Mines
|
||||
TRADING_MINES_PATH=./Includes/Trading-Mines
|
||||
TRADING_SYSTEMS_PATH=./Includes/Trading-Systems
|
||||
SUPER_SCRIPTS_PATH=./Includes/Super-Scripts
|
||||
TRADING_ENGINES_PATH=./Includes/Trading-Engines
|
||||
TUTORIALS_PATH=./Includes/Tutorials
|
||||
WORKSPACES_PATH=./Includes/Workspaces
|
||||
|
||||
WRITE_LOGS_TO_FILES=true
|
||||
BOTS_PATH=./Legacy-Code
|
||||
@@ -36,6 +39,6 @@ PATH_TO_FILES_COMPONENT=./Files-Component/src
|
||||
PATH_TO_WEB_SERVER=./BackendServers/
|
||||
|
||||
APP_SCHEMA_PATH=./
|
||||
WORKSPACE_PATH=./
|
||||
DEFAULT_WORKSPACE_PATH=./Includes/Workspaces
|
||||
MY_WORKSPACES_PATH=./My-Workspaces
|
||||
PATH_TO_FONTS=./BackendServers/WebServer/Fonts
|
||||
+278
-4
@@ -14299,22 +14299,296 @@
|
||||
{
|
||||
"name": "includedTradingSystems",
|
||||
"type": "node",
|
||||
"childType": "Included Trading Mines",
|
||||
"childType": "Included Trading Systems",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "includedTradingEngines",
|
||||
"type": "node",
|
||||
"childType": "Included Trading Mines",
|
||||
"childType": "Included Trading Engines",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "includedSuperScripts",
|
||||
"type": "node",
|
||||
"childType": "Included Trading Mines",
|
||||
"childType": "Included Super Scripts",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "includedTutorials",
|
||||
"type": "node",
|
||||
"childType": "Included Tutorials",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Data Mines",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Data Mines",
|
||||
"label": "Include Missing Data Mines",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Data Mine",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedDataMines",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Trading Mines",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Trading Mines",
|
||||
"label": "Include Missing Trading Mines",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Trading Mine",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedTradingMines",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Trading Systems",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Trading Systems",
|
||||
"label": "Include Missing Trading Systems",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Trading System",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedTradingSystems",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Trading Engines",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Trading Engines",
|
||||
"label": "Include Missing Trading Engines",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Trading Engine",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedTradingEngines",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Super Scripts",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Super Scripts",
|
||||
"label": "Include Missing Super Scripts",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Super Scripts",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedSuperScripts",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included Tutorials",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Include Missing Tutorials",
|
||||
"label": "Include Missing Tutorials",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Tutorial",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"propertyNameAtParent": "includedTutorials",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFiles",
|
||||
"type": "array",
|
||||
"childType": "Included File",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included File",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "includedFilePosition",
|
||||
"actionFunction": "payload.onMenuItemClick",
|
||||
"label": "Add Included File Position",
|
||||
"relatedUiObject": "Included File Position",
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"propertyNameAtParent": "includedFiles",
|
||||
"properties": [
|
||||
{
|
||||
"name": "includedFilePosition",
|
||||
"type": "node",
|
||||
"childType": "Included File Position",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Included File Position",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"actionFunction": "payload.onMenuItemClick"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Parent"
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"propertyNameAtParent": "includedFilePosition",
|
||||
"properties": [
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Tutorial",
|
||||
|
||||
@@ -57,7 +57,8 @@ function newAppLoader() {
|
||||
'DesignSpace/Workspace/FunctionLibraries/DataMineFunctions.js',
|
||||
'DesignSpace/Workspace/FunctionLibraries/DataStorageFunctions.js',
|
||||
'DesignSpace/Workspace/FunctionLibraries/ChartingSpaceFunctions.js',
|
||||
'DesignSpace/Workspace/FunctionLibraries/TutorialFunctions.js',
|
||||
'DesignSpace/Workspace/FunctionLibraries/TutorialFunctions.js',
|
||||
'DesignSpace/Workspace/FunctionLibraries/IncludesFunctions.js',
|
||||
|
||||
'Utilities/CoordinateTransformations.js',
|
||||
'Utilities/DateRateTransformations.js',
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
<script src="externalScripts/CCapture.all.min.js"></script>
|
||||
|
||||
<!-- Documentation Style Sheets -->
|
||||
<!--
|
||||
<!-- -->
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
-->
|
||||
|
||||
<script type="text/javascript">
|
||||
function loadCanvas() {
|
||||
try {
|
||||
@@ -42,9 +42,9 @@
|
||||
<div id="masterApp"></div>
|
||||
<div id="canvasApp"></div>
|
||||
<div id="docApp" style="position:fixed; top:100000px; left:100000px">
|
||||
<iframe id="docIFrame" style="border:none; " height="2000"
|
||||
<iframe id="docIFrame" style="border:none; " height="2000" src="https://julian-molina.github.io/Documentation/"
|
||||
width="900" ></iframe>
|
||||
</div> <!-- src="https://julian-molina.github.io/Documentation/" -->
|
||||
</div> <!-- -->
|
||||
<div id="textAreaDiv"></div>
|
||||
<div id="inputDiv" style="font-family:saira condensed;"> </div>
|
||||
|
||||
|
||||
+97
-51
@@ -454,38 +454,39 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
}
|
||||
break
|
||||
|
||||
case 'IncludedNames':
|
||||
case 'IncludedFileNames':
|
||||
{
|
||||
const fs = require('fs')
|
||||
let folder
|
||||
let includedNames = {
|
||||
includedDataMines: [],
|
||||
includedTradingMines: [],
|
||||
includedTradingSystems: [],
|
||||
includedSuperScripts: [],
|
||||
includedTradingEngines: []
|
||||
switch (requestParameters[2]) {
|
||||
case 'Data-Mines': {
|
||||
folder = process.env.DATA_MINES_PATH + '/'
|
||||
break
|
||||
}
|
||||
case 'Trading-Mines': {
|
||||
folder = process.env.TRADING_MINES_PATH + '/'
|
||||
break
|
||||
}
|
||||
case 'Trading-Systems': {
|
||||
folder = process.env.TRADING_SYSTEMS_PATH + '/'
|
||||
break
|
||||
}
|
||||
case 'Trading-Engines': {
|
||||
folder = process.env.TRADING_ENGINES_PATH + '/'
|
||||
break
|
||||
}
|
||||
case 'Super-Scripts': {
|
||||
folder = process.env.SUPER_SCRIPTS_PATH + '/'
|
||||
break
|
||||
}
|
||||
case 'Tutorials': {
|
||||
folder = process.env.TUTORIALS_PATH + '/'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
folder = process.env.DATA_MINES_PATH + '/'
|
||||
fs.readdir(folder, (err, files) => {
|
||||
includedNames.includedDataMines = files
|
||||
folder = process.env.TRADING_SYSTEMS_PATH + '/'
|
||||
fs.readdir(folder, (err, files) => {
|
||||
includedNames.includedTradingSystems = files
|
||||
folder = process.env.SUPER_SCRIPTS_PATH + '/'
|
||||
fs.readdir(folder, (err, files) => {
|
||||
includedNames.includedSuperScripts = files
|
||||
folder = process.env.TRADING_ENGINES_PATH + '/'
|
||||
fs.readdir(folder, (err, files) => {
|
||||
includedNames.includedTradingEngines = files
|
||||
folder = process.env.TRADING_MINES_PATH + '/'
|
||||
fs.readdir(folder, (err, files) => {
|
||||
includedNames.includedTradingMines = files
|
||||
respondWithContent(JSON.stringify(includedNames), response)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
respondWithContent(JSON.stringify(files), response)
|
||||
})
|
||||
}
|
||||
break
|
||||
@@ -517,7 +518,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
let fs = require('fs')
|
||||
|
||||
try {
|
||||
let filePath = process.env.WORKSPACE_PATH + 'Workspace.json'
|
||||
let filePath = process.env.DEFAULT_WORKSPACE_PATH + '/Default.json'
|
||||
fs.readFile(filePath, onFileRead)
|
||||
} catch (e) {
|
||||
console.log('[ERROR] Error reading the Workspace.', e)
|
||||
@@ -536,30 +537,60 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
|
||||
case 'ListWorkspaces':
|
||||
{
|
||||
let dirPath = process.env.MY_WORKSPACES_PATH
|
||||
let allWorkspaces = []
|
||||
readIncludedWorkspaces()
|
||||
function readIncludedWorkspaces() {
|
||||
let dirPath = process.env.WORKSPACES_PATH
|
||||
try {
|
||||
let fs = require('fs')
|
||||
fs.readdir(dirPath, onDirRead)
|
||||
|
||||
try {
|
||||
let fs = require('fs')
|
||||
|
||||
fs.readdir(dirPath, onDirRead)
|
||||
|
||||
function onDirRead(err, fileList) {
|
||||
if (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
} else {
|
||||
respondWithContent(JSON.stringify(fileList), response)
|
||||
return
|
||||
function onDirRead(err, fileList) {
|
||||
if (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
} else {
|
||||
let updatedFileList = []
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
let name = 'Included -> ' + fileList[i]
|
||||
updatedFileList.push(name)
|
||||
}
|
||||
allWorkspaces = allWorkspaces.concat(updatedFileList)
|
||||
readMyWorkspaces()
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
}
|
||||
|
||||
function readMyWorkspaces() {
|
||||
let dirPath = process.env.MY_WORKSPACES_PATH
|
||||
try {
|
||||
let fs = require('fs')
|
||||
fs.readdir(dirPath, onDirRead)
|
||||
|
||||
function onDirRead(err, fileList) {
|
||||
if (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
} else {
|
||||
allWorkspaces = allWorkspaces.concat(fileList)
|
||||
respondWithContent(JSON.stringify(allWorkspaces), response)
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
break
|
||||
|
||||
@@ -571,6 +602,14 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
}
|
||||
break
|
||||
|
||||
case 'LoadIncludedWorkspace':
|
||||
{
|
||||
let fileName = unescape(requestParameters[2])
|
||||
let filePath = process.env.WORKSPACES_PATH + '/' + fileName + '.json'
|
||||
respondWithFile(filePath, response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'SaveWorkspace':
|
||||
{
|
||||
getBody(processRequest)
|
||||
@@ -609,36 +648,42 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
}
|
||||
break
|
||||
|
||||
case 'DataMines':
|
||||
case 'Data-Mines':
|
||||
{
|
||||
respondWithFile(process.env.DATA_MINES_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'TradingMines':
|
||||
case 'Trading-Mines':
|
||||
{
|
||||
respondWithFile(process.env.TRADING_MINES_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'TradingSystems':
|
||||
case 'Trading-Systems':
|
||||
{
|
||||
respondWithFile(process.env.TRADING_SYSTEMS_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'SuperScripts':
|
||||
case 'Super-Scripts':
|
||||
{
|
||||
respondWithFile(process.env.SUPER_SCRIPTS_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'TradingEngines':
|
||||
case 'Trading-Engines':
|
||||
{
|
||||
respondWithFile(process.env.TRADING_ENGINES_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'Tutorials':
|
||||
{
|
||||
respondWithFile(process.env.TUTORIALS_PATH + '/' + requestParameters[2], response)
|
||||
}
|
||||
break
|
||||
|
||||
case 'Storage':
|
||||
{
|
||||
respondWithFile(process.env.STORAGE_PATH + '/' + request.url.substring(9), response)
|
||||
@@ -722,6 +767,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
|
||||
if (!err) {
|
||||
respondWithContent(file.toString(), response)
|
||||
} else {
|
||||
console.log('File requested not found: ' + fileName)
|
||||
respondWithContent(undefined, response)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
function newIncludesFunctions() {
|
||||
thisObject = {
|
||||
includeMissingDataMines: includeMissingDataMines,
|
||||
includeMissingTradingMines: includeMissingTradingMines,
|
||||
includeMissingTradingSystems: includeMissingTradingSystems,
|
||||
includeMissingTradingEngines: includeMissingTradingEngines,
|
||||
includeMissingSuperScripts: includeMissingSuperScripts,
|
||||
includeMissingTutorials: includeMissingTutorials
|
||||
}
|
||||
return thisObject
|
||||
|
||||
function getIncludedFileNames(includeType, callBack) {
|
||||
callServer(undefined, 'IncludedFileNames/' + includeType, onResponse)
|
||||
|
||||
function onResponse(err, data) {
|
||||
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Failed to Fetch Included ' + includeType + ' from the Backend')
|
||||
return
|
||||
}
|
||||
|
||||
let includedFileNames = JSON.parse(data)
|
||||
callBack(includedFileNames)
|
||||
}
|
||||
}
|
||||
|
||||
function addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) {
|
||||
for (let i = 0; i < fileNames.length; i++) {
|
||||
let fileName = fileNames[i]
|
||||
fileName = fileName.replace('.json', '')
|
||||
if (isMissingChildrenByName(node, fileName) === true) {
|
||||
let child = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Included File')
|
||||
child.name = fileName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingDataMines(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Data-Mines', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingTradingMines(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Trading-Mines', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingTradingSystems(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Trading-Systems', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingTradingEngines(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Trading-Engines', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingSuperScripts(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Super-Scripts', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
|
||||
function includeMissingTutorials(node, rootNodes, functionLibraryUiObjectsFromNodes) {
|
||||
getIncludedFileNames('Tutorials', onNamesArrived)
|
||||
|
||||
function onNamesArrived(fileNames) {
|
||||
addIncludedFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,171 +39,91 @@ function newUiObjectsFromNodes() {
|
||||
}
|
||||
}
|
||||
|
||||
getIncludedNames()
|
||||
|
||||
function getIncludedNames() {
|
||||
|
||||
callServer(undefined, 'IncludedNames', onResponse)
|
||||
|
||||
function onResponse(err, data) {
|
||||
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Failed to Fetch Inclided Names from the Backend')
|
||||
return
|
||||
}
|
||||
|
||||
let includedNames = JSON.parse(data)
|
||||
addIncludedNodes(includedNames)
|
||||
}
|
||||
}
|
||||
addIncludedNodes()
|
||||
|
||||
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
|
||||
|
||||
let totalIncluded = 0
|
||||
let totalRead = 0
|
||||
|
||||
for (let i = 0; i < includedDataMines.length; i++) {
|
||||
let name = includedDataMines[i]
|
||||
blobService.getFileFromHost('DataMines' + '/' + name, onFileReceived, true)
|
||||
function onFileReceived(err, text, response) {
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Cannot load included Data Mine ' + name + '. The workspace can not be loaded.')
|
||||
return
|
||||
for (let i = 0; i < node.rootNodes.length; i++) {
|
||||
let rootNode = node.rootNodes[i]
|
||||
if (rootNode.type === 'Includes') {
|
||||
let includes = rootNode
|
||||
if (includes.includedDataMines !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedDataMines.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedDataMines.includedFiles, 'Data-Mines')
|
||||
}
|
||||
let receivedNode = JSON.parse(text)
|
||||
for (let i = 0; i < node.rootNodes.length; i++) {
|
||||
let rootNode = node.rootNodes[i]
|
||||
if (rootNode.type === 'Data Mine') {
|
||||
if (rootNode.config !== undefined) {
|
||||
let config = JSON.parse(rootNode.config)
|
||||
if (config.name === name) {
|
||||
rootNodes.splice(i, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (includes.includedTradingMines !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedTradingMines.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedTradingMines.includedFiles, 'Trading-Mines')
|
||||
}
|
||||
receivedNode.isIncluded = true
|
||||
node.rootNodes.unshift(receivedNode)
|
||||
totalIncluded++
|
||||
if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) {
|
||||
addUserDefinedNodes()
|
||||
if (includes.includedTradingSystems !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedTradingSystems.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedTradingSystems.includedFiles, 'Trading-Systems')
|
||||
}
|
||||
if (includes.includedTradingEngines !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedTradingEngines.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedTradingEngines.includedFiles, 'Trading-Engines')
|
||||
}
|
||||
if (includes.includedSuperScripts !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedSuperScripts.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedSuperScripts.includedFiles, 'Super-Scripts')
|
||||
}
|
||||
if (includes.includedTutorials !== undefined) {
|
||||
totalIncluded = totalIncluded + includes.includedTutorials.includedFiles.length
|
||||
includeAllTheseFiles(includes.includedTutorials.includedFiles, 'Tutorials')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
/*
|
||||
If there is no Includes node at the workspace, we load it anyways here.
|
||||
*/
|
||||
if (totalIncluded === 0) {
|
||||
addUserDefinedNodes()
|
||||
}
|
||||
|
||||
for (let i = 0; i < includedTradingSystems.length; i++) {
|
||||
let name = includedTradingSystems[i]
|
||||
blobService.getFileFromHost('TradingSystems' + '/' + name, onFileReceived, true)
|
||||
function onFileReceived(err, text, response) {
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Cannot load included Trading System ' + 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 System') {
|
||||
if (rootNode.config !== undefined) {
|
||||
let config = JSON.parse(rootNode.config)
|
||||
if (config.name === name) {
|
||||
function includeAllTheseFiles(includedFiles, includedType) {
|
||||
for (let i = 0; i < includedFiles.length; i++) {
|
||||
let includedFile = includedFiles[i]
|
||||
let name = includedFile.name
|
||||
blobService.getFileFromHost(includedType + '/' + name + '.json', onFileReceived, true)
|
||||
|
||||
function onFileReceived(err, text, response) {
|
||||
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('[WARN] Cannot load included ' + includedType + ' ' + name + '. The workspace will be loaded with this included file missing.')
|
||||
} else {
|
||||
let receivedNode = JSON.parse(text)
|
||||
/*
|
||||
If the workspace already contains a root node with the id of the head of the hirierchy
|
||||
we are loading, we remove it because the included file has precedende.
|
||||
*/
|
||||
for (let i = 0; i < node.rootNodes.length; i++) {
|
||||
let rootNode = node.rootNodes[i]
|
||||
if (rootNode.id === receivedNode.id) {
|
||||
rootNodes.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
receivedNode.isIncluded = true
|
||||
node.rootNodes.unshift(receivedNode)
|
||||
totalIncluded++
|
||||
if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) {
|
||||
addUserDefinedNodes()
|
||||
}
|
||||
}
|
||||
}
|
||||
receivedNode.isIncluded = true
|
||||
|
||||
for (let i = 0; i < includedSuperScripts.length; i++) {
|
||||
let name = includedSuperScripts[i]
|
||||
blobService.getFileFromHost('SuperScripts' + '/' + name, onFileReceived, true)
|
||||
function onFileReceived(err, text, response) {
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Cannot load included Super Script ' + 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 === 'Super Scripts') {
|
||||
if (rootNode.config !== undefined) {
|
||||
let config = JSON.parse(rootNode.config)
|
||||
if (config.name === name) {
|
||||
rootNodes.splice(i, 1)
|
||||
if (includedFile.includedFilePosition !== undefined) {
|
||||
let positionOffset = {
|
||||
x: includedFile.includedFilePosition.savedPayload.position.x - receivedNode.savedPayload.position.x,
|
||||
y: includedFile.includedFilePosition.savedPayload.position.y - receivedNode.savedPayload.position.y
|
||||
}
|
||||
receivedNode.positionOffset = positionOffset
|
||||
}
|
||||
}
|
||||
}
|
||||
receivedNode.isIncluded = true
|
||||
node.rootNodes.unshift(receivedNode)
|
||||
totalIncluded++
|
||||
if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) {
|
||||
addUserDefinedNodes()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < includedTradingEngines.length; i++) {
|
||||
let name = includedTradingEngines[i]
|
||||
blobService.getFileFromHost('TradingEngines' + '/' + name, onFileReceived, true)
|
||||
function onFileReceived(err, text, response) {
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
console.log('Cannot load included Trading Engine ' + 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 Engine') {
|
||||
if (rootNode.name === name) {
|
||||
rootNodes.splice(i, 1)
|
||||
}
|
||||
node.rootNodes.unshift(receivedNode)
|
||||
}
|
||||
|
||||
totalRead++
|
||||
if (totalIncluded === totalRead) {
|
||||
addUserDefinedNodes()
|
||||
}
|
||||
}
|
||||
receivedNode.isIncluded = true
|
||||
node.rootNodes.unshift(receivedNode)
|
||||
totalIncluded++
|
||||
if (totalIncluded === includedDataMines.length + includedTradingSystems.length + includedSuperScripts.length + includedTradingEngines.length + includedTradingMines.length) {
|
||||
addUserDefinedNodes()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -294,6 +214,17 @@ function newUiObjectsFromNodes() {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
This function can be called with a positionOffset to change the node
|
||||
saved position and all of its descendants positions as well with an
|
||||
offset. It can also happen that the positionOffset is defined as a property
|
||||
of the node, in which case it will produce exactly the same effect.
|
||||
*/
|
||||
if (node.positionOffset !== undefined) {
|
||||
positionOffset = node.positionOffset
|
||||
}
|
||||
|
||||
|
||||
/* Get node definition */
|
||||
let nodeDefinition = getNodeDefinition(node)
|
||||
if (nodeDefinition !== undefined) {
|
||||
|
||||
@@ -70,6 +70,7 @@ function newWorkspace() {
|
||||
let functionLibraryDataStorageFunctions = newDataStorageFunctions()
|
||||
let functionLibraryChartingSpaceFunctions = newChartingSpaceFunctions()
|
||||
let functionLibraryTutorialFunctions = newTutorialFunctions()
|
||||
let functionLibraryIncludesFunctions = newIncludesFunctions()
|
||||
|
||||
thisObject.nodeChildren = newNodeChildren()
|
||||
|
||||
@@ -185,6 +186,14 @@ function newWorkspace() {
|
||||
/* Validation if it is too early to save. */
|
||||
if (isInitialized === false) { return }
|
||||
|
||||
/* Validation of that the user changed the workspace name at least once. */
|
||||
if (workspace.name === 'Default') {
|
||||
canvas.cockpitSpace.setStatus(
|
||||
'Could not save the Workspace. Please rename the Workspace so that it can be saved.'
|
||||
, 150, canvas.cockpitSpace.statusTypes.WARNING)
|
||||
return
|
||||
}
|
||||
|
||||
/* Validation of 2 sessions opened at the same time. */
|
||||
let savedSessionTimestamp = window.localStorage.getItem('Session Timestamp')
|
||||
if (Number(savedSessionTimestamp) !== sessionTimestamp) {
|
||||
@@ -402,8 +411,17 @@ function newWorkspace() {
|
||||
}
|
||||
|
||||
function replaceWorkspaceByLoadingOne(name) {
|
||||
let blobService = newFileStorage()
|
||||
blobService.getFileFromHost('LoadWorkspace' + '/' + name, onFileReceived, true)
|
||||
|
||||
let webCommand
|
||||
if (name.indexOf('Included -> ' >= 0)) {
|
||||
name = name.replace('Included -> ', '')
|
||||
webCommand = 'LoadIncludedWorkspace'
|
||||
} else {
|
||||
webCommand = 'LoadWorkspace'
|
||||
}
|
||||
|
||||
let blobService = newFileStorage()
|
||||
blobService.getFileFromHost(webCommand + '/' + name, onFileReceived, true)
|
||||
function onFileReceived(err, text, response) {
|
||||
if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
canvas.cockpitSpace.setStatus('Could not load the Workspace called "' + name + '". ', 500, canvas.cockpitSpace.statusTypes.WARNING)
|
||||
@@ -879,6 +897,36 @@ function newWorkspace() {
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'Include Missing Data Mines':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingDataMines(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
case 'Include Missing Trading Mines':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingTradingMines(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
case 'Include Missing Trading Systems':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingTradingSystems(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
case 'Include Missing Trading Engines':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingTradingEngines(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
case 'Include Missing Super Scripts':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingSuperScripts(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
case 'Include Missing Tutorials':
|
||||
{
|
||||
functionLibraryIncludesFunctions.includeMissingTutorials(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,6 +108,14 @@ function newUiObjectTitle() {
|
||||
for (let i = 0; i < nodeDefinition.title.length; i++) {
|
||||
let titleReference = nodeDefinition.title[i]
|
||||
switch (titleReference) {
|
||||
case 'Use Parent': {
|
||||
let nodeToUse = thisObject.payload.parentNode
|
||||
if (nodeToUse !== undefined && nodeToUse.payload !== undefined) {
|
||||
thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title
|
||||
thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name
|
||||
}
|
||||
break
|
||||
}
|
||||
case 'Use Reference Parent': {
|
||||
let nodeToUse = thisObject.payload.node.payload.referenceParent
|
||||
if (nodeToUse !== undefined && nodeToUse.payload !== undefined) {
|
||||
|
||||
@@ -184,4 +184,45 @@ function findChildIndexAtParentNode(startingNode) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isMissingChildrenByName(startingNode, nodeName) {
|
||||
/*
|
||||
This functioin scan all the children of a node and returns true or false
|
||||
depending if the node has a children with a certain name.
|
||||
*/
|
||||
if (startingNode === undefined) { return }
|
||||
|
||||
let nodeDefinition = APP_SCHEMA_MAP.get(startingNode.type)
|
||||
if (nodeDefinition === undefined) { return }
|
||||
|
||||
/* We scan through this node children */
|
||||
if (nodeDefinition.properties !== undefined) {
|
||||
for (let i = 0; i < nodeDefinition.properties.length; i++) {
|
||||
let property = nodeDefinition.properties[i]
|
||||
|
||||
switch (property.type) {
|
||||
case 'node': {
|
||||
let child = startingNode[property.name]
|
||||
if (child.name === nodeName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'array': {
|
||||
let startingNodePropertyArray = startingNode[property.name]
|
||||
if (startingNodePropertyArray !== undefined) {
|
||||
for (let m = 0; m < startingNodePropertyArray.length; m++) {
|
||||
let arrayItem = startingNodePropertyArray[m]
|
||||
if (arrayItem.name === nodeName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1 @@
|
||||
{"type":"Data Mine","name":"Samurai","config":"{\n\"codeName\": \"Samurai\"\n}","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Candles Probabilities","config":"{\n\"codeName\": \"Candles-Probabilities\"\n}","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates SMAs for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","processOutput":{"type":"Process Output","name":"New Process Output","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candles Probabilities","id":"ab027b2e-4e02-4c71-8da5-6b43c37de20b","savedPayload":{"position":{"x":24441.807558180073,"y":11178.172754360203},"targetPosition":{"x":24757.91289199851,"y":11360.695699284031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"85c67513-347a-4948-9121-dee04543fcff"}}}],"outputDatasetFolders":[],"id":"1a087bb8-af2f-4384-85dd-c86d4b39aeff","savedPayload":{"position":{"x":24800.964539682667,"y":11431.938485002378},"targetPosition":{"x":25361.983974240396,"y":11756.06775330211},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","id":"09588f6b-2193-4c9e-bc33-2ac075e8e4f4","savedPayload":{"position":{"x":25757.82661988232,"y":10782.55282705661},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Candles Probabilities Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference|Market Starting Point|Market Ending Point\"\n}","id":"83721123-d178-4ab3-8d6f-da06e8416eb8","savedPayload":{"position":{"x":25902.870176218516,"y":10769.51496828574},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"24ca1130-0386-4088-9417-48eb5d8ac96a"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","id":"2cfeb861-3ce6-4f63-b974-acc395f744cc","savedPayload":{"position":{"x":26042.027883264192,"y":10813.091690317255},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"08845d0d-a0a1-4d26-bb44-1072dfcf0b07","savedPayload":{"position":{"x":25038.41068159992,"y":11195.038413715822},"targetPosition":{"x":25361.983974240396,"y":11756.06775330211},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","id":"24ca1130-0386-4088-9417-48eb5d8ac96a","savedPayload":{"position":{"x":25361.986645019617,"y":11431.680737402028},"targetPosition":{"x":25361.983974240396,"y":11756.06775330211},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","id":"82529746-2044-48f0-b1f6-d1454ba5682d","savedPayload":{"position":{"x":25524.18102556447,"y":11475.10355317791},"targetPosition":{"x":25361.983974240396,"y":11756.06775330211},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapseLine truncated
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1 @@
|
||||
{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","triggerStage":{"type":"Trigger Stage","triggerOn":{"type":"Trigger On Event","situations":[{"type":"Situation","name":"Inmediate Trigger On","conditions":[{"type":"Condition","name":"New Condition","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":12019.268384658983,"y":35411.959473169816},"targetPosition":{"x":12222.121489047899,"y":35515.23218696528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":12222.121489047899,"y":35515.23218696528},"targetPosition":{"x":12627.344132578748,"y":35721.61076665467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":12627.344132578748,"y":35721.61076665467},"targetPosition":{"x":13033.042307101188,"y":35928.18264842314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":13033.042307101188,"y":35928.18264842314},"targetPosition":{"x":13438.652341750114,"y":36134.601050997866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","situations":[{"type":"Situation","name":"Never Trigger Off","conditions":[{"type":"Condition","name":"Close Above MA","javascriptCode":{"type":"Javascript Code","code":"false","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":12876.430835832924,"y":34403.82924666835},"targetPosition":{"x":13016.871455385857,"y":34836.206047588945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":13016.871455385857,"y":34836.206047588945},"targetPosition":{"x":13157.384719466278,"y":35268.78009717322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":13157.384719466278,"y":35268.78009717322},"targetPosition":{"x":13298.045075875125,"y":35701.7793840292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":13298.045075875125,"y":35701.7793840292},"targetPosition":{"x":13438.652341750114,"y":36134.601050997866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","situations":[{"type":"Situation","name":"Inmediate Take Position","conditions":[{"type":"Condition","name":"New Condition","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":14161.263794884866,"y":34715.53097753575},"targetPosition":{"x":14058.079909413536,"y":34918.38086568177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":14058.079909413536,"y":34918.38086568177},"targetPosition":{"x":13851.793090531892,"y":35323.58132214364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":13851.793090531892,"y":35323.58132214364},"targetPosition":{"x":13645.241730589853,"y":35729.1913719614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f8ca03db-0afa-4c98-abad-d9a5d17bdd36","savedPayload":{"position":{"x":13645.241730589853,"y":35729.1913719614},"targetPosition":{"x":13438.652341750114,"y":36134.601050997866},"floatingObject":{"isPinned":false,"Line truncated
|
||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1 @@
|
||||
{"type":"Workspace","name":"My Default Workspace","rootNodes":[{"type":"Network","name":"Develoment Network","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"8081\"\n}","dataMining":{"type":"Data Mining","name":"New Data Mining","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","dataMineTasks":[{"type":"Data Mine Tasks","name":"Sparta","taskManagers":[{"type":"Task Manager","name":"Sparta","tasks":[{"type":"Task","name":"SMA","bot":{"type":"Indicator Bot Instance","name":"SMA","config":"{}","processes":[{"type":"Indicator Process Instance","name":"SMA Multi-Period-Market","id":"ee3ba497-dc1b-454d-8ed6-e45c4bfdb13d","savedPayload":{"position":{"x":23226.60177733104,"y":29738.14430203704},"targetPosition":{"x":23536.899756011815,"y":29459.19005941378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"456269f6-9849-4d5f-9c8c-7cd7d1eef297"}}},{"type":"Indicator Process Instance","name":"SMA Multi-Period-Daily","id":"cdd33812-5b8a-4921-9214-0894ca31b4e7","savedPayload":{"position":{"x":23139.752722422458,"y":29330.257336319642},"targetPosition":{"x":23536.899756011815,"y":29459.19005941378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f"}}}],"id":"66dd9467-0c57-48b6-88f2-f07181426ecc","savedPayload":{"position":{"x":23536.899756011815,"y":29459.19005941378},"targetPosition":{"x":23945.17236693493,"y":29372.321746386617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cf134303-e938-4f0c-b9d8-f9a1ff363821","savedPayload":{"position":{"x":23945.17236693493,"y":29372.321746386617},"targetPosition":{"x":24353.29969806294,"y":29284.85157127153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"EMA","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","processes":[{"type":"Indicator Process Instance","name":"EMA Multi-Period-Market","id":"6ad014ba-06a5-4b97-a2ef-091532c489ea","savedPayload":{"position":{"x":23175.18964819871,"y":28989.155493231876},"targetPosition":{"x":23590.500609546707,"y":28946.058693385694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"EMA Multi-Period-Daily","id":"b137191e-f484-4791-8f3b-7d3aaf5dcf30","savedPayload":{"position":{"x":23344.79195133523,"y":28608.24877749644},"targetPosition":{"x":23590.500609546707,"y":28946.058693385694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"50098ed4-bf26-4cbb-8890-6646bce0a875","savedPayload":{"position":{"x":23590.500609546707,"y":28946.058693385694},"targetPosition":{"x":23971.97432652794,"y":29115.686030416433},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1265f3f0-548f-4145-aa79-a68c7cde4d60","savedPayload":{"position":{"x":23971.97432652794,"y":29115.686030416433},"targetPosition":{"x":24353.29969806294,"y":29284.85157127153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"MACD","bot":{"type":"Indicator Bot Instance","name":"MACD","config":"{}","processes":[{"type":"Indicator Process Instance","name":"MACD Multi-Period-Market","id":"9ee07470-5521-4168-ac5c-2e0e1e4aaa4c","savedPayload":{"position":{"x":23573.831727053424,"y":28353.44161739856},"targetPosition":{"x":23935.51279777453,"y":28562.57080283105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"44019efe-950a-4eec-a546-cd2ee26818b9"}}Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"type":"Workspace","name":"Simple Workspace","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","code":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34247\", \n\"webSocketsPort\": \"8080\"\n}","dataStorage":{"type":"Data Storage","name":"New Data Storage","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"dd7c8795-bb24-4438-9d77-b37a9000ad7f","savedPayload":{"position":{"x":23356.151545791756,"y":29738.98747213911},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","id":"98e6c917-f4b7-4b71-9215-de3ccaf3dc0c","savedPayload":{"position":{"x":23289.9634168229,"y":29661.78881099821},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}},{"type":"Data Product","name":"Candles Channels","id":"1d7dd537-5f6f-4eb2-8e56-ddba0aef720f","savedPayload":{"position":{"x":23230.726477172728,"y":29579.136981834145},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","id":"221c8d22-8a7f-4014-a7ed-0bafc886b123","savedPayload":{"position":{"x":23178.792376750385,"y":29491.41855346877},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}},{"type":"Data Product","name":"Bollinger Bands","id":"6929ebe7-6486-4299-add5-ed0282500d91","savedPayload":{"position":{"x":23134.820126282055,"y":29399.731870197298},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4a3ed8eb-a73e-4fb4-835a-681cf47d7373","savedPayload":{"position":{"x":23098.94227036551,"y":29304.396880399865},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"5ffc6a67-e33b-422b-8e36-f9711f93c723","savedPayload":{"position":{"x":23071.52275176024,"y":29206.288390341324},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"48f7953c-f62d-4292-b042-d1ac05f8f80f","savedPayload":{"position":{"x":23052.75926008704,"y":29106.03719846947},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Popular SMAs","id":"3b9a3c93-6d41-440e-89a2-2fd1b2dde603","savedPayload":{"position":{"x":23042.814830135056,"y":29004.579368724586},"targetPosition":{"x":24208.282416169728,"y":28942.5921453813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"anglLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"type":"Workspace","name":"Binance - WHB - BBTB","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","code":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34247\", \n\"webSocketsPort\": \"8080\"\n}","dataStorage":{"type":"Data Storage","name":"New Data Storage","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"dd7c8795-bb24-4438-9d77-b37a9000ad7f","savedPayload":{"position":{"x":39655.39345377463,"y":28084.121285348076},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","id":"98e6c917-f4b7-4b71-9215-de3ccaf3dc0c","savedPayload":{"position":{"x":39619.08803001109,"y":27971.34006849996},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}},{"type":"Data Product","name":"Candles Channels","id":"1d7dd537-5f6f-4eb2-8e56-ddba0aef720f","savedPayload":{"position":{"x":39594.11393185164,"y":27855.840877332517},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","id":"221c8d22-8a7f-4014-a7ed-0bafc886b123","savedPayload":{"position":{"x":39580.59887306321,"y":27738.507421368748},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}},{"type":"Data Product","name":"Bollinger Bands","id":"6929ebe7-6486-4299-add5-ed0282500d91","savedPayload":{"position":{"x":39578.655464896365,"y":27620.63069875915},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4a3ed8eb-a73e-4fb4-835a-681cf47d7373","savedPayload":{"position":{"x":39588.297198778826,"y":27502.946480135615},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"5ffc6a67-e33b-422b-8e36-f9711f93c723","savedPayload":{"position":{"x":39609.428887621216,"y":27386.77785099828},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"48f7953c-f62d-4292-b042-d1ac05f8f80f","savedPayload":{"position":{"x":39641.84608404141,"y":27273.24280350331},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Popular SMAs","id":"3b9a3c93-6d41-440e-89a2-2fd1b2dde603","savedPayload":{"position":{"x":39685.2360649887,"y":27163.433854438405},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToPareLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"type":"Workspace","name":"Binance - WHB - BBTB","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","code":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34247\", \n\"webSocketsPort\": \"8080\"\n}","dataStorage":{"type":"Data Storage","name":"New Data Storage","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"dd7c8795-bb24-4438-9d77-b37a9000ad7f","savedPayload":{"position":{"x":39655.39345377463,"y":28084.121285348076},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","id":"98e6c917-f4b7-4b71-9215-de3ccaf3dc0c","savedPayload":{"position":{"x":39619.08803001109,"y":27971.34006849996},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}},{"type":"Data Product","name":"Candles Channels","id":"1d7dd537-5f6f-4eb2-8e56-ddba0aef720f","savedPayload":{"position":{"x":39594.11393185164,"y":27855.840877332517},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","id":"221c8d22-8a7f-4014-a7ed-0bafc886b123","savedPayload":{"position":{"x":39580.59887306321,"y":27738.507421368748},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}},{"type":"Data Product","name":"Bollinger Bands","id":"6929ebe7-6486-4299-add5-ed0282500d91","savedPayload":{"position":{"x":39578.655464896365,"y":27620.63069875915},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4a3ed8eb-a73e-4fb4-835a-681cf47d7373","savedPayload":{"position":{"x":39588.297198778826,"y":27502.946480135615},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"5ffc6a67-e33b-422b-8e36-f9711f93c723","savedPayload":{"position":{"x":39609.428887621216,"y":27386.77785099828},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"48f7953c-f62d-4292-b042-d1ac05f8f80f","savedPayload":{"position":{"x":39641.84608404141,"y":27273.24280350331},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Popular SMAs","id":"3b9a3c93-6d41-440e-89a2-2fd1b2dde603","savedPayload":{"position":{"x":39685.2360649887,"y":27163.433854438405},"targetPosition":{"x":40780.996436099675,"y":27659.843516028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToPareLine truncated
|
||||
@@ -1 +0,0 @@
|
||||
{"type":"Workspace","name":"Simple Workspace","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","code":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34247\", \n\"webSocketsPort\": \"8080\"\n}","dataStorage":{"type":"Data Storage","name":"New Data Storage","sessionIndependentData":{"type":"Session Independent Data","name":"New Session Independent Data","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","singleMarketData":[{"type":"Single Market Data","name":"Binance BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"dd7c8795-bb24-4438-9d77-b37a9000ad7f","savedPayload":{"position":{"x":23371.06171982374,"y":29755.463402452675},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","id":"98e6c917-f4b7-4b71-9215-de3ccaf3dc0c","savedPayload":{"position":{"x":23309.87200716484,"y":29688.22822148878},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}},{"type":"Data Product","name":"Candles Channels","id":"1d7dd537-5f6f-4eb2-8e56-ddba0aef720f","savedPayload":{"position":{"x":23255.334304082426,"y":29617.63717135938},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","id":"221c8d22-8a7f-4014-a7ed-0bafc886b123","savedPayload":{"position":{"x":23206.887565649668,"y":29543.756335083526},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}},{"type":"Data Product","name":"Bollinger Bands","id":"6929ebe7-6486-4299-add5-ed0282500d91","savedPayload":{"position":{"x":23164.409635478434,"y":29466.781583461365},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4a3ed8eb-a73e-4fb4-835a-681cf47d7373","savedPayload":{"position":{"x":23127.954272621846,"y":29387.01865408159},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"5ffc6a67-e33b-422b-8e36-f9711f93c723","savedPayload":{"position":{"x":23097.639192435097,"y":29304.845223939745},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"48f7953c-f62d-4292-b042-d1ac05f8f80f","savedPayload":{"position":{"x":23073.59312544535,"y":29220.684709168152},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Popular SMAs","id":"3b9a3c93-6d41-440e-89a2-2fd1b2dde603","savedPayload":{"position":{"x":23055.93092946497,"y":29134.989347999064},"targetPosition":{"x":24208.266379798588,"y":28943.066572350555},"floatingObject":{"isPinned":falseLine truncated
|
||||
@@ -28,6 +28,13 @@
|
||||
callBackFunction(global.DEFAULT_OK_RESPONSE)
|
||||
return
|
||||
}
|
||||
/*
|
||||
We will filter ourt declared dependencies that are not present in the workspace.
|
||||
This will allow the user to have less Data Mines loaded at the workspace
|
||||
that the ones that a Trading Mine depends on.
|
||||
*/
|
||||
thisObject.nodeArray = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(thisObject.nodeArray)
|
||||
|
||||
} else {
|
||||
logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible to not have process dependencies, which means not data dependencies.");
|
||||
callBackFunction(global.DEFAULT_OK_RESPONSE)
|
||||
@@ -57,9 +64,7 @@
|
||||
let addCount = 0;
|
||||
|
||||
for (let i = 0; i < thisObject.nodeArray.length; i++) {
|
||||
|
||||
let dataSetModule = DATA_SET.newDataSet(BOT, logger);
|
||||
|
||||
dataSetModule.initialize(thisObject.nodeArray[i], onInitilized);
|
||||
|
||||
function onInitilized(err) {
|
||||
@@ -71,7 +76,6 @@
|
||||
callBackFunction(err);
|
||||
return;
|
||||
}
|
||||
|
||||
addDataSet();
|
||||
}
|
||||
|
||||
|
||||
@@ -505,6 +505,12 @@
|
||||
|
||||
/* The first phase here is about checking that we have everything we need at the definition level. */
|
||||
let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency')
|
||||
/*
|
||||
We will filter ourt declared dependencies that are not present in the workspace.
|
||||
This will allow the user to have less Data Mines loaded at the workspace
|
||||
that the ones that a Trading Mine depends on.
|
||||
*/
|
||||
dataDependencies = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(dataDependencies)
|
||||
|
||||
if (commons.validateDataDependencies(dataDependencies, callBackFunction) !== true) { return }
|
||||
|
||||
|
||||
@@ -317,6 +317,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, tradin
|
||||
For that reason we do the following processing, to have at the chart data structure the current objects of each indicator / time frame.
|
||||
*/
|
||||
let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency')
|
||||
dataDependencies = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(dataDependencies)
|
||||
|
||||
/* Finding the Current Element on Market Files */
|
||||
if (bot.processingDailyFiles) {
|
||||
|
||||
@@ -272,6 +272,19 @@ global.FIND_NODE_IN_NODE_ARRAY = function (nodeArray, nodeType) {
|
||||
}
|
||||
}
|
||||
|
||||
global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY = function (nodeArray) {
|
||||
let filteredNodeArray = []
|
||||
for (let i = 0; i < nodeArray.length; i++) {
|
||||
let arrayItem = nodeArray[i]
|
||||
if (arrayItem.referenceParent === undefined) {
|
||||
continue
|
||||
} else {
|
||||
filteredNodeArray.push(arrayItem)
|
||||
}
|
||||
}
|
||||
return filteredNodeArray
|
||||
}
|
||||
|
||||
|
||||
process.on('uncaughtException', function (err) {
|
||||
console.log('[ERROR] Task Server -> server -> uncaughtException -> err.message = ' + err.message)
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"type":"Workspace","name":"Workspace","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"8081\"\n}","dataStorage":{"type":"Data Storage","name":"New Data Storage","sessionIndependentData":{"type":"Session Independent Data","name":"New Session Independent Data","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","singleMarketData":[{"type":"Single Market Data","name":"Binance BTC/USDT","dataProducts":[],"dataMineProducts":[{"type":"Data Mine Products","name":"Sparta","botProducts":[{"type":"Bot Products","name":"SMA","dataProducts":[{"type":"Data Product","name":"Popular SMAs","id":"665a435e-da9d-4ac2-a58e-f29d08980254","savedPayload":{"position":{"x":23842.002189998704,"y":30503.25853971839},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Popular SMAs","id":"4029d5bf-a8ad-4d80-b874-2af506e0ab34"}}},{"type":"Data Product","name":"Base7 SMAs","id":"ad7946d9-dd6d-4222-a297-9cc5436eb999","savedPayload":{"position":{"x":23677.417306275674,"y":30607.108265465},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base7 SMAs","id":"a03ef0ea-5be9-4d40-952e-24789e77dbb6"}}},{"type":"Data Product","name":"Base11 SMAs","id":"49992ff9-7300-4116-bd9f-214585ab4710","savedPayload":{"position":{"x":23486.2291676661,"y":30640.351946585783},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base11 SMAs","id":"05fabbf9-7798-4a53-995e-53ae74bef3de"}}},{"type":"Data Product","name":"Base5 SMAs","id":"e9777247-4125-4c69-a7cd-2f4813d162b3","savedPayload":{"position":{"x":23296.890531354402,"y":30597.757559284357},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base5 SMAs","id":"2dcb55de-1673-409e-aa52-f51e7c7f8fa3"}}},{"type":"Data Product","name":"Base6 SMAs","id":"d05bf956-0ce1-4fd5-9cc9-fff68d749445","savedPayload":{"position":{"x":23138.299978902218,"y":30485.63671828675},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base6 SMAs","id":"4ae22e54-cd02-4e2e-b638-1c5ea9a171ac"}}},{"type":"Data Product","name":"Base12 SMAs","id":"b9fcb674-45bc-4e83-ab68-bd6e34d33b4e","savedPayload":{"position":{"x":23034.56871165706,"y":30320.88814943639},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base12 SMAs","id":"723d28e9-a010-48c5-bda0-43a4c2343ddf"}}},{"type":"Data Product","name":"Base30 SMAs","id":"b302598d-ac97-47be-9cb1-f7cb403aeac5","savedPayload":{"position":{"x":23001.10627390992,"y":30129.23689802784},"targetPosition":{"x":23499.424378385633,"y":30142.50245050346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base30 SMAs","id":"607ebabd-9602-4e5c-803d-d4207dbd6794"}}}],"dataProductFolders":[],"id":"998d5d41-61cd-4c4c-a161-1c21a3e3e950","savedPayload":{"position":{"x":23499.78396127104,"y":30142.386246533944},"targetPosition":{"x":23702.341250211557,"y":29687.768475200504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"EMA","dataProducts":[{"type":"Data Product","name":"Popular EMAs","id":"3ce1006d-04f5-4611-b231-5b8a86ddf4fc","savedPayload":{"position":{"x":23658.99123740034,"y":29665.82080289544},"targetPosition":{"x":23721.99123740034,"y":29724.82080289544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"Line truncated
|
||||
Reference in new issue
Block a user