Merge pull request #501 from Luis-Fernando-Molina/develop

Contribution: Info Messages Handling improved and integrated with the Docs
This commit is contained in:
Luis Fernando Molina authored and GitHub committed 2021-01-29 13:03:03 +01:00
commit dbe51ccead
8 files changed
+245 -26

No files matched your search

@@ -1 +1 @@
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFroLine truncated
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFroLine truncated
@@ -0,0 +1,16 @@
{
"topic": "TS LF Trading Bot Infos",
"pageNumber": "1",
"type": "TS LF Trading Bot Info - Candle And Cycle",
"definition": {
"text": "The LF Trading Bot is running over a set of candles. At Time Frames of 1 hour and above, it runs on a market file containing all the candles of all available history of the market. On a Time Frame of less than 1 hours on a set of candles of a given day. This Info shows the # of the candle in the set, and also the Cycle at which the LF was stanging at the moment of producing the Info Message.",
"updated": 1611919712986
},
"paragraphs": [
{
"style": "Note",
"text": "Candle And Cycle",
"updated": 1611919730247
}
]
}
@@ -0,0 +1,20 @@
{
"topic": "TS LF Trading Bot Infos",
"pageNumber": "2",
"type": "TS LF Trading Bot Info - Order Skipped",
"definition": {
"text": "The order that generated this Info Message was not considered to be opened because the Lock at the referenced order at the Trading Engine was found closed. ",
"updated": 1611919981100
},
"paragraphs": [
{
"style": "Text",
"text": "The Lock is a mechanism to prevent an order to be opened while another instance of the same order definition is already running and occupaying it's place at the Trading Engine.",
"updated": 1611920085962
},
{
"style": "Note",
"text": "Order Sikpped"
}
]
}
@@ -0,0 +1,28 @@
{
"topic": "TS LF Trading Bot Infos",
"pageNumber": "3",
"type": "TS LF Trading Bot Info - Order Closed",
"definition": {
"text": "The order that triggered this Infor Message has been closed.",
"updated": 1611920136713
},
"paragraphs": [
{
"style": "Success",
"text": "Details of the Exit Type for that order can be seen below.",
"updated": 1611920197722
},
{
"style": "Title",
"text": "Context Info"
},
{
"style": "Text",
"text": "Here are the context information preserved at the moment this Info Message was generated."
},
{
"style": "Placeholder",
"text": "contextInfo"
}
]
}
@@ -131,7 +131,16 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
*/
if (tradingSystemOrder.config.spawnMultipleOrders !== true) {
if (tradingEngineOrder.lock.value === 'Closed') {
tradingSystem.infos.push(['Order ' + tradingSystemOrder.name + ' skipped because lock was closed.'])
let message = "Order Skipped"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
continue
}
}
@@ -668,7 +677,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
await updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order)
return
@@ -682,7 +704,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
await updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order)
await recalculateStageSize(tradingEngineStage, tradingEngineOrder)
@@ -705,7 +740,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
await updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order)
await recalculateStageSize(tradingEngineStage, tradingEngineOrder)
@@ -763,7 +811,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'percentageFilledSimulation -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
}
/* If the Stage is Closing and this order is still open, we need to cancel it now */
@@ -982,7 +1043,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'simulateCancelOrder -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
recalculateStageSize(tradingEngineStage, tradingEngineOrder)
}
@@ -1051,7 +1125,20 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1
await updateEndsWithCycle(tradingEngineOrder)
tradingSystem.infos.push([tradingSystemOrder.id, 'exchangeCancelOrder -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value])
let message = "Order Closed"
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - ' + message,
placeholder: {}
}
contextInfo = {
exitType: tradingEngineOrder.exitType.value
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addInfo([tradingSystemOrder.id, message, docs])
await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order)
@@ -207,7 +207,14 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
let infoMessage = 'Processing candle # ' + tradingEngine.current.episode.candle.index.value + ' @ the ' + tradingEngine.current.episode.cycle.value + ' cycle.'
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[INFO] runSimulation -> loop -> ' + infoMessage)
tradingSystem.infos.push([tradingSystem.id, infoMessage])
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'TS LF Trading Bot Info - Candle And Cycle',
placeholder: {}
}
tradingSystem.addInfo([tradingSystem.id, infoMessage, docs])
await tradingSystemModuleObject.run()
}
@@ -564,7 +571,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addError([tradingSystem.id, errorMessage, docs])
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage)
@@ -616,7 +623,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
}
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
tradingSystem.addError([tradingSystem.id, errorMessage, docs])
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
'[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage)
@@ -62,7 +62,7 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
evalNode(startingNode, 'Formulas', descendentOfNodeType)
}
tradingSystem.addError = function (errorInfoArray) {
tradingSystem.addError = function (errorDataArray) {
/*
This function adds to the array of error info a rate based on the amount of items
already at the errors array. This rate will later help plotting the error at the
@@ -70,11 +70,11 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
*/
let baseRate = tradingEngine.current.episode.candle.close.value
let rate = baseRate - baseRate * ((tradingSystem.errors.length + 1) + 0) / 100
errorInfoArray.push(rate)
tradingSystem.errors.push(errorInfoArray)
errorDataArray.push(rate)
tradingSystem.errors.push(errorDataArray)
}
tradingSystem.addWarning = function (warningInfoArray) {
tradingSystem.addWarning = function (warningDataArray) {
/*
This function adds to the array of warning info a rate based on the amount of items
already at the warning array. This rate will later help plotting the warning at the
@@ -82,8 +82,20 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
*/
let baseRate = tradingEngine.current.episode.candle.close.value
let rate = baseRate + baseRate * ((tradingSystem.warnings.length + 1) + 0) / 100
warningInfoArray.push(rate)
tradingSystem.warnings.push(warningInfoArray)
warningDataArray.push(rate)
tradingSystem.warnings.push(warningDataArray)
}
tradingSystem.addInfo = function (infoDataArray) {
/*
This function adds to the array of warning info a rate based on the amount of items
already at the warning array. This rate will later help plotting the warning at the
charts.
*/
let baseRate = tradingEngine.current.episode.candle.close.value
let rate = baseRate + baseRate * ((tradingSystem.infos.length + 1) + 0.5) / 100
infoDataArray.push(rate)
tradingSystem.infos.push(infoDataArray)
}
function isItInside(elementWithTimestamp, elementWithBeginEnd) {
@@ -21,26 +21,75 @@ function newNodesInfos() {
function onRecordChange(currentRecord) {
if (currentRecord === undefined) { return }
let array = currentRecord.infos
if (array === undefined) { return }
for (let i = 0; i < array.length; i++) {
let arrayItem = array[i]
if (currentRecord.rateIndex === undefined) {
/*
The user is not pointing to any rate in particular, so we are
going to report all infos to the nodes involved.
*/
let array = currentRecord.infos
if (array === undefined) { return }
for (let i = 0; i < array.length; i++) {
let arrayItem = array[i]
let nodeId = arrayItem[0]
let infoMessage = arrayItem[1]
let docs = arrayItem[2]
applyValue(nodeId, infoMessage, docs)
}
} else {
/*
The user is pointing to a particular rate, so we are
going to report only that info and we will open the docs
to show the info's page.
*/
let array = currentRecord.infos
if (array === undefined) { return }
let arrayItem = array[currentRecord.rateIndex]
let nodeId = arrayItem[0]
let value = arrayItem[1]
applyValue(nodeId, value)
let infoMessage = arrayItem[1]
let docs = arrayItem[2]
applyValue(nodeId, infoMessage, docs)
if (UI.projects.superalgos.spaces.docsSpace.sidePanelTab.isOpen === true) {
if (
UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.project !== docs.project ||
UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.category !== docs.category ||
UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.type !== docs.type ||
UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.nodeId !== nodeId
) {
UI.projects.superalgos.spaces.docsSpace.navigateTo(
docs.project,
docs.category,
docs.type,
docs.anchor,
nodeId,
docs.placeholder
)
}
} else {
UI.projects.superalgos.spaces.docsSpace.openSpaceAreaAndNavigateTo(
docs.project,
docs.category,
docs.type,
docs.anchor,
nodeId,
docs.placeholder
)
}
}
}
async function applyValue(nodeId, value) {
async function applyValue(nodeId, infoMessage, docs) {
if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return }
let node = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeById(nodeId)
if (node === undefined) { return }
if (node.payload === undefined) { return }
if (node.payload.uiObject === undefined) { return }
if (value === '') {
if (infoMessage === '') {
node.payload.uiObject.resetInfoMessage()
} else {
node.payload.uiObject.setInfoMessage(value, 3)
node.payload.uiObject.setInfoMessage(infoMessage, 3, docs)
}
}
}