Refactoring

This commit is contained in:
Luis Fernando Molina committed 2020-09-16 10:34:00 +02:00
1 parent 04c8ddea58
commit c0e0be2ef7
14 files changed
+89 -89

No files matched your search

+44 -44
View File
@@ -1765,9 +1765,9 @@
"childType": "Task Manager"
},
{
"name": "singleMarketData",
"name": "marketDataProducts",
"type": "node",
"childType": "Single Market Data"
"childType": "Market Data Products"
},
{
"name": "sessionReferences",
@@ -1802,7 +1802,7 @@
"compatibleTypes": "->Template Script->"
},
"referenceAttachesTo": {
"compatibleTypes": "->Dashboard->Session Independent Data->Session Based Data->Data Mining->Testing Environment->Production Environment->"
"compatibleTypes": "->Dashboard->Data Mines Data->Trading Mines Data->Data Mining->Testing Environment->Production Environment->"
},
"properties": []
},
@@ -13008,17 +13008,17 @@
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "sessionIndependentData",
"propertyToCheckFor": "dataMinesData",
"label": "Add Session Ind Data",
"relatedUiObject": "Session Independent Data",
"relatedUiObject": "Data Mines Data",
"actionFunction": "payload.onMenuItemClick"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "sessionBasedData",
"label": "Add Session Based Data",
"relatedUiObject": "Session Based Data",
"propertyToCheckFor": "tradingMinesData",
"label": "Add Trading Mines Data",
"relatedUiObject": "Trading Mines Data",
"actionFunction": "payload.onMenuItemClick"
},
{
@@ -13039,15 +13039,15 @@
"propertyNameAtParent": "dataStorage",
"properties": [
{
"name": "sessionIndependentData",
"name": "dataMinesData",
"type": "node",
"childType": "Session Independent Data",
"childType": "Data Mines Data",
"autoAdd": true
},
{
"name": "sessionBasedData",
"name": "tradingMinesData",
"type": "node",
"childType": "Session Based Data",
"childType": "Trading Mines Data",
"autoAdd": true
}
]
@@ -13673,16 +13673,16 @@
{
"action": "Add UI Object",
"label": "Add Market Data",
"relatedUiObject": "Single Market Data",
"relatedUiObject": "Market Data Products",
"actionFunction": "payload.onMenuItemClick"
},
{
"action": "Add Missing Single Market Data",
"action": "Add Missing Market Data Products",
"label": "Add Missing Markets",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"relatedUiObject": "Single Market Data",
"relatedUiObject": "Market Data Products",
"actionFunction": "payload.onMenuItemClick"
},
{
@@ -13706,19 +13706,19 @@
"compatibleTypes": "->Crypto Exchange->"
},
"chainAttachesTo": {
"compatibleTypes": "->Session Independent Data->"
"compatibleTypes": "->Data Mines Data->"
},
"propertyNameAtParent": "exchangeDataProducts",
"properties": [
{
"name": "singleMarketData",
"name": "marketDataProducts",
"type": "array",
"childType": "Single Market Data"
"childType": "Market Data Products"
}
]
},
{
"type": "Session Independent Data",
"type": "Data Mines Data",
"menuItems": [
{
"action": "Add UI Object",
@@ -13750,7 +13750,7 @@
"chainAttachesTo": {
"compatibleTypes": "->Data Storage->"
},
"propertyNameAtParent": "sessionIndependentData",
"propertyNameAtParent": "dataMinesData",
"properties": [
{
"name": "exchangeDataProducts",
@@ -13760,7 +13760,7 @@
]
},
{
"type": "Exchange Sessions",
"type": "Exchange Trading Products",
"menuItems": [
{
"action": "Add UI Object",
@@ -13798,9 +13798,9 @@
"compatibleTypes": "->Crypto Exchange->"
},
"chainAttachesTo": {
"compatibleTypes": "->Session Based Data->"
"compatibleTypes": "->Trading Mines Data->"
},
"propertyNameAtParent": "exchangeSessions",
"propertyNameAtParent": "exchangeTradingProducts",
"properties": [
{
"name": "sessionReferences",
@@ -13810,21 +13810,21 @@
]
},
{
"type": "Session Based Data",
"type": "Trading Mines Data",
"menuItems": [
{
"action": "Add UI Object",
"label": "Add Exchange Sessions",
"relatedUiObject": "Exchange Sessions",
"label": "Add Exchange Trading Products",
"relatedUiObject": "Exchange Trading Products",
"actionFunction": "payload.onMenuItemClick"
},
{
"action": "Add Missing Exchange Sessions",
"action": "Add Missing Exchange Trading Products",
"label": "Add Missing Exchanges",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"relatedUiObject": "Exchange Sessions",
"relatedUiObject": "Exchange Trading Products",
"actionFunction": "payload.onMenuItemClick"
},
{
@@ -13842,12 +13842,12 @@
"chainAttachesTo": {
"compatibleTypes": "->Data Storage->"
},
"propertyNameAtParent": "sessionBasedData",
"propertyNameAtParent": "tradingMinesData",
"properties": [
{
"name": "exchangeSessions",
"name": "exchangeTradingProducts",
"type": "array",
"childType": "Exchange Sessions"
"childType": "Exchange Trading Products"
}
]
},
@@ -13858,8 +13858,8 @@
"action": "Add UI Object",
"label": "Add Market Trading Data",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "singleMarketTradingData",
"relatedUiObject": "Single Market Trading Data",
"propertyToCheckFor": "marketTradingProducts",
"relatedUiObject": "Market Trading Products",
"actionFunction": "payload.onMenuItemClick"
},
{
@@ -13876,7 +13876,7 @@
"title": [
"Use Reference Parent",
"Use Reference Parent Type",
"Use Child @singleMarketData"
"Use Child @marketDataProducts"
],
"addLeftIcons": true,
"level": 3,
@@ -13885,20 +13885,20 @@
"compatibleTypes": "->Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->"
},
"chainAttachesTo": {
"compatibleTypes": "->Exchange Sessions->"
"compatibleTypes": "->Exchange Trading Products->"
},
"propertyNameAtParent": "sessionReferences",
"properties": [
{
"name": "singleMarketTradingData",
"name": "marketTradingProducts",
"type": "node",
"childType": "Single Market Trading Data",
"childType": "Market Trading Products",
"autoAdd": true
}
]
},
{
"type": "Single Market Data",
"type": "Market Data Products",
"menuItems": [
{
"action": "Add UI Object",
@@ -13944,7 +13944,7 @@
"chainAttachesTo": {
"compatibleTypes": "->Exchange Data Products->"
},
"propertyNameAtParent": "singleMarketData",
"propertyNameAtParent": "marketDataProducts",
"properties": [
{
"name": "dataProducts",
@@ -13961,7 +13961,7 @@
]
},
{
"type": "Single Market Trading Data",
"type": "Market Trading Products",
"menuItems": [
{
"action": "Add UI Object",
@@ -14007,7 +14007,7 @@
"chainAttachesTo": {
"compatibleTypes": "->Session Reference->"
},
"propertyNameAtParent": "singleMarketTradingData",
"propertyNameAtParent": "marketTradingProducts",
"properties": [
{
"name": "dataProducts",
@@ -14046,7 +14046,7 @@
"compatibleTypes": "->Product Definition->"
},
"chainAttachesTo": {
"compatibleTypes": "->Single Market Data->Data Product Folder->Bot Products->"
"compatibleTypes": "->Market Data Products->Data Product Folder->Bot Products->"
},
"propertyNameAtParent": "dataProducts",
"properties": []
@@ -14089,7 +14089,7 @@
"compatibleTypes": "->Data Mine->"
},
"chainAttachesTo": {
"compatibleTypes": "->Single Market Data->"
"compatibleTypes": "->Market Data Products->"
},
"propertyNameAtParent": "dataMineProducts",
"properties": [
@@ -14139,7 +14139,7 @@
"compatibleTypes": "->Trading Mine->"
},
"chainAttachesTo": {
"compatibleTypes": "->Single Market Trading Data->"
"compatibleTypes": "->Market Trading Products->"
},
"propertyNameAtParent": "tradingMineProducts",
"properties": [
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

@@ -290,47 +290,47 @@ function newCryptoEcosystemFunctions() {
dashboardsArray.push({ environmentNode: environmentFound, networkNode: networkNode, sessionsArray: allSessionsArray })
}
/*
Here we complete the missing stuff at Session Independent Data
Here we complete the missing stuff at Data Mines Data
*/
let sessionIndependentData = findInBranch(networkNode, 'Session Independent Data', node, true)
if (sessionIndependentData === undefined) {
node.payload.uiObject.setErrorMessage('Session Independent Data node not found at Network Node ' + networkNode.name)
let dataMinesData = findInBranch(networkNode, 'Data Mines Data', node, true)
if (dataMinesData === undefined) {
node.payload.uiObject.setErrorMessage('Data Mines Data node not found at Network Node ' + networkNode.name)
return
}
let exchangeDataProducts = findOrCreateChildWithReference(sessionIndependentData, 'Exchange Data Products', cryptoExchange, functionLibraryUiObjectsFromNodes)
let exchangeDataProducts = findOrCreateChildWithReference(dataMinesData, 'Exchange Data Products', cryptoExchange, functionLibraryUiObjectsFromNodes)
exchangeDataProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let singleMarketData = findAndRecreateChildWithReference(exchangeDataProducts, 'Single Market Data', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
singleMarketData.payload.floatingObject.collapseToggle()
let marketDataProducts = findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter)
marketDataProducts.payload.floatingObject.collapseToggle()
menuClick(singleMarketData, 'Add All Data Mine Products', true)
menuClickOfNodeArray(singleMarketData.dataMineProducts, 'Add All Data Products', true)
menuClick(marketDataProducts, 'Add All Data Mine Products', true)
menuClickOfNodeArray(marketDataProducts.dataMineProducts, 'Add All Data Products', true)
/*
Finally we complete the missing stuff at Session Based Data
Finally we complete the missing stuff at Trading Mines Data
*/
let sessionBasedData = findInBranch(networkNode, 'Session Based Data', node, true)
if (sessionBasedData === undefined) {
node.payload.uiObject.setErrorMessage('Session Based Data node not found at Network Node ' + networkNode.name)
let tradingMinesData = findInBranch(networkNode, 'Trading Mines Data', node, true)
if (tradingMinesData === undefined) {
node.payload.uiObject.setErrorMessage('Trading Mines Data node not found at Network Node ' + networkNode.name)
return
}
let exchangeSessions = findOrCreateChildWithReference(sessionBasedData, 'Exchange Sessions', cryptoExchange, functionLibraryUiObjectsFromNodes)
exchangeSessions.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
let exchangeTradingProducts = findOrCreateChildWithReference(tradingMinesData, 'Exchange Trading Products', cryptoExchange, functionLibraryUiObjectsFromNodes)
exchangeTradingProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
/*
We need to delete all the session references related to the market we are installing.
We make a copy of the array so that if we need to delete some nodes it does not
affect the loop evaluating the nodes.
*/
let sessionReferencesArray = []
for (let i = 0; i < exchangeSessions.sessionReferences.length; i++) {
sessionReference = exchangeSessions.sessionReferences[i]
for (let i = 0; i < exchangeTradingProducts.sessionReferences.length; i++) {
sessionReference = exchangeTradingProducts.sessionReferences[i]
sessionReferencesArray.push(sessionReference)
}
for (let i = 0; i < sessionReferencesArray.length; i++) {
sessionReference = sessionReferencesArray[i]
if (sessionReference.singleMarketTradingData === undefined) { continue }
if (sessionReference.singleMarketTradingData.payload.referenceParent === undefined) { continue }
if (sessionReference.singleMarketTradingData.payload.referenceParent.id === node.id) {
if (sessionReference.marketTradingProducts === undefined) { continue }
if (sessionReference.marketTradingProducts.payload.referenceParent === undefined) { continue }
if (sessionReference.marketTradingProducts.payload.referenceParent.id === node.id) {
functionLibraryNodeDeleter.deleteUIObject(sessionReference, rootNodes)
}
}
@@ -339,18 +339,18 @@ function newCryptoEcosystemFunctions() {
*/
for (let i = 0; i < sessionsCreatedArray.length; i++) {
let session = sessionsCreatedArray[i]
if (isMissingChildren(exchangeSessions, session, true) === true) {
functionLibraryDataStorageFunctions.createSessionReference(exchangeSessions, session, functionLibraryUiObjectsFromNodes)
if (isMissingChildren(exchangeTradingProducts, session, true) === true) {
functionLibraryDataStorageFunctions.createSessionReference(exchangeTradingProducts, session, functionLibraryUiObjectsFromNodes)
}
}
/*
Create everything inside the session references.
*/
for (let j = 0; j < exchangeSessions.sessionReferences.length; j++) {
sessionReference = exchangeSessions.sessionReferences[j]
menuClick(sessionReference.singleMarketTradingData, 'Add All Trading Mine Products', true)
menuClickOfNodeArray(sessionReference.singleMarketTradingData.tradingMineProducts, 'Add All Data Products', true)
sessionReference.singleMarketTradingData.payload.floatingObject.collapseToggle()
for (let j = 0; j < exchangeTradingProducts.sessionReferences.length; j++) {
sessionReference = exchangeTradingProducts.sessionReferences[j]
menuClick(sessionReference.marketTradingProducts, 'Add All Trading Mine Products', true)
menuClickOfNodeArray(sessionReference.marketTradingProducts.tradingMineProducts, 'Add All Data Products', true)
sessionReference.marketTradingProducts.payload.floatingObject.collapseToggle()
}
}
}
@@ -4,8 +4,8 @@ function newDataStorageFunctions() {
addAllDataMineProducts: addAllDataMineProducts,
addAllTradingMineProducts: addAllTradingMineProducts,
addMissingSessionReferences: addMissingSessionReferences,
addMissingSingleMarketData: addMissingSingleMarketData,
addMissingExchangeSessions: addMissingExchangeSessions,
addMissingMarketDataProducts: addMissingMarketDataProducts,
addMissingExchangeTradingProducts: addMissingExchangeTradingProducts,
addMissingExchangeDataProducts: addMissingExchangeDataProducts,
createSessionReference: createSessionReference
}
@@ -115,11 +115,11 @@ function newDataStorageFunctions() {
where the Session was found.
*/
let marketTradingTasks = findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
sessionReference.singleMarketTradingData.payload.referenceParent = marketTradingTasks.payload.referenceParent
sessionReference.marketTradingProducts.payload.referenceParent = marketTradingTasks.payload.referenceParent
marketTradingTasks.payload.floatingObject.collapseToggle()
}
function addMissingSingleMarketData(node, rootNodes, functionLibraryUiObjectsFromNodes) {
function addMissingMarketDataProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) {
if (node.payload.referenceParent === undefined) { return }
if (node.payload.referenceParent.exchangeMarkets === undefined) { return }
let marketsArray = node.payload.referenceParent.exchangeMarkets.markets
@@ -127,14 +127,14 @@ function newDataStorageFunctions() {
for (let i = 0; i < marketsArray.length; i++) {
let market = marketsArray[i]
if (isMissingChildren(node, market, true) === true) {
let singleMarketData = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Single Market Data')
singleMarketData.payload.referenceParent = market
let marketDataProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Market Data Products')
marketDataProducts.payload.referenceParent = market
}
}
}
function addMissingExchangeSessions(node, rootNodes, functionLibraryUiObjectsFromNodes) {
addMissingExchange(node, rootNodes, 'Exchange Sessions', functionLibraryUiObjectsFromNodes)
function addMissingExchangeTradingProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) {
addMissingExchange(node, rootNodes, 'Exchange Trading Products', functionLibraryUiObjectsFromNodes)
}
function addMissingExchangeDataProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) {
@@ -91,8 +91,8 @@ function newTaskFunctions() {
let taskDefinition = functionLibraryProtocolNode.getProtocolNode(node, false, true, true, false, false, taskLightingPath)
let networkLightingPath = '->Network->Network Node->' +
'Data Storage->Session Independent Data->Exchange Data Products->' +
'Single Market Data->' +
'Data Storage->Data Mines Data->Exchange Data Products->' +
'Market Data Products->' +
'Data Mine Products->Bot Products->' +
'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' +
'Data Product->Product Definition->' +
+4 -4
View File
@@ -735,14 +735,14 @@ function newWorkspace() {
functionLibraryDataStorageFunctions.addMissingSessionReferences(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
}
break
case 'Add Missing Single Market Data':
case 'Add Missing Market Data Products':
{
functionLibraryDataStorageFunctions.addMissingSingleMarketData(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
functionLibraryDataStorageFunctions.addMissingMarketDataProducts(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
}
break
case 'Add Missing Exchange Sessions':
case 'Add Missing Exchange Trading Products':
{
functionLibraryDataStorageFunctions.addMissingExchangeSessions(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
functionLibraryDataStorageFunctions.addMissingExchangeTradingProducts(payload.node, thisObject.workspaceNode.rootNodes, functionLibraryUiObjectsFromNodes)
}
break
case 'Add Missing Exchange Data Products':
+1 -1
View File
@@ -63,7 +63,7 @@ function newFloatingLayer() {
}
function initialize() {
invisiblePhysicsIntervalId = setInterval(invisiblePhysics, 1000)
invisiblePhysicsIntervalId = setInterval(invisiblePhysics, 10000)
}
function getContainer(point) {
+2 -2
View File
@@ -162,8 +162,8 @@ function newLayer() {
'Data Product->' +
'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' +
'Bot Products->Data Mine Products->Trading Mine Products->' +
'Single Market Data->Single Market Trading Data->Exchange Data Products->' +
'Session Reference->Session Independent Data->Session Based Data->Exchange Sessions->Session Based Data->Data Storage->Network Node->' +
'Market Data Products->Single Market Trading Data->Exchange Data Products->' +
'Session Reference->Data Mines Data->Trading Mines Data->Exchange Trading Products->Trading Mines Data->Data Storage->Network Node->' +
'Data Storage->Network Node->' +
'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' +
'Trading System Reference->Trading Engine Reference->Trading System->Trading Engine->' +
+1 -1
View File
@@ -1 +1 @@
{"type":"Super Scripts","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","scriptsLibrary":{"type":"Scripts Library","name":"New Scripts Library","masterScripts":[{"type":"Master Script","name":"Setup Market","templateScripts":[{"type":"Template Script","name":"Install Single Market Data","templateStructure":{"type":"Template Structure","name":"New Template Structure","singleMarketData":{"type":"Single Market Data","name":"","dataProducts":[{"type":"Data Product","name":"Candles","id":"5e93b8b3-3ed7-4c98-bbc1-3804900cf6aa","savedPayload":{"position":{"x":39650.030384991085,"y":28142.770659988782},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"7c9bb27e-b439-4391-82ae-c1d0eeac404e","savedPayload":{"position":{"x":39602.32443296776,"y":28028.041261771512},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"4c98c4d3-cd29-41ba-8d5e-80b932bf2d86","savedPayload":{"position":{"x":39574.77784960979,"y":27916.594007704927},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"83695a47-e8bc-454b-9904-4e4f817542cb","savedPayload":{"position":{"x":39554.52222383268,"y":27807.90661198409},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"9fdb24c0-ecb7-4cd6-a61d-49d51de6c3e7","savedPayload":{"position":{"x":39552.30927819702,"y":27700.222235085923},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"018210b2-49f8-4d60-841a-c20d87543851","savedPayload":{"position":{"x":39542.24590323085,"y":27591.843126728603},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"ceddddcc-461a-48c1-9a6f-84e43676b2d1","savedPayload":{"position":{"x":39585.23490295202,"y":27490.884320551177},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"68a764ce-c162-4984-a4ee-ef92872b7fc9","savedPayload":{"position":{"x":39539.82297232588,"y":27361.579082279957},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"97d661ae-559b-4ab2-b877-2eeb0fc08fbe","savedPayload":{"position":{"x":39689.20422657283,"y":27296.335084035833},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referLine truncated
{"type":"Super Scripts","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","scriptsLibrary":{"type":"Scripts Library","name":"New Scripts Library","masterScripts":[{"type":"Master Script","name":"Setup Market","templateScripts":[{"type":"Template Script","name":"Install Market Data Products","templateStructure":{"type":"Template Structure","name":"New Template Structure","marketDataProducts":{"type":"Market Data Products","name":"","dataProducts":[{"type":"Data Product","name":"Candles","id":"5e93b8b3-3ed7-4c98-bbc1-3804900cf6aa","savedPayload":{"position":{"x":39650.030384991085,"y":28142.770659988782},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"7c9bb27e-b439-4391-82ae-c1d0eeac404e","savedPayload":{"position":{"x":39602.32443296776,"y":28028.041261771512},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"4c98c4d3-cd29-41ba-8d5e-80b932bf2d86","savedPayload":{"position":{"x":39574.77784960979,"y":27916.594007704927},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"83695a47-e8bc-454b-9904-4e4f817542cb","savedPayload":{"position":{"x":39554.52222383268,"y":27807.90661198409},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"9fdb24c0-ecb7-4cd6-a61d-49d51de6c3e7","savedPayload":{"position":{"x":39552.30927819702,"y":27700.222235085923},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"018210b2-49f8-4d60-841a-c20d87543851","savedPayload":{"position":{"x":39542.24590323085,"y":27591.843126728603},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"ceddddcc-461a-48c1-9a6f-84e43676b2d1","savedPayload":{"position":{"x":39585.23490295202,"y":27490.884320551177},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"68a764ce-c162-4984-a4ee-ef92872b7fc9","savedPayload":{"position":{"x":39539.82297232588,"y":27361.579082279957},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"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":"97d661ae-559b-4ab2-b877-2eeb0fc08fbe","savedPayload":{"position":{"x":39689.20422657283,"y":27296.335084035833},"targetPosition":{"x":40757.00079050569,"y":27671.679802500574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},Line truncated