diff --git a/LowFrequencyTrading/TradingEngine.js b/LowFrequencyTrading/TradingEngine.js index 4ae374756..159e5d392 100644 --- a/LowFrequencyTrading/TradingEngine.js +++ b/LowFrequencyTrading/TradingEngine.js @@ -68,23 +68,24 @@ exports.newTradingEngine = function newTradingEngine(bot, logger) { function setCurrentCycle(cycle) { switch (cycle) { case 'First': { - tradingEngine.current.episode.cycle.begin.value = tradingEngine.current.episode.candle.begin.value + tradingEngine.current.episode.cycle.begin.value = + tradingEngine.current.episode.candle.begin.value + + sessionParameters.timeFrame.config.value tradingEngine.current.episode.cycle.end.value = tradingEngine.current.episode.candle.begin.value + - ( - tradingEngine.current.episode.candle.end.value - - tradingEngine.current.episode.candle.begin.value + 1 - ) / 2 - 1 + sessionParameters.timeFrame.config.value + + sessionParameters.timeFrame.config.value / 4 - 1 break } case 'Second': { tradingEngine.current.episode.cycle.begin.value = tradingEngine.current.episode.candle.begin.value + - ( - tradingEngine.current.episode.candle.end.value - - tradingEngine.current.episode.candle.begin.value + 1 - ) / 2 - tradingEngine.current.episode.cycle.end.value = tradingEngine.current.episode.candle.end.value + sessionParameters.timeFrame.config.value + + sessionParameters.timeFrame.config.value / 4 + tradingEngine.current.episode.cycle.end.value = + tradingEngine.current.episode.candle.begin.value + + sessionParameters.timeFrame.config.value + + sessionParameters.timeFrame.config.value * 2 / 4 - 1 break } } diff --git a/LowFrequencyTrading/TradingOrders.js b/LowFrequencyTrading/TradingOrders.js index cb38120c4..24819f706 100644 --- a/LowFrequencyTrading/TradingOrders.js +++ b/LowFrequencyTrading/TradingOrders.js @@ -164,6 +164,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Cancel the order at the Exchange, if needed. */ await exchangeCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, 'Cancel Event') + + updateEndsWithCycle(tradingEngineOrder) } } } @@ -229,8 +231,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Create Order Procedure */ tradingEngineOrder.status.value = 'Open' tradingEngineOrder.identifier.value = global.UNIQUE_ID() - tradingEngineOrder.begin.value = tradingEngine.current.episode.candle.end.value - tradingEngineOrder.end.value = tradingEngine.current.episode.candle.end.value + tradingEngineOrder.begin.value = tradingEngine.current.episode.cycle.begin.value + tradingEngineOrder.end.value = tradingEngine.current.episode.cycle.end.value tradingEngineOrder.serialNumber.value = tradingEngine.current.episode.episodeCounters.orders.value tradingEngineOrder.orderName.value = tradingSystemOrder.name tradingEngineOrder.algorithmName.value = executionAlgorithm.name @@ -520,6 +522,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Initialize this */ tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 + + updateEndsWithCycle(tradingEngineOrder) } } } @@ -576,6 +580,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Initialize this */ tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 + + updateEndsWithCycle(tradingEngineOrder) } if (order.remaining > 0 && order.status === AT_EXCHANGE_STATUS.CLOSED) { @@ -585,6 +591,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Initialize this */ tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 + + updateEndsWithCycle(tradingEngineOrder) } if (order.status === AT_EXCHANGE_STATUS.CANCELLED) { @@ -594,6 +602,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Initialize this */ tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 + + updateEndsWithCycle(tradingEngineOrder) } syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) @@ -904,6 +914,10 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM } } + function updateEndsWithCycle(tradingEngineOrder) { + tradingEngineOrder.end.value = tradingEngine.current.episode.cycle.end.value + } + function updateCounters(tradingEngineOrder) { if (tradingEngineOrder.status.value === 'Open') { tradingEngineOrder.orderCounters.periods.value++ diff --git a/LowFrequencyTrading/TradingRecords.js b/LowFrequencyTrading/TradingRecords.js index c24940b16..d2dc16ed1 100644 --- a/LowFrequencyTrading/TradingRecords.js +++ b/LowFrequencyTrading/TradingRecords.js @@ -31,7 +31,7 @@ exports.newTradingRecords = function newTradingRecords(bot, logger) { outputDatasetsMap = undefined } - function appendRecords() { + function appendRecords(cycle) { /* Here we add records to the output files. At the product config property nodePath we have a pointer to the node that have the information we need to extract. @@ -53,6 +53,14 @@ exports.newTradingRecords = function newTradingRecords(bot, logger) { } function persistRecords() { + /* + There are a few products configured to be saved only at an specific cycle. + */ + if (product.config.saveAtCycle !== undefined) { + if (cycle !== product.config.saveAtCycle) { + return + } + } /* Clean the file from information of previous executions */ pruneOutputFile(product, outputDatasetArray) diff --git a/LowFrequencyTrading/TradingSimulation.js b/LowFrequencyTrading/TradingSimulation.js index 934172f40..9827d3a9d 100644 --- a/LowFrequencyTrading/TradingSimulation.js +++ b/LowFrequencyTrading/TradingSimulation.js @@ -159,7 +159,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT await tradingSystemModule.run() /* Add new records to the process output */ - tradingRecordsModule.appendRecords() + tradingRecordsModule.appendRecords('First') /* Reset Data Structures */ tradingSystemModule.reset() @@ -198,7 +198,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT if (tradingEngine.current.episode.candle.index.value + 1 < candles.length) { /* Add new records to the process output */ - tradingRecordsModule.appendRecords() + tradingRecordsModule.appendRecords('Second') tradingEngine.current.episode.candle.index.value++ @@ -213,7 +213,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT tradingEpisodeModule.closeEpisode() /* Add new records to the process output */ - tradingRecordsModule.appendRecords() + tradingRecordsModule.appendRecords('Second') afterLoop() } @@ -222,7 +222,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT tradingEpisodeModule.updateExitType(exitType) /* Add new records to the process output */ - tradingRecordsModule.appendRecords() + tradingRecordsModule.appendRecords('Second') afterLoop() }