diff --git a/DebugLog.js b/DebugLog.js index 52b56bde4..1832d53db 100644 --- a/DebugLog.js +++ b/DebugLog.js @@ -1,6 +1,5 @@ exports.newDebugLog = function newDebugLog() { - const ROOT_DIR = './'; const MODULE_NAME = "DebugLog"; let executionDatetime = "D." + global.EXECUTION_DATETIME.getUTCFullYear() + diff --git a/IndicatorBot.js b/IndicatorBot.js index 9e3d17574..30537cb6f 100644 --- a/IndicatorBot.js +++ b/IndicatorBot.js @@ -1,19 +1,17 @@ exports.newIndicatorBot = function newIndicatorBot(bot, parentLogger) { - const ROOT_DIR = './'; - const MODULE_NAME = "Indicator Bot"; const FULL_LOG = true; let USER_BOT_MODULE; let COMMONS_MODULE; - const MULTI_PERIOD_MARKET = require(ROOT_DIR + 'MultiPeriodMarket'); - const MULTI_PERIOD_DAILY = require(ROOT_DIR + 'MultiPeriodDaily'); + const MULTI_PERIOD_MARKET = require(global.ROOT_DIR + 'MultiPeriodMarket'); + const MULTI_PERIOD_DAILY = require(global.ROOT_DIR + 'MultiPeriodDaily'); const FILE_STORAGE = require('./FileStorage.js'); let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. let nextLoopTimeoutHandle; @@ -118,13 +116,13 @@ processHeartBeat() /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(ROOT_DIR + 'StatusDependencies'); - const DATA_DEPENDENCIES = require(ROOT_DIR + 'DataDependencies'); - const DATA_SET = require(ROOT_DIR + 'DataSet'); - const PROCESS_EXECUTION_EVENTS = require(ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(ROOT_DIR + 'ProcessOutput'); + const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); + const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); + const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); + const DATA_DEPENDENCIES = require(global.ROOT_DIR + 'DataDependencies'); + const DATA_SET = require(global.ROOT_DIR + 'DataSet'); + const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); + const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. diff --git a/LowFrequencyTrading/TradingSimulation.js b/LowFrequencyTrading/TradingSimulation.js index 83fa02e24..51cc0d8ed 100644 --- a/LowFrequencyTrading/TradingSimulation.js +++ b/LowFrequencyTrading/TradingSimulation.js @@ -47,7 +47,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT /* These are the Modules we will need to run the Simulation */ - const EXCHANGE_API = require(ROOT_DIR + 'ExchangeAPI'); + const EXCHANGE_API = require(global.ROOT_DIR + 'ExchangeAPI'); exchangeAPI = EXCHANGE_API.newExchangeAPI(logger, bot); exchangeAPI.initialize(); @@ -280,44 +280,6 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT callback(tradingSystem, snapshots.headers, snapshots.triggerOn, snapshots.takePosition) } - function getElement(pArray, currentCandle, datasetName) { - if (pArray === undefined) { return } - try { - let element - for (let i = 0; i < pArray.length; i++) { - element = pArray[i] - - if (currentCandle.end === element.end) { // when there is an exact match at the end we take that element - return element - } else { - if ( - i > 0 && - element.end > currentCandle.end - ) { - let previousElement = pArray[i - 1] - if (previousElement.end < currentCandle.end) { - return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element. - } else { - return - } - } - if ( - i === pArray.length - 1 // If we reach the end of the array, then we return the last element. - && - element.end < currentCandle.end - ) { - return element - } - } - } - return - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> datasetName = ' + datasetName) - logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> err = ' + err.stack) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - function heartBeat() { /* We will produce a simulation level heartbeat in order to inform the user this is running. */ heartBeatDate = new Date(Math.trunc(candle.begin / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS) @@ -402,6 +364,37 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT } } + function getElement(pArray, currentCandle, datasetName) { + if (pArray === undefined) { return } + try { + let element + for (let i = 0; i < pArray.length; i++) { + element = pArray[i] + + if (currentCandle.end === element.end) { // when there is an exact match at the end we take that element + return element + } else { + if ( + i > 0 && + element.end > currentCandle.end + ) { + let previousElement = pArray[i - 1] + if (previousElement.end < currentCandle.end) { + return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element. + } else { + return + } + } + } + } + return + } catch (err) { + logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> datasetName = ' + datasetName) + logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> err = ' + err.stack) + callBackFunction(global.DEFAULT_FAIL_RESPONSE) + } + } + function checkIfWeAreAtTheHeadOfTheMarket() { /* We skip the candle at the head of the market because it has not closed yet. The procedure to determine if we are at the head of the market is different diff --git a/Root.js b/Root.js index 329f2eda7..e31c5ab48 100644 --- a/Root.js +++ b/Root.js @@ -35,7 +35,6 @@ global.dailyFilePeriods = JSON.parse(global.dailyFilePeriods); - const ROOT_DIR = './'; const MODULE_NAME = "Root"; const WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START = 10000 // This avoid a race condition that could happen if one process finished before all the other even started. @@ -387,7 +386,7 @@ try { global.TOTAL_PROCESS_INSTANCES_CREATED++ - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; logger = DEBUG_MODULE.newDebugLog(); @@ -452,7 +451,7 @@ try { global.TOTAL_PROCESS_INSTANCES_CREATED++ - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; logger = DEBUG_MODULE.newDebugLog(); @@ -515,7 +514,7 @@ global.TOTAL_PROCESS_INSTANCES_CREATED++ try { - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; logger = DEBUG_MODULE.newDebugLog(); diff --git a/SensorBot.js b/SensorBot.js index bea8a6256..c53f95071 100644 --- a/SensorBot.js +++ b/SensorBot.js @@ -1,7 +1,5 @@ exports.newSensorBot = function newSensorBot(bot, parentLogger) { - const ROOT_DIR = './'; - const MODULE_NAME = "Sensor Bot"; const FULL_LOG = true; @@ -11,7 +9,7 @@ const FILE_STORAGE = require('./FileStorage.js'); let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. let nextLoopTimeoutHandle; @@ -124,11 +122,11 @@ processHeartBeat() /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(ROOT_DIR + 'StatusDependencies'); - const PROCESS_EXECUTION_EVENTS = require(ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(ROOT_DIR + 'ProcessOutput'); + const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); + const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); + const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); + const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); + const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. diff --git a/TradingBot.js b/TradingBot.js index c31de711f..a99df360a 100644 --- a/TradingBot.js +++ b/TradingBot.js @@ -1,21 +1,19 @@ exports.newTradingBot = function newTradingBot(bot, parentLogger) { - const ROOT_DIR = './'; - const MODULE_NAME = "Trading Bot"; const FULL_LOG = true; let USER_BOT_MODULE; let USER_BOT_COMMONS; - const TRADING_PROCESS_MODULE = require(ROOT_DIR + '/LowFrequencyTrading/TradingProcess.js'); + const TRADING_PROCESS_MODULE = require(global.ROOT_DIR + '/LowFrequencyTrading/TradingProcess.js'); const FILE_STORAGE = require('./FileStorage.js'); - const SESSION = require(ROOT_DIR + 'Session'); + const SESSION = require(global.ROOT_DIR + 'Session'); let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); let session = SESSION.newSession(bot, parentLogger) - const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); + const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. let nextLoopTimeoutHandle; @@ -130,13 +128,13 @@ processHeartBeat() /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(ROOT_DIR + 'StatusDependencies'); - const DATA_DEPENDENCIES = require(ROOT_DIR + 'DataDependencies'); - const DATA_SET = require(ROOT_DIR + 'DataSet'); - const PROCESS_EXECUTION_EVENTS = require(ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(ROOT_DIR + 'ProcessOutput'); + const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); + const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); + const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); + const DATA_DEPENDENCIES = require(global.ROOT_DIR + 'DataDependencies'); + const DATA_SET = require(global.ROOT_DIR + 'DataSet'); + const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); + const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. diff --git a/server.js b/server.js index eed0c81f7..b40e410e0 100644 --- a/server.js +++ b/server.js @@ -25,6 +25,8 @@ global.CUSTOM_FAIL_RESPONSE = { message: "Custom Message" }; +global.ROOT_DIR = './'; + const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; global.LOGGER_MAP = new Map() global.SESSION_MAP = new Map()