diff --git a/LowFrequencyTrading/TradingEngine.js b/LowFrequencyTrading/TradingEngine.js index 7916f7b46..3c3255225 100644 --- a/LowFrequencyTrading/TradingEngine.js +++ b/LowFrequencyTrading/TradingEngine.js @@ -48,12 +48,12 @@ exports.newTradingEngine = function newTradingEngine(bot, logger) { } function setCurrentCandle(candle) { - tradingEngine.current.candle.begin.value = candle.begin - tradingEngine.current.candle.end.value = candle.end - tradingEngine.current.candle.open.value = candle.open - tradingEngine.current.candle.close.value = candle.close - tradingEngine.current.candle.min.value = candle.min - tradingEngine.current.candle.max.value = candle.max + tradingEngine.current.episode.candle.begin.value = candle.begin + tradingEngine.current.episode.candle.end.value = candle.end + tradingEngine.current.episode.candle.open.value = candle.open + tradingEngine.current.episode.candle.close.value = candle.close + tradingEngine.current.episode.candle.min.value = candle.min + tradingEngine.current.episode.candle.max.value = candle.max } function cloneValues(originNode, destinationNode) { @@ -146,57 +146,57 @@ exports.newTradingEngine = function newTradingEngine(bot, logger) { function updateDistanceToEventsCounters() { /* Keeping Distance Counters Up-to-date while avoinding counting before the first event happens. */ if ( - tradingEngine.current.distanceToEvent.triggerOn.value > 0 + tradingEngine.current.episode.distanceToEvent.triggerOn.value > 0 ) { - tradingEngine.current.distanceToEvent.triggerOn.value++ + tradingEngine.current.episode.distanceToEvent.triggerOn.value++ } if ( - tradingEngine.current.distanceToEvent.triggerOff.value > 0 + tradingEngine.current.episode.distanceToEvent.triggerOff.value > 0 ) { - tradingEngine.current.distanceToEvent.triggerOff.value++ + tradingEngine.current.episode.distanceToEvent.triggerOff.value++ } if ( - tradingEngine.current.distanceToEvent.takePosition.value > 0 + tradingEngine.current.episode.distanceToEvent.takePosition.value > 0 ) { - tradingEngine.current.distanceToEvent.takePosition.value++ + tradingEngine.current.episode.distanceToEvent.takePosition.value++ } if ( - tradingEngine.current.distanceToEvent.closePosition.value > 0 + tradingEngine.current.episode.distanceToEvent.closePosition.value > 0 ) { - tradingEngine.current.distanceToEvent.closePosition.value++ + tradingEngine.current.episode.distanceToEvent.closePosition.value++ } if ( - tradingEngine.current.distanceToEvent.nextPhase.value > 0 + tradingEngine.current.episode.distanceToEvent.nextPhase.value > 0 ) { - tradingEngine.current.distanceToEvent.nextPhase.value++ + tradingEngine.current.episode.distanceToEvent.nextPhase.value++ } if ( - tradingEngine.current.distanceToEvent.moveToPhase.value > 0 + tradingEngine.current.episode.distanceToEvent.moveToPhase.value > 0 ) { - tradingEngine.current.distanceToEvent.moveToPhase.value++ + tradingEngine.current.episode.distanceToEvent.moveToPhase.value++ } if ( - tradingEngine.current.distanceToEvent.createOrder.value > 0 + tradingEngine.current.episode.distanceToEvent.createOrder.value > 0 ) { - tradingEngine.current.distanceToEvent.createOrder.value++ + tradingEngine.current.episode.distanceToEvent.createOrder.value++ } if ( - tradingEngine.current.distanceToEvent.cancelOrder.value > 0 + tradingEngine.current.episode.distanceToEvent.cancelOrder.value > 0 ) { - tradingEngine.current.distanceToEvent.cancelOrder.value++ + tradingEngine.current.episode.distanceToEvent.cancelOrder.value++ } if ( - tradingEngine.current.distanceToEvent.closeOrder.value > 0 + tradingEngine.current.episode.distanceToEvent.closeOrder.value > 0 ) { - tradingEngine.current.distanceToEvent.closeOrder.value++ + tradingEngine.current.episode.distanceToEvent.closeOrder.value++ } } diff --git a/LowFrequencyTrading/TradingEpisode.js b/LowFrequencyTrading/TradingEpisode.js index b8c21f513..5dc450d8c 100644 --- a/LowFrequencyTrading/TradingEpisode.js +++ b/LowFrequencyTrading/TradingEpisode.js @@ -58,8 +58,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) { tradingEngine.current.episode.status.value = 'Open' tradingEngine.current.episode.serialNumber.value = 1 tradingEngine.current.episode.identifier.value = global.UNIQUE_ID() - tradingEngine.current.episode.begin.value = tradingEngine.current.candle.begin.value - tradingEngine.current.episode.beginRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.episode.begin.value = tradingEngine.current.episode.candle.begin.value + tradingEngine.current.episode.beginRate.value = tradingEngine.current.episode.candle.close.value } } @@ -69,8 +69,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) { function closeEpisode() { tradingEngine.current.episode.status.value = 'Closed' - tradingEngine.current.episode.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.episode.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.episode.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.episode.endRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.episode.episodeBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.episode.episodeQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value } @@ -81,8 +81,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) { function updateEnds() { if (tradingEngine.current.episode.status.value === 'Open') { - tradingEngine.current.episode.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.episode.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.episode.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.episode.endRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.episode.episodeBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.episode.episodeQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value } @@ -113,7 +113,7 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) { /* Updating Profit Loss */ tradingEngine.current.episode.episodeStatistics.profitLoss.value = - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.candle.close.value + + tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.episode.candle.close.value + tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value tradingEngine.current.episode.episodeStatistics.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.profitLoss.value, 10) @@ -121,12 +121,12 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) { /* Updating ROI */ tradingEngine.current.episode.episodeStatistics.ROI.value = ( - sessionParameters.sessionBaseAsset.config.initialBalance * tradingEngine.current.candle.close.value + - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.candle.close.value + + sessionParameters.sessionBaseAsset.config.initialBalance * tradingEngine.current.episode.candle.close.value + + tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.episode.candle.close.value + sessionParameters.sessionQuotedAsset.config.initialBalance + tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) / ( - sessionParameters.sessionBaseAsset.config.initialBalance * tradingEngine.current.candle.close.value + + sessionParameters.sessionBaseAsset.config.initialBalance * tradingEngine.current.episode.candle.close.value + sessionParameters.sessionQuotedAsset.config.initialBalance ) - 1 diff --git a/LowFrequencyTrading/TradingExecution.js b/LowFrequencyTrading/TradingExecution.js index d58869724..131bb6713 100644 --- a/LowFrequencyTrading/TradingExecution.js +++ b/LowFrequencyTrading/TradingExecution.js @@ -135,7 +135,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE } case 'Open': { /* Update this order properties */ - tradingEngineOrder.end.value = tradingEngine.current.candle.end.value + tradingEngineOrder.end.value = tradingEngine.current.episode.candle.end.value tradingEngineOrder.orderCounters.periods.value++ tradingEngineOrder.orderStatistics.days.value = tradingEngineOrder.orderCounters.periods.value * sessionParameters.timeFrame.config.value / global.ONE_DAY_IN_MILISECONDS @@ -191,13 +191,13 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngine.current.episode.episodeCounters.orders.value++ /* Initialize this */ - tradingEngine.current.distanceToEvent.createOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.createOrder.value = 1 /* Create Order Procedure */ tradingEngineOrder.status.value = 'Open' tradingEngineOrder.identifier.value = global.UNIQUE_ID() - tradingEngineOrder.begin.value = tradingEngine.current.candle.begin.value - tradingEngineOrder.end.value = tradingEngine.current.candle.end.value + tradingEngineOrder.begin.value = tradingEngine.current.episode.candle.begin.value + tradingEngineOrder.end.value = tradingEngine.current.episode.candle.end.value tradingEngineOrder.serialNumber.value = tradingEngine.current.episode.episodeCounters.orders.value tradingEngineOrder.orderName.value = tradingSystemOrder.name tradingEngineOrder.algorithmName.value = executionAlgorithm.name @@ -205,7 +205,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE function calculateOrderRate() { /* By default this is the order rate and it is the rate that applies to Market Orders */ - tradingEngineOrder.rate.value = tradingEngine.current.candle.close.value + tradingEngineOrder.rate.value = tradingEngine.current.episode.candle.close.value /* Optional Rate Definition */ if (tradingSystemOrder.orderRate !== undefined) { @@ -458,7 +458,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = 'Filled' /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 } } } @@ -515,7 +515,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = 'Filled' /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 } if (order.remaining > 0 && order.status === AT_EXCHANGE_STATUS.CLOSED) { @@ -524,7 +524,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = 'Closed at the Exchange' /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 } if (order.status === AT_EXCHANGE_STATUS.CANCELLED) { @@ -533,7 +533,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = 'Cancelled at the Exchange' /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 } syncWithExchange(tradingSystemOrder, tradingEngineOrder, order) @@ -734,7 +734,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = exitType /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 recalculateStageSize(tradingEngineOrder) } @@ -765,7 +765,7 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE tradingEngineOrder.exitType.value = exitType /* Initialize this */ - tradingEngine.current.distanceToEvent.closeOrder.value = 1 + tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 /* Perhaps the order was filled a bit more between the last time we checked and when it was cancelled. diff --git a/LowFrequencyTrading/TradingPosition.js b/LowFrequencyTrading/TradingPosition.js index dad19389b..2666b1b80 100644 --- a/LowFrequencyTrading/TradingPosition.js +++ b/LowFrequencyTrading/TradingPosition.js @@ -50,8 +50,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.position.status.value = 'Open' tradingEngine.current.position.serialNumber.value = tradingEngine.current.episode.episodeCounters.positions.value tradingEngine.current.position.identifier.value = global.UNIQUE_ID() - tradingEngine.current.position.begin.value = tradingEngine.current.candle.begin.value - tradingEngine.current.position.beginRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.position.begin.value = tradingEngine.current.episode.candle.begin.value + tradingEngine.current.position.beginRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.position.positionBaseAsset.beginBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.position.positionQuotedAsset.beginBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value tradingEngine.current.position.situationName.value = situationName @@ -66,7 +66,7 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.episode.episodeCounters.positions.value++ /* Inicializing this counter */ - tradingEngine.current.distanceToEvent.takePosition.value = 1 + tradingEngine.current.episode.distanceToEvent.takePosition.value = 1 } function closingPosition(exitType) { @@ -76,8 +76,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng function closePosition() { tradingEngine.current.position.status.value = 'Closed' - tradingEngine.current.position.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.position.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.position.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.position.endRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.position.positionBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.position.positionQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value @@ -229,8 +229,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng function updateEnds() { if (tradingEngine.current.position.status.value === 'Open') { - tradingEngine.current.position.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.position.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.position.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.position.endRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.position.positionBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.position.positionQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value } diff --git a/LowFrequencyTrading/TradingRecords.js b/LowFrequencyTrading/TradingRecords.js index 5402bea7f..d80bac553 100644 --- a/LowFrequencyTrading/TradingRecords.js +++ b/LowFrequencyTrading/TradingRecords.js @@ -219,8 +219,8 @@ exports.newTradingRecords = function newTradingRecords(bot, logger) { of the day? Easy: the end of the candle must be 1 millisecod before the next day. That happens at any time frame. */ - let currentDay = new Date(tradingEngine.current.candle.end.value) - let nextDay = new Date(tradingEngine.current.candle.end.value + 1) + let currentDay = new Date(tradingEngine.current.episode.candle.end.value) + let nextDay = new Date(tradingEngine.current.episode.candle.end.value + 1) if (currentDay.getUTCDate() !== nextDay.getUTCDate()) { /* We will save the object only if it is closed, becasuse we are at the last candle of the day. @@ -302,7 +302,7 @@ exports.newTradingRecords = function newTradingRecords(bot, logger) { let recordProperty = product.record.properties[j] if (recordProperty.config.codeName === 'end') { let end = record[j] - if (end >= tradingEngine.current.candle.end.value) { + if (end >= tradingEngine.current.episode.candle.end.value) { outputFile.splice(i, 1) pruneOutputFile(product, outputFile) return diff --git a/LowFrequencyTrading/TradingSimulation.js b/LowFrequencyTrading/TradingSimulation.js index 67ac1ef79..970ddecc7 100644 --- a/LowFrequencyTrading/TradingSimulation.js +++ b/LowFrequencyTrading/TradingSimulation.js @@ -69,10 +69,10 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT let diff = lastBegin - firstBegin let amount = diff / sessionParameters.timeFrame.config.value - tradingEngine.current.candle.index.value = Math.trunc(amount) + 1 // Because we need to start from the next candle - if (tradingEngine.current.candle.index.value < 0 || tradingEngine.current.candle.index.value > candles.length - 1) { + tradingEngine.current.episode.candle.index.value = Math.trunc(amount) + 1 // Because we need to start from the next candle + if (tradingEngine.current.episode.candle.index.value < 0 || tradingEngine.current.episode.candle.index.value > candles.length - 1) { logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> Cannot resume simulation.') - logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> tradingEngine.current.candle.index.value = ' + tradingEngine.current.candle.index.value) + logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> tradingEngine.current.episode.candle.index.value = ' + tradingEngine.current.episode.candle.index.value) logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> firstBegin = ' + firstBegin) logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> lastBegin = ' + lastBegin) logger.write(MODULE_NAME, '[ERROR] runSimulation -> initializeLoop -> diff = ' + diff) @@ -88,14 +88,14 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT let diff = targetEnd - firstEnd let amount = diff / sessionParameters.timeFrame.config.value - tradingEngine.current.candle.index.value = Math.trunc(amount) - if (tradingEngine.current.candle.index.value < 0) { tradingEngine.current.candle.index.value = 0 } - if (tradingEngine.current.candle.index.value > candles.length - 1) { + tradingEngine.current.episode.candle.index.value = Math.trunc(amount) + if (tradingEngine.current.episode.candle.index.value < 0) { tradingEngine.current.episode.candle.index.value = 0 } + if (tradingEngine.current.episode.candle.index.value > candles.length - 1) { /* This will happen when the sessionParameters.timeRange.config.initialDatetime is beyond the last candle available, meaning that the dataSet needs to be updated with more up-to-date data. */ - tradingEngine.current.candle.index.value = candles.length - 1 + tradingEngine.current.episode.candle.index.value = candles.length - 1 } } @@ -103,8 +103,8 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT } async function loop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Processing candle # ' + tradingEngine.current.candle.index.value) } - let candle = candles[tradingEngine.current.candle.index.value] // This is the current candle the Simulation is working at. + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Processing candle # ' + tradingEngine.current.episode.candle.index.value) } + let candle = candles[tradingEngine.current.episode.candle.index.value] // This is the current candle the Simulation is working at. if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle Begin @ ' + (new Date(candle.begin)).toLocaleString()) } if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle End @ ' + (new Date(candle.end)).toLocaleString()) } @@ -168,12 +168,12 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT return } - if (tradingEngine.current.candle.index.value + 1 < candles.length) { + if (tradingEngine.current.episode.candle.index.value + 1 < candles.length) { /* Add new records to the process output */ tradingRecordsModule.appendRecords() - tradingEngine.current.candle.index.value++ + tradingEngine.current.episode.candle.index.value++ setImmediate(loop) // This will execute the next loop in the next iteration of the NodeJs event loop allowing for other callbacks to be executed. } else { @@ -217,11 +217,11 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT function heartBeat() { /* We will produce a simulation level heartbeat in order to inform the user this is running. */ - heartBeatDate = new Date(Math.trunc(tradingEngine.current.candle.begin.value / global.ONE_DAY_IN_MILISECONDS) * global.ONE_DAY_IN_MILISECONDS) + heartBeatDate = new Date(Math.trunc(tradingEngine.current.episode.candle.begin.value / global.ONE_DAY_IN_MILISECONDS) * global.ONE_DAY_IN_MILISECONDS) if (heartBeatDate.valueOf() !== previousHeartBeatDate) { let processingDate = heartBeatDate.getUTCFullYear() + '-' + utilities.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(heartBeatDate.getUTCDate(), 2) - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Simulation ' + bot.sessionKey + ' Loop # ' + tradingEngine.current.candle.index.value + ' @ ' + processingDate) } + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Simulation ' + bot.sessionKey + ' Loop # ' + tradingEngine.current.episode.candle.index.value + ' @ ' + processingDate) } /* Telling the world we are alive and doing well */ let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime) @@ -314,15 +314,15 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT for (let i = 0; i < pArray.length; i++) { element = pArray[i] - if (tradingEngine.current.candle.end.value === element.end) { // when there is an exact match at the end we take that element + if (tradingEngine.current.episode.candle.end.value === element.end) { // when there is an exact match at the end we take that element return element } else { if ( i > 0 && - element.end > tradingEngine.current.candle.end.value + element.end > tradingEngine.current.episode.candle.end.value ) { let previousElement = pArray[i - 1] - if (previousElement.end < tradingEngine.current.candle.end.value) { + if (previousElement.end < tradingEngine.current.episode.candle.end.value) { return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element. } else { return @@ -345,7 +345,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT */ if (bot.processingDailyFiles) { // We are processing Daily Files let candlesPerDay = global.ONE_DAY_IN_MILISECONDS / sessionParameters.timeFrame.config.value - if (tradingEngine.current.candle.index.value === candles.length - 1) { + if (tradingEngine.current.episode.candle.index.value === candles.length - 1) { if ((candles.length < candlesPerDay) || (candles.length > candlesPerDay && candles.length < candlesPerDay * 2)) { if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkLastCandle -> Skipping Candle because it is the last one and has not been closed yet.') } return false @@ -356,7 +356,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT } } } else { // We are processing Market Files - if (tradingEngine.current.candle.index.value === candles.length - 1) { + if (tradingEngine.current.episode.candle.index.value === candles.length - 1) { if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkLastCandle -> Skipping Candle because it is the last one and has not been closed yet.') } return false } @@ -366,11 +366,11 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT function checkInitialAndFinalDatetime() { /* Here we check that the current candle is not outside of user-defined time range at the session parameters.*/ - if (tradingEngine.current.candle.end.value < sessionParameters.timeRange.config.initialDatetime) { + if (tradingEngine.current.episode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) { if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle before the sessionParameters.timeRange.config.initialDatetime.') } return false } - if (tradingEngine.current.candle.begin.value > sessionParameters.timeRange.config.finalDatetime) { + if (tradingEngine.current.episode.candle.begin.value > sessionParameters.timeRange.config.finalDatetime) { if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle after the sessionParameters.timeRange.config.finalDatetime.') } return false } @@ -387,7 +387,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT because there the balances have shifted from their resting position. */ - let stopRunningDate = (new Date(tradingEngine.current.candle.begin.value)).toLocaleString() + let stopRunningDate = (new Date(tradingEngine.current.episode.candle.begin.value)).toLocaleString() if (sessionParameters.sessionBaseAsset.config.minimumBalance !== undefined) { if (tradingEngine.current.episode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) { diff --git a/LowFrequencyTrading/TradingStages.js b/LowFrequencyTrading/TradingStages.js index a43bd3af8..640feae4d 100644 --- a/LowFrequencyTrading/TradingStages.js +++ b/LowFrequencyTrading/TradingStages.js @@ -196,7 +196,7 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM tradingStrategyModule.openStrategy(j, situation.name, strategy.name) /* Initialize this */ - tradingEngine.current.distanceToEvent.triggerOn.value = 1 + tradingEngine.current.episode.distanceToEvent.triggerOn.value = 1 announcementsModule.makeAnnoucements(triggerStage.triggerOn) announcementsModule.makeAnnoucements(triggerStage) @@ -243,7 +243,7 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM tradingSystem.highlights.push(triggerStage.triggerOff.id) tradingSystem.highlights.push(triggerStage.id) - tradingEngine.current.distanceToEvent.triggerOff.value = 1 + tradingEngine.current.episode.distanceToEvent.triggerOff.value = 1 announcementsModule.makeAnnoucements(triggerStage.triggerOff) changeStageStatus('Trigger Stage', 'Closed') tradingStrategyModule.closeStrategy('Trigger Off') @@ -826,11 +826,11 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM if ( ( tradingEngine.current.position.stopLoss.stopLossPosition.value === 'Above' && - tradingEngine.current.candle.max.value >= tradingEngine.current.position.stopLoss.value + tradingEngine.current.episode.candle.max.value >= tradingEngine.current.position.stopLoss.value ) || ( tradingEngine.current.position.stopLoss.stopLossPosition.value === 'Below' && - tradingEngine.current.candle.min.value <= tradingEngine.current.position.stopLoss.value + tradingEngine.current.episode.candle.min.value <= tradingEngine.current.position.stopLoss.value ) ) { logger.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Stop Loss was hit.') @@ -846,11 +846,11 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM if ( ( tradingEngine.current.position.takeProfit.takeProfitPosition.value === 'Below' && - tradingEngine.current.candle.min.value <= tradingEngine.current.position.takeProfit.value + tradingEngine.current.episode.candle.min.value <= tradingEngine.current.position.takeProfit.value ) || ( tradingEngine.current.position.takeProfit.takeProfitPosition.value === 'Above' && - tradingEngine.current.candle.max.value >= tradingEngine.current.position.takeProfit.value + tradingEngine.current.episode.candle.max.value >= tradingEngine.current.position.takeProfit.value ) ) { logger.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Take Profit was hit.') @@ -1010,8 +1010,8 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM tradingStrategyModule.closeStrategy('Position Closed') /* Distance to Events Updates */ - tradingEngine.current.distanceToEvent.closePosition.value = 1 - tradingEngine.current.distanceToEvent.triggerOff.value = 1 + tradingEngine.current.episode.distanceToEvent.closePosition.value = 1 + tradingEngine.current.episode.distanceToEvent.triggerOff.value = 1 } } @@ -1076,34 +1076,34 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM function openStage(stage) { /* Recording the opening at the Trading Engine Data Structure */ - stage.begin.value = tradingEngine.current.candle.begin.value - stage.beginRate.value = tradingEngine.current.candle.close.value - stage.end.value = tradingEngine.current.candle.end.value + stage.begin.value = tradingEngine.current.episode.candle.begin.value + stage.beginRate.value = tradingEngine.current.episode.candle.close.value + stage.end.value = tradingEngine.current.episode.candle.end.value } function closeStage(stage) { /* Recording the closing at the Trading Engine Data Structure */ - stage.end.value = tradingEngine.current.candle.end.value - stage.endRate.value = tradingEngine.current.candle.close.value + stage.end.value = tradingEngine.current.episode.candle.end.value + stage.endRate.value = tradingEngine.current.episode.candle.close.value } } function updateEnds() { if (tradingEngine.current.strategyTriggerStage.status.value === 'Open') { - tradingEngine.current.strategyTriggerStage.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategyTriggerStage.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.strategyTriggerStage.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategyTriggerStage.endRate.value = tradingEngine.current.episode.candle.close.value } if (tradingEngine.current.strategyOpenStage.status.value === 'Open') { - tradingEngine.current.strategyOpenStage.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategyOpenStage.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.strategyOpenStage.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategyOpenStage.endRate.value = tradingEngine.current.episode.candle.close.value } if (tradingEngine.current.strategyManageStage.status.value === 'Open') { - tradingEngine.current.strategyManageStage.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategyManageStage.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.strategyManageStage.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategyManageStage.endRate.value = tradingEngine.current.episode.candle.close.value } if (tradingEngine.current.strategyCloseStage.status.value === 'Open') { - tradingEngine.current.strategyCloseStage.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategyCloseStage.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.strategyCloseStage.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategyCloseStage.endRate.value = tradingEngine.current.episode.candle.close.value } } diff --git a/LowFrequencyTrading/TradingStrategy.js b/LowFrequencyTrading/TradingStrategy.js index 4f48686b3..c3ec62c47 100644 --- a/LowFrequencyTrading/TradingStrategy.js +++ b/LowFrequencyTrading/TradingStrategy.js @@ -33,9 +33,9 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng tradingEngine.current.strategy.status.value = 'Open' tradingEngine.current.strategy.serialNumber.value = tradingEngine.current.episode.episodeCounters.strategies.value tradingEngine.current.strategy.identifier.value = global.UNIQUE_ID() - tradingEngine.current.strategy.begin.value = tradingEngine.current.candle.begin.value - tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategy.beginRate.value = tradingEngine.current.candle.min.value + tradingEngine.current.strategy.begin.value = tradingEngine.current.episode.candle.begin.value + tradingEngine.current.strategy.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategy.beginRate.value = tradingEngine.current.episode.candle.min.value tradingEngine.current.strategy.index.value = index tradingEngine.current.strategy.situationName.value = situationName @@ -48,8 +48,8 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng function closeStrategy(exitType) { tradingEngine.current.strategy.status.value = 'Closed' tradingEngine.current.strategy.exitType.value = exitType - tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.min.value + tradingEngine.current.strategy.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategy.endRate.value = tradingEngine.current.episode.candle.min.value /* Now that the strategy is closed, it is the right time to move this strategy from current to last at the Trading Engine data structure. */ @@ -58,8 +58,8 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng function updateEnds() { if (tradingEngine.current.strategy.status.value === 'Open') { - tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value - tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.close.value + tradingEngine.current.strategy.end.value = tradingEngine.current.episode.candle.end.value + tradingEngine.current.strategy.endRate.value = tradingEngine.current.episode.candle.close.value } }