From 2fb6e6e7b93abbebd10b25d4550374029fbf1a77 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 12 Sep 2019 16:29:29 +0200 Subject: [PATCH] Adding Distance in Periods Counters --- Commons.js | 137 ++++++++++++++++++++++++++++++++++++++- Multi-Period/User.Bot.js | 6 +- 2 files changed, 140 insertions(+), 3 deletions(-) diff --git a/Commons.js b/Commons.js index 170498503..2d335e8dd 100644 --- a/Commons.js +++ b/Commons.js @@ -305,6 +305,15 @@ let periods = 0; let positionPeriods = 0; + /* Usefull counters for conditions and formulas */ + + let distanceToLast = { + triggerOn: 0, + triggerOff: 0, + takePosition: 0, + closePosition: 0 + } + /* Message to the Simulation Executor */ let orderId = 0; @@ -361,6 +370,13 @@ yesterday.periods = 0; yesterday.positionPeriods = 0; + yesterday.distanceToLast = { + triggerOn: 0, + triggerOff: 0, + takePosition: 0, + closePosition: 0 + } + yesterday.orderId = 0; yesterday.messageId = 0; @@ -419,6 +435,13 @@ interExecutionMemory.periods = 0; interExecutionMemory.positionPeriods = 0; + interExecutionMemory.distanceToLast = { + triggerOn: 0, + triggerOff: 0, + takePosition: 0, + closePosition: 0 + } + interExecutionMemory.orderId = 0; interExecutionMemory.messageId = 0; @@ -486,6 +509,11 @@ periods = interExecutionMemory.periods; positionPeriods = interExecutionMemory.positionPeriods; + distanceToLast.triggerOn = interExecutionMemory.distanceToLast.triggerOn + distanceToLast.triggerOff = interExecutionMemory.distanceToLast.triggerOff + distanceToLast.takePosition = interExecutionMemory.distanceToLast.takePosition + distanceToLast.closePosition = interExecutionMemory.distanceToLast.closePosition + orderId = interExecutionMemory.orderId; // to be deprecated messageId = interExecutionMemory.messageId; // to be deprecated @@ -539,6 +567,11 @@ yesterday.periods = periods; yesterday.positionPeriods = positionPeriods; + yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn + yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff + yesterday.distanceToLast.takePosition = distanceToLast.takePosition + yesterday.distanceToLast.closePosition = distanceToLast.closePosition + yesterday.hitRatio = hitRatio; yesterday.ROI = ROI; yesterday.anualizedRateOfReturn = anualizedRateOfReturn; @@ -1238,6 +1271,14 @@ } } + distanceToLast.triggerOn = 1; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn + } + } + if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Switching to Trigger Stage because conditions at Trigger On Event were met."); } break; } @@ -1305,6 +1346,14 @@ } } + distanceToLast.triggerOff = 1; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff + } + } + if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Switching to No Stage because conditions at the Trigger Off Event were met."); } break; } @@ -1636,6 +1685,55 @@ } } + /* Keeping Distance Counters Up-to-date */ + if ( + distanceToLast.triggerOn > 0 // with this we avoind counting before the first event happens. + ) { + distanceToLast.triggerOn++; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn + } + } + } + + if ( + distanceToLast.triggerOff > 0 // with this we avoind counting before the first event happens. + ) { + distanceToLast.triggerOff++; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff + } + } + } + + if ( + distanceToLast.takePosition > 0 // with this we avoind counting before the first event happens. + ) { + distanceToLast.takePosition++; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.takePosition = distanceToLast.takePosition + } + } + } + + if ( + distanceToLast.closePosition > 0 // with this we avoind counting before the first event happens. + ) { + distanceToLast.closePosition++; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.takePosition = distanceToLast.closePosition + } + } + } + /* Checking if Stop or Take Profit were hit */ if ( (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && @@ -1820,6 +1918,15 @@ takePositionNow = false if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Entering code block."); } + /* Inicializing this counter */ + distanceToLast.takePosition = 1; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.takePosition = distanceToLast.takePosition + } + } + /* Position size and rate */ let strategy = tradingSystem.strategies[currentStrategyIndex]; @@ -2106,6 +2213,15 @@ closePositionNow = false + /* Inicializing this counter */ + distanceToLast.closePosition = 1; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.closePosition = distanceToLast.closePosition + } + } + /* Position size and rate */ let strategy = tradingSystem.strategies[currentStrategyIndex]; @@ -2396,6 +2512,14 @@ timerToCloseStage = 0 + distanceToLast.triggerOff = 1; + + if (processingDailyFiles) { + if (positionedAtYesterday) { + yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff + } + } + if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing the Closing Stage -> Exiting Close Stage."); } } else { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing the Closing Stage -> Waiting for timer."); } @@ -2489,7 +2613,11 @@ maximumBalanceB: maximumBalanceB, baseAsset: quotedBaseAsset, positionPeriods: positionPeriods, - positionDays: positionDays + positionDays: positionDays, + distanceToLastTriggerOn: distanceToLast.triggerOn, + distanceToLastTriggerOff: distanceToLast.triggerOff, + distanceToLastTakePosition: distanceToLast.takePosition, + distanceToLastClosePosition: distanceToLast.closePosition } recordsArray.push(simulationRecord); @@ -2644,7 +2772,12 @@ interExecutionMemory.fails = yesterday.fails; interExecutionMemory.hits = yesterday.hits; interExecutionMemory.periods = yesterday.periods; - interExecutionMemory.positionPeriods = yesterday.positionPeriods; + interExecutionMemory.positionPeriods = yesterday.positionPeriods; + + interExecutionMemory.distanceToLast.triggerOn = yesterday.distanceToLast.triggerOn + interExecutionMemory.distanceToLast.triggerOff = yesterday.distanceToLast.triggerOff + interExecutionMemory.distanceToLast.takePosition = yesterday.distanceToLast.takePosition + interExecutionMemory.distanceToLast.closePosition = yesterday.distanceToLast.closePosition interExecutionMemory.messageId = interExecutionMemory.messageId + yesterday.messageId; interExecutionMemory.orderId = interExecutionMemory.orderId + yesterday.orderId; diff --git a/Multi-Period/User.Bot.js b/Multi-Period/User.Bot.js index 72a6e93d0..7e8d47bfb 100644 --- a/Multi-Period/User.Bot.js +++ b/Multi-Period/User.Bot.js @@ -220,7 +220,11 @@ record.maximumBalanceB + "," + record.baseAsset + "," + record.positionPeriods + "," + - record.positionDays + "]"; + record.positionDays + "," + + record.distanceToLastTriggerOn + "," + + record.distanceToLastTriggerOff + "," + + record.distanceToLastTakePosition + "," + + record.distanceToLastClosePosition + "]"; if (separator === "") { separator = ","; }