Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop

This commit is contained in:
Brenden Harrell committed 2021-05-06 12:32:06 -06:00
commit 0829ce734e
6 files changed
+103 -7

No files matched your search

@@ -0,0 +1 @@
{"type":"Data Mine","name":"Delta","config":"{\n \"codeName\": \"Delta\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Relative Strenght Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"RSI-W\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates Wilder RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market RSI-W14","project":"Superalgos","id":"75881553-ec60-4954-9404-052ba11904f4","savedPayload":{"position":{"x":19646.18251638588,"y":17789.2053813897},"targetPosition":{"x":19675.299658959913,"y":17897.87203684722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a94722c3-a453-4f46-931f-aeb244e7cb66"}}}],"outputDatasetFolders":[],"id":"ffb59a7e-565a-4588-bd44-999a7cb66122","savedPayload":{"position":{"x":19675.299658959913,"y":17897.87203684722},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"b0af9801-ba4e-4bfd-a605-98d9ac121b5f","savedPayload":{"position":{"x":19650.151086682014,"y":17594.3496655382},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strenght Index - Wilder Method (RSI-W) Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"02d64b4a-7c3c-4c89-918d-b3697b5955b2","savedPayload":{"position":{"x":19820.88537183008,"y":17571.87207047466},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2b961dac-9f41-4eed-a495-4e55f26714c3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"25315413-2e01-4a7d-83bc-1257d43f8fe6","savedPayload":{"position":{"x":19957.506802533513,"y":17676.7053813897},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"b14516a1-e5cc-48f8-ab0f-0e46faf6c41c","savedPayload":{"position":{"x":19762.651086682014,"y":17789.2053813897},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"2b961dac-9f41-4eed-a495-4e55f26714c3","savedPayload":{"position":{"x":19863.51582730092,"y":17847.439666537768},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"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","project":"Superalgos","id":"c1598823-e0b3-4036-8ad6-669ae0e3f638","savedPayload":{"position":{"x":19921.750112448986,"y":17948.304407156673},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id"Line truncated
@@ -1 +1 @@
{"type":"Data Mine","name":"PLUVTECH-DM","config":"{\n \"codeName\": \"PLUVTECH-DM\"\n}","project":"Superalgos","sensorBots":[],"apiDataFetcherBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Fisher Transform","config":"{\n \"codeName\": \"Fisher\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces Fisher Transform\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market FisherTransform","project":"Superalgos","id":"417d48b6-505e-44da-819c-9bae7ef27be1","savedPayload":{"position":{"x":21544.760606413663,"y":17851.908855440484},"targetPosition":{"x":21570.642510923917,"y":17948.50143806939},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9323c88c-d610-4539-b736-cbb8653cef13"}}}],"outputDatasetFolders":[],"id":"8e54b923-f47a-44c4-9463-0ad427cad349","savedPayload":{"position":{"x":21570.642510923917,"y":17948.50143806939},"targetPosition":{"x":21609.465367689296,"y":18093.39031201275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Fisher Transform Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"6a19b7ec-c85e-4acd-aa3d-476d56899896","savedPayload":{"position":{"x":21612.111081220053,"y":17673.708753558363},"targetPosition":{"x":21687.111081220053,"y":17803.61256412603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"6d52d241-dc08-45b6-af54-d4a3d3884211"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"2f8cefb9-94ad-4126-b666-cfb9744a90c6","savedPayload":{"position":{"x":21725.933937985432,"y":17658.72369018267},"targetPosition":{"x":21687.111081220053,"y":17803.61256412603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"e246ec47-4cad-43e5-a2ec-4a9a12f41ea2","savedPayload":{"position":{"x":21817.01489178772,"y":17728.61256412603},"targetPosition":{"x":21687.111081220053,"y":17803.61256412603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"6827047a-9e5f-463f-bceb-e832686975a9","savedPayload":{"position":{"x":21687.111081220053,"y":17803.61256412603},"targetPosition":{"x":21609.465367689296,"y":18093.39031201275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"6d52d241-dc08-45b6-af54-d4a3d3884211","savedPayload":{"position":{"x":21715.531384867278,"y":17987.32429483477},"targetPosition":{"x":21609.465367689296,"y":18093.39031201275},"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","project":"Superalgos","id":"bfafbb28-81d6-42c9-bc1e-9711318c8192","savedPayload":{"position":{"x":21899.243115576017,"y":18015.744598481993},"targetPosition":{"x":21609.465367689296,"y":18093.39031201275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"18Line truncated
{"type":"Data Mine","name":"PLUVTECH-DM","config":"{\n \"codeName\": \"PLUVTECH-DM\"\n}","project":"Superalgos","sensorBots":[],"apiDataFetcherBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Fisher Transform","config":"{\n \"codeName\": \"Fisher\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces Fisher Transform\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market FisherTransform","project":"Superalgos","id":"417d48b6-505e-44da-819c-9bae7ef27be1","savedPayload":{"position":{"x":21673.17727308033,"y":18128.238464379032},"targetPosition":{"x":21699.059177590585,"y":18224.831047007938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9323c88c-d610-4539-b736-cbb8653cef13"}}}],"outputDatasetFolders":[],"id":"8e54b923-f47a-44c4-9463-0ad427cad349","savedPayload":{"position":{"x":21699.059177590585,"y":18224.831047007938},"targetPosition":{"x":21737.882034355964,"y":18369.7199209513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Fisher Transform Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"6a19b7ec-c85e-4acd-aa3d-476d56899896","savedPayload":{"position":{"x":21740.52774788672,"y":17950.03836249691},"targetPosition":{"x":21815.52774788672,"y":18079.942173064577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"6d52d241-dc08-45b6-af54-d4a3d3884211"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"2f8cefb9-94ad-4126-b666-cfb9744a90c6","savedPayload":{"position":{"x":21854.3506046521,"y":17935.053299121217},"targetPosition":{"x":21815.52774788672,"y":18079.942173064577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"e246ec47-4cad-43e5-a2ec-4a9a12f41ea2","savedPayload":{"position":{"x":21945.431558454387,"y":18004.942173064577},"targetPosition":{"x":21815.52774788672,"y":18079.942173064577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"6827047a-9e5f-463f-bceb-e832686975a9","savedPayload":{"position":{"x":21815.52774788672,"y":18079.942173064577},"targetPosition":{"x":21737.882034355964,"y":18369.7199209513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"6d52d241-dc08-45b6-af54-d4a3d3884211","savedPayload":{"position":{"x":21843.948051533946,"y":18263.653903773316},"targetPosition":{"x":21737.882034355964,"y":18369.7199209513},"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","project":"Superalgos","id":"bfafbb28-81d6-42c9-bc1e-9711318c8192","savedPayload":{"position":{"x":22027.659782242685,"y":18292.07420742054},"targetPosition":{"x":21737.882034355964,"y":18369.7199209513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824faLine truncated
@@ -72,6 +72,7 @@
/* Checking if we need to need to emit any event */
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS === 'Idle' && TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_STOPPING === false) {
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS = 'Running'
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_BEGIN = new Date()
}
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS === 'Running' && TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_STOPPING === true) {
@@ -8,7 +8,8 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) {
chatId: undefined,
sendMessage: sendMessage,
initialize: initialize,
finalize: finalize
finalize: finalize,
interpretCommand: interpretCommand
}
return thisObject
@@ -22,8 +23,18 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) {
thisObject.telegramBot = new Telegraf(botToken)
thisObject.telegramBot.start((ctx) => ctx.reply('Hi! I am the Telegram Bot that will tell you what happens with your trading session.'))
thisObject.telegramBot.help((ctx) => ctx.replyWithHTML('<b><u>SUPERALGOS BOT HELP</u></b>\n\n• Use /stop to stop the session.\n• Use /help to receive this help message.'))
thisObject.telegramBot.help((ctx) => ctx.replyWithHTML('<b><u>SUPERALGOS BOT HELP</u></b>\n\n' +
'• Use /stop to stop the session.\n' +
'• Use /help to receive this help message.\n' +
'• Use /balances for episode balances.\n' +
'• Use /counters for episode counters.\n' +
'• Use /statistics for episode statistics.\n' +
'• Use /uptime for episode uptime.'))
thisObject.telegramBot.command('stop', (ctx) => TS.projects.superalgos.functionLibraries.sessionFunctions.stopSession(processIndex, 'by command from Telegram.'))
thisObject.telegramBot.command('balances', (ctx) => interpretCommand('balances', processIndex))
thisObject.telegramBot.command('uptime', (ctx) => interpretCommand('uptime', processIndex))
thisObject.telegramBot.command('statistics', (ctx) => interpretCommand('statistics', processIndex))
thisObject.telegramBot.command('counters', (ctx) => interpretCommand('counters', processIndex))
thisObject.telegramBot.launch()
const Telegram = require('telegraf/telegram')
@@ -31,21 +42,102 @@ exports.newSuperalgosBotModulesTelegramBot = function (processIndex) {
thisObject.telegramAPI = new Telegram(botToken)
const message = "Telegram bot is starting. For assistance type /help."
thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] initializeTelegramBot -> Telegram API error -> err = " + err))
thisObject.telegramAPI.sendMessage(thisObject.chatId, message)
} catch (err) {
parentLogger.write(MODULE_NAME, "[WARN] initialize -> err = " + err.stack);
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] initialize -> Telegram API error -> err = " + err.stack)
}
}
function finalize() {
const message = "Telegram bot is signing off."
thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] finalize -> Telegram API error -> err = " + err))
thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] finalize -> Telegram API error -> err = " + err.stack))
}
function sendMessage(message) {
thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] announce -> Telegram API error -> err = " + err))
thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] sendMessage -> Telegram API error -> err = " + err.stack))
}
function interpretCommand(command, processIndex) {
let message
let tradingEngine
let tradingEpisode
let sessionNode
let sessionName
tradingEngine = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine
tradingEpisode = tradingEngine.tradingCurrent.tradingEpisode
sessionNode = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE
sessionName = sessionNode.name
switch (command) {
case 'balances': {
let baseAsset = TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName
let quotedAsset = TS.projects.superalgos.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName
message = "<b><u>SUPERALGOS BALANCES</u></b>\n\n<b>Trading Session:</b> " + sessionName +
"\n<b>Pair:</b> " + baseAsset + "/" + quotedAsset +
"\n<b>Base Asset:</b> " + tradingEpisode.episodeBaseAsset.balance.value + " " + baseAsset +
"\n<b>Quoted Asset:</b> " + tradingEpisode.episodeQuotedAsset.balance.value + " " + quotedAsset
break
}
case 'uptime': {
let sessionBegin = TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_BEGIN
let dateBegin = new Date(sessionBegin)
let dateNow = new Date();
let seconds = Math.floor((dateNow - (dateBegin))/1000)
let minutes = Math.floor(seconds/60)
let hours = Math.floor(minutes/60)
let days = Math.floor(hours/24)
hours = hours-(days*24)
minutes = minutes-(days*24*60)-(hours*60)
seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60)
let uptime = days + "D, " + hours + "H, " + minutes + "M, " + seconds + "S"
message = "<b><u>SUPERALGOS UPTIME</u></b>\n\n<b>Trading Session:</b> " + sessionName +
"\n<b>Uptime:</b> " + uptime
break
}
case 'statistics': {
message = "<b><u>SUPERALGOS STATISTICS</u></b>\n\n<b>Trading Session:</b> " + sessionName +
"\n<b>Days:</b> " + (tradingEpisode.tradingEpisodeStatistics.days.value).toFixed(2) +
"\n<b>Profit Loss:</b> " + tradingEpisode.tradingEpisodeStatistics.profitLoss.value +
"\n<b>ROI:</b> " + (tradingEpisode.tradingEpisodeStatistics.ROI.value).toFixed(2) +
"\n<b>Annualized Rate Of Return:</b> " + (tradingEpisode.tradingEpisodeStatistics.annualizedRateOfReturn.value).toFixed(2) +
"\n<b>Hit Fail:</b> " + tradingEpisode.tradingEpisodeStatistics.hitFail.value
break
}
case 'counters': {
message = "<b><u>SUPERALGOS COUNTERS</u></b>\n\n<b>Trading Session:</b> " + sessionName +
"\n<b>Periods:</b> " + tradingEpisode.tradingEpisodeCounters.periods.value +
"\n<b>Strategies:</b> " + tradingEpisode.tradingEpisodeCounters.strategies.value +
"\n<b>Positions:</b> " + tradingEpisode.tradingEpisodeCounters.positions.value +
"\n<b>Orders:</b> " + tradingEpisode.tradingEpisodeCounters.orders.value +
"\n<b>Hits:</b> " + tradingEpisode.tradingEpisodeCounters.hits.value +
"\n<b>Fails:</b> " + tradingEpisode.tradingEpisodeCounters.fails.value
break
}
}
thisObject.telegramAPI.sendMessage(thisObject.chatId, message, {parse_mode: 'HTML'}).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] sendMessage -> Telegram API error -> err = " + err.stack))
}
}
@@ -72,6 +72,7 @@
/* Checking if we need to need to emit any event */
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS === 'Idle' && TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_STOPPING === false) {
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS = 'Running'
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_BEGIN = new Date()
}
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_STATUS === 'Running' && TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_STOPPING === true) {
@@ -22,6 +22,7 @@ exports.newSuperalgosGlobalsProcessVariables = function () {
MAIN_LOOP_COUNTER This is the counter of main loops for a bot process.
SOCIAL_BOTS_MODULE This is the module that controls social bots.
SESSION_STATUS This tell us the status of the session at any given time.
SESSION_BEGIN This tell us the date time the session was begun.
IS_SESSION_STOPPING This tell us if a session is in the process of being stopped.
IS_SESSION_RESUMING This tell us if a session is resuming from the state at the previous execution.
IS_SESSION_FIRST_LOOP This tell us if we are at the execution of the first loop of the bot related to this session.