diff --git a/FileStorage.js b/FileStorage.js index 2ec8a47ec..be6f08ccd 100644 --- a/FileStorage.js +++ b/FileStorage.js @@ -6,10 +6,7 @@ exports.newFileStorage = function newFileStorage(logger) { const MODULE_NAME = 'FileStorage' const MAX_RETRY = 30 const FAST_RETRY_TIME_IN_MILISECONDS = 500 - const SLOW_RETRY_TIME_IN_MILISECONDS = 5000 - let currentRetryGetTextFile = 0 - let currentRetryWriteTextFile = 0 - let currentRetryDeleteTextFile = 0 + const SLOW_RETRY_TIME_IN_MILISECONDS = 2000 if (logger === undefined) { // Dummy logger logger = {} @@ -29,94 +26,101 @@ exports.newFileStorage = function newFileStorage(logger) { function getTextFile(filePath, callBackFunction, noRetry) { - logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> Entering Function.') + let currentRetryGetTextFile = 0 - let fileDoesNotExist = false + recursiveGetTextFile(filePath, callBackFunction, noRetry) - /* Choose path for either bots or data */ - let fileLocation - if (filePath.indexOf("/bots/") > 0) { - fileLocation = process.env.BOTS_PATH + '/' + filePath - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - } + function recursiveGetTextFile(filePath, callBackFunction, noRetry) { - try { + logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> Entering Function.') - logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> fileLocation: ' + fileLocation) + let fileDoesNotExist = false - /* Here we actually write the file. */ - const fs = require('fs') - fs.readFile(fileLocation, onFileRead) - - function onFileRead(err, text) { - let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS - if (currentRetryGetTextFile > MAX_RETRY - 2) { - retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS - } - if (err) { - - if (err.code === 'ENOENT') { // since files are deleted before being replaced, it can happen that it does not exist and after a retry it does. - if (noRetry === true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Not Retrying. ') - let customResponse = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: 'File does not exist.' - } - callBackFunction(customResponse) - return - } else { - fileDoesNotExist = true - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Retrying. ') - setTimeout(retry, retryTimeToUse) - return - } - } - - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> filePath = ' + filePath) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - return - } - - if (text.toString() === "") { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Read and Empty File -> filePath = ' + filePath) - setTimeout(retry, retryTimeToUse) - return - } - - callBackFunction(global.DEFAULT_OK_RESPONSE, text.toString()) + /* Choose path for either bots or data */ + let fileLocation + if (filePath.indexOf("/bots/") > 0) { + fileLocation = process.env.BOTS_PATH + '/' + filePath + } else { + fileLocation = process.env.STORAGE_PATH + '/' + filePath } - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error writing file -> err = ' + err.stack) - retry() - } + try { - function retry() { - //console.log(new Date(), ' Retry #: ' + currentRetryGetTextFile, fileLocation ) - if (currentRetryGetTextFile < MAX_RETRY) { - currentRetryGetTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Will try to read the file again -> Retry #: ' + currentRetryGetTextFile) - getTextFile(filePath, callBackFunction) - } else { - currentRetryGetTextFile = 0 + logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> fileLocation: ' + fileLocation) - if (fileDoesNotExist === true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. File Not Found.') - let customResponse = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: 'File does not exist.' + /* Here we actually write the file. */ + const fs = require('fs') + fs.readFile(fileLocation, onFileRead) + + function onFileRead(err, text) { + let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS + if (currentRetryGetTextFile > MAX_RETRY - 2) { + retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS } - callBackFunction(customResponse) - return + if (err) { + + if (err.code === 'ENOENT') { // since files are deleted before being replaced, it can happen that it does not exist and after a retry it does. + if (noRetry === true) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Not Retrying. ') + let customResponse = { + result: global.CUSTOM_FAIL_RESPONSE.result, + message: 'File does not exist.' + } + callBackFunction(customResponse) + return + } else { + fileDoesNotExist = true + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Retrying. ') + setTimeout(retry, retryTimeToUse) + return + } + } + + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> filePath = ' + filePath) + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) + setTimeout(retry, retryTimeToUse) + return + } + + if (text.toString() === "") { + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Read and Empty File -> filePath = ' + filePath) + setTimeout(retry, retryTimeToUse) + return + } + + callBackFunction(global.DEFAULT_OK_RESPONSE, text.toString()) + } + + } catch (err) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error writing file -> file = ' + fileLocation) + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error writing file -> err = ' + err.stack) + retry() + } + + function retry() { + //console.log(new Date(), ' Retry #: ' + currentRetryGetTextFile, fileLocation ) + if (currentRetryGetTextFile < MAX_RETRY) { + currentRetryGetTextFile++ + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Will try to read the file again -> Retry #: ' + currentRetryGetTextFile) + recursiveGetTextFile(filePath, callBackFunction) } else { - logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> file = ' + fileLocation) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return + currentRetryGetTextFile = 0 + + if (fileDoesNotExist === true) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. File Not Found.') + let customResponse = { + result: global.CUSTOM_FAIL_RESPONSE.result, + message: 'File does not exist.' + } + callBackFunction(customResponse) + return + } else { + logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. Giving up.') + logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> file = ' + fileLocation) + callBackFunction(global.DEFAULT_FAIL_RESPONSE) + return + } } } } @@ -124,144 +128,161 @@ exports.newFileStorage = function newFileStorage(logger) { function createTextFile(filePath, fileContent, callBackFunction) { - logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> Entering Function.') + let currentRetryWriteTextFile = 0 - /* Choose path for either logs or data */ - let fileLocation - if (filePath.indexOf("/Logs/") > 0) { - fileLocation = process.env.LOG_PATH + '/' + filePath - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - } + recursiveCreateTextFile(filePath, fileContent, callBackFunction) - try { + function recursiveCreateTextFile(filePath, fileContent, callBackFunction) { - logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> fileLocation: ' + fileLocation) + logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> Entering Function.') - /* If necesary a folder or folders are created before writing the file to disk. */ - let directoryPath = fileLocation.substring(0, fileLocation.lastIndexOf('/') + 1); - mkDirByPathSync(directoryPath) + /* Choose path for either logs or data */ + let fileLocation + if (filePath.indexOf("/Logs/") > 0) { + fileLocation = process.env.LOG_PATH + '/' + filePath + } else { + fileLocation = process.env.STORAGE_PATH + '/' + filePath + } - /* - Here we write the file with a temporary name so as to avoid dirty read from other processes. - Then we delete the original file, if exists, and finally we rename the temporary into the original name. - */ - const fs = require('fs') - fs.writeFile(fileLocation + '.tmp', fileContent, onFileWritenn) + try { - function onFileWritenn(err) { - let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS - if (currentRetryWriteTextFile > MAX_RETRY - 2) { - retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS - } - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { + logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> fileLocation: ' + fileLocation) - const fs = require('fs') - fs.unlink(fileLocation, onUnlinked) + /* If necesary a folder or folders are created before writing the file to disk. */ + let directoryPath = fileLocation.substring(0, fileLocation.lastIndexOf('/') + 1); + mkDirByPathSync(directoryPath) - function onUnlinked(err) { - let code = '' - if (err) { - code = err.code - } - if (code !== '' && code !== 'ENOENT') { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error renaming file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error renaming file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { + /* + Here we write the file with a temporary name so as to avoid dirty read from other processes. + Then we delete the original file, if exists, and finally we rename the temporary into the original name. + */ + const fs = require('fs') + fs.writeFile(fileLocation + '.tmp', fileContent, onFileWritenn) - const fs = require('fs') - fs.rename(fileLocation + '.tmp', fileLocation, onRenamed) + function onFileWritenn(err) { + let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS + if (currentRetryWriteTextFile > MAX_RETRY - 2) { + retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS + } + if (err) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> file = ' + fileLocation) + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> err = ' + err.stack) + setTimeout(retry, retryTimeToUse) + } else { - function onRenamed(err) { - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onRenamed -> Error renaming file -> file = ' + fileLocation + '.tmp') - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onRenamed -> Error renaming file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { + const fs = require('fs') + fs.unlink(fileLocation, onUnlinked) - callBackFunction(global.DEFAULT_OK_RESPONSE) + function onUnlinked(err) { + let code = '' + if (err) { + code = err.code + } + if (code !== '' && code !== 'ENOENT') { + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error renaming file -> file = ' + fileLocation) + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error renaming file -> err = ' + err.stack) + setTimeout(retry, retryTimeToUse) + } else { + const fs = require('fs') + fs.rename(fileLocation + '.tmp', fileLocation, onRenamed) + + function onRenamed(err) { + if (err) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onRenamed -> Error renaming file -> file = ' + fileLocation + '.tmp') + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onRenamed -> Error renaming file -> err = ' + err.stack) + setTimeout(retry, retryTimeToUse) + } else { + + callBackFunction(global.DEFAULT_OK_RESPONSE) + + } } } } } } + + } catch (err) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> file = ' + fileLocation) + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> err = ' + err.stack) + retry() } - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> err = ' + err.stack) - retry() - } - - function retry() { - if (currentRetryWriteTextFile < MAX_RETRY) { - currentRetryWriteTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> retry -> Will try to write the file again -> Retry #: ' + currentRetryWriteTextFile) - createTextFile(filePath, fileContent, callBackFunction) - } else { - currentRetryWriteTextFile = 0 - logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> Max retries reached writting a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> file = ' + fileLocation) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) + function retry() { + if (currentRetryWriteTextFile < MAX_RETRY) { + currentRetryWriteTextFile++ + logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> retry -> Will try to write the file again -> Retry #: ' + currentRetryWriteTextFile) + recursiveCreateTextFile(filePath, fileContent, callBackFunction) + } else { + currentRetryWriteTextFile = 0 + logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> Max retries reached writting a file. Giving up.') + logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> file = ' + fileLocation) + callBackFunction(global.DEFAULT_FAIL_RESPONSE) + } } } } function deleteTextFile(filePath, callBackFunction) { - logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> Entering Function.') + let currentRetryDeleteTextFile = 0 - /* Choose path for either logs or data */ - let fileLocation - if (filePath.indexOf("/Logs/") > 0) { - fileLocation = process.env.LOG_PATH + '/' + filePath - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - } + recursiveDeleteTextFile(filePath, callBackFunction) - try { + function recursiveDeleteTextFile(filePath, callBackFunction) { + logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> Entering Function.') - logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> fileLocation: ' + fileLocation) + /* Choose path for either logs or data */ + let fileLocation + if (filePath.indexOf("/Logs/") > 0) { + fileLocation = process.env.LOG_PATH + '/' + filePath + } else { + fileLocation = process.env.STORAGE_PATH + '/' + filePath + } - const fs = require('fs') - fs.unlink(fileLocation, onUnlinked) + try { - function onUnlinked(err) { - if (err) { - if (callBackFunction !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) + logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> fileLocation: ' + fileLocation) + + const fs = require('fs') + fs.unlink(fileLocation, onUnlinked) + + function onUnlinked(err) { + let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS + if (currentRetryDeleteTextFile > MAX_RETRY - 2) { + retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS } + if (err) { + if (callBackFunction !== undefined) { + callBackFunction(global.DEFAULT_FAIL_RESPONSE) + } + } else { + setTimeout(retry, retryTimeToUse) + } + } + } catch (err) { + logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> file = ' + fileLocation) + logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> err = ' + err.stack) + if (callBackFunction !== undefined) { + callBackFunction(global.DEFAULT_FAIL_RESPONSE) + } + } + + function retry() { + if (currentRetryDeleteTextFile < MAX_RETRY) { + currentRetryDeleteTextFile++ + logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> retry -> Will try to delete the file again -> Retry #: ' + currentRetryDeleteTextFile) + recursiveDeleteTextFile(filePath, callBackFunction) } else { + currentRetryDeleteTextFile = 0 + logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> Max retries reached deleting a file. Giving up.') + logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> file = ' + fileLocation) if (callBackFunction !== undefined) { callBackFunction(global.DEFAULT_OK_RESPONSE) } } } - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> err = ' + err.stack) - if (callBackFunction !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function retry() { - if (currentRetryDeleteTextFile < MAX_RETRY) { - currentRetryDeleteTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> retry -> Will try to delete the file again -> Retry #: ' + currentRetryDeleteTextFile) - createTextFile(filePath, fileContent, callBackFunction) - } else { - currentRetryDeleteTextFile = 0 - logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> Max retries reached deleting a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> file = ' + fileLocation) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } } } diff --git a/TradingBot.js b/TradingBot.js index 7dacf7836..833b16693 100644 --- a/TradingBot.js +++ b/TradingBot.js @@ -356,7 +356,8 @@ record.status + "," + record.number + "," + record.beginRate + "," + - record.endRate + "]"; + record.endRate + "," + + '"' + record.triggerOnSituation + '"' + "]"; if (separator === "") { separator = ","; } @@ -428,7 +429,8 @@ record.lastTradeROI + "," + record.beginRate + "," + record.endRate + "," + - record.exitType + "]"; + record.exitType + "," + + '"' + record.takePositionSituation + '"' + "]"; if (separator === "") { separator = ","; } @@ -816,7 +818,8 @@ record.status + "," + record.number + "," + record.beginRate + "," + - record.endRate + "]"; + record.endRate + "," + + '"' + record.triggerOnSituation + '"' + "]"; if (separator === "") { separator = ","; } @@ -894,7 +897,8 @@ record.lastTradeROI + "," + record.beginRate + "," + record.endRate + "," + - record.exitType + "]"; + record.exitType + "," + + '"' + record.takePositionSituation + '"' + "]"; if (separator === "") { separator = ","; } diff --git a/TradingSimulation.js b/TradingSimulation.js index 59413023f..9340b2126 100644 --- a/TradingSimulation.js +++ b/TradingSimulation.js @@ -141,7 +141,8 @@ status: 0, number: 0, beginRate: 0, - endRate: 0 + endRate: 0, + triggerOnSituation: '' } let currentTrade = { @@ -151,7 +152,8 @@ profit: 0, exitType: 0, beginRate: 0, - endRate: 0 + endRate: 0, + takePositionSituation: '' } let balanceBaseAsset = bot.VALUES_TO_USE.initialBalanceA; @@ -211,7 +213,8 @@ status: 0, number: 0, beginRate: 0, - endRate: 0 + endRate: 0, + triggerOnSituation: '' } yesterday.currentTrade = { @@ -221,7 +224,8 @@ profit: 0, exitType: 0, beginRate: 0, - endRate: 0 + endRate: 0, + takePositionSituation: '' } yesterday.balanceBaseAsset = balanceBaseAsset; @@ -279,7 +283,8 @@ status: 0, number: 0, beginRate: 0, - endRate: 0 + endRate: 0, + triggerOnSituation: '' } interExecutionMemory.currentTrade = { @@ -289,7 +294,8 @@ profit: 0, exitType: 0, beginRate: 0, - endRate: 0 + endRate: 0, + takePositionSituation: '' } interExecutionMemory.balanceBaseAsset = balanceBaseAsset; @@ -349,7 +355,8 @@ status: interExecutionMemory.currentStrategy.status, number: interExecutionMemory.currentStrategy.number, beginRate: interExecutionMemory.currentStrategy.beginRate, - endRate: interExecutionMemory.currentStrategy.endRate + endRate: interExecutionMemory.currentStrategy.endRate, + triggerOnSituation: interExecutionMemory.currentStrategy.triggerOnSituation } currentTrade = { @@ -359,7 +366,8 @@ profit: interExecutionMemory.currentTrade.profit, exitType: interExecutionMemory.currentTrade.exitType, beginRate: interExecutionMemory.currentTrade.beginRate, - endRate: interExecutionMemory.currentTrade.endRate + endRate: interExecutionMemory.currentTrade.endRate, + takePositionSituation: interExecutionMemory.currentTrade.takePositionSituation } if (currentDay) { @@ -422,7 +430,8 @@ status: currentStrategy.status, number: currentStrategy.number, beginRate: currentStrategy.beginRate, - endRate: currentStrategy.endRate + endRate: currentStrategy.endRate, + triggerOnSituation: currentStrategy.triggerOnSituation } yesterday.currentTrade = { @@ -432,7 +441,8 @@ profit: currentTrade.profit, exitType: currentTrade.exitType, beginRate: currentTrade.beginRate, - endRate: currentTrade.endRate + endRate: currentTrade.endRate, + takePositionSituation: currentTrade.takePositionSituation } yesterday.lastTradeProfitLoss = lastTradeProfitLoss; @@ -1159,6 +1169,7 @@ currentStrategy.begin = candle.begin; currentStrategy.beginRate = candle.min; currentStrategy.endRate = candle.min; // In case the strategy does not get exited + currentStrategy.triggerOnSituation = situation.name if (processingDailyFiles) { if (positionedAtYesterday) { @@ -1167,6 +1178,7 @@ yesterday.currentStrategy.begin = currentStrategy.begin; yesterday.currentStrategy.beginRate = currentStrategy.beginRate; yesterday.currentStrategy.endRate = currentStrategy.endRate; + yesterday.currentStrategy.triggerOnSituation = currentStrategy.triggerOnSituation; } } @@ -1315,6 +1327,7 @@ } takePositionNow = true + currentTrade.takePositionSituation = situation.name checkAnnouncements(triggerStage.takePosition) @@ -2578,7 +2591,8 @@ status: 0, number: 0, beginRate: 0, - endRate: 0 + endRate: 0, + triggerOnSituation: '' } if (processingDailyFiles) { @@ -2589,7 +2603,8 @@ status: 0, number: 0, beginRate: 0, - endRate: 0 + endRate: 0, + triggerOnSituation: '' } } } @@ -2626,7 +2641,8 @@ lastTradeROI: 0, exitType: 0, beginRate: 0, - endRate: 0 + endRate: 0, + takePositionSituation: '' } if (processingDailyFiles) { @@ -2638,7 +2654,8 @@ lastTradeROI: 0, exitType: 0, beginRate: 0, - endRate: 0 + endRate: 0, + takePositionSituation: '' } } } @@ -2791,7 +2808,8 @@ status: yesterday.currentStrategy.status, number: yesterday.currentStrategy.number, beginRate: yesterday.currentStrategy.beginRate, - endRate: yesterday.currentStrategy.endRate + endRate: yesterday.currentStrategy.endRate, + triggerOnSituation: yesterday.curre.triggerOnSituation } interExecutionMemory.currentTrade = { @@ -2801,7 +2819,8 @@ profit: yesterday.currentTrade.profit, exitType: yesterday.currentTrade.exitType, beginRate: yesterday.currentTrade.beginRate, - endRate: yesterday.currentTrade.endRate + endRate: yesterday.currentTrade.endRate, + takePositionSituation: yesterday.currentTrade.takePositionSituation } interExecutionMemory.balanceBaseAsset = yesterday.balanceBaseAsset;