diff --git a/CanvasApp/Panels/PlotterPanel.js b/CanvasApp/Panels/PlotterPanel.js index 9dde50073..93091b1e7 100644 --- a/CanvasApp/Panels/PlotterPanel.js +++ b/CanvasApp/Panels/PlotterPanel.js @@ -113,18 +113,20 @@ function newPlotterPanel () { } } + printLabel('Indicator Properties', X_AXIS, PANEL_HEIGHT * 17 / 100 / 1.25, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction) + /* Second we go through the panel data. */ if (panelNode.panelData === undefined) { return } for (let i = 0; i < panelNode.panelData.length; i++) { let panelData = panelNode.panelData[i] let labelText = panelData.name - let labelPosition = i * 10 + 10 - let valuePosition = i * 10 + 15 + let labelPosition = i * 10 + 25 + let valuePosition = i * 10 + 30 let value = 'No value defined.' if (valuePosition > 100) { - heightFactor = 2 + heightFactor = 1.25 thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * heightFactor } @@ -154,7 +156,7 @@ function newPlotterPanel () { } printLabel(labelText, X_AXIS, PANEL_HEIGHT * labelPosition / 100 / heightFactor, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction) - printLabel(value, X_AXIS, PANEL_HEIGHT * valuePosition / 100 / heightFactor, '1.00', 15, undefined, true, thisObject.container, thisObject.fitFunction) + printLabel(value, X_AXIS, PANEL_HEIGHT * valuePosition / 100 / heightFactor, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction) } } } diff --git a/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Strategies.js b/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Strategies.js index 3ca511d39..668496f87 100644 --- a/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Strategies.js +++ b/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Strategies.js @@ -383,6 +383,7 @@ record.number = dailyFile[i][3]; record.beginRate = dailyFile[i][4]; record.endRate = dailyFile[i][5]; + record.triggerOnSituation = dailyFile[i][6]; if ( (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && @@ -454,6 +455,7 @@ record.number = marketFile[i][3]; record.beginRate = marketFile[i][4]; record.endRate = marketFile[i][5]; + record.triggerOnSituation = marketFile[i][6]; if (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) { @@ -575,6 +577,12 @@ browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + 0.5 + ')'; browserCanvasContext.fill(); */ + + /* Situation Name */ + let digit = record.begin.toFixed(0).substring(7,8) + let positionY = recordPoint3.y - (recordPoint3.y - recordPoint1.y) / 2 + (Number(digit) * 10 - 50) + printLabel(record.triggerOnSituation, recordPoint1.x + 5, positionY , '1', 12); + /* Draw the Sticks */ drawStick(recordPoint1, recordPoint3); diff --git a/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Trades.js b/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Trades.js index 24e64c7cd..2d38c3233 100644 --- a/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Trades.js +++ b/Legacy-Code/TradingEngines/plotters/Plotters-Trading-Simulation/Trades.js @@ -370,6 +370,7 @@ record.beginRate = dailyFile[i][4]; record.endRate = dailyFile[i][5]; record.exitType = dailyFile[i][6]; + record.takePositionSituation = dailyFile[i][7]; if ( (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && @@ -435,6 +436,7 @@ record.beginRate = marketFile[i][4]; record.endRate = marketFile[i][5]; record.exitType = marketFile[i][6]; + record.takePositionSituation = marketFile[i][7]; if ( (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) && @@ -516,6 +518,7 @@ recordPoint2 = thisObject.fitFunction(recordPoint2); recordPoint3 = thisObject.fitFunction(recordPoint3); + let line0 = record.takePositionSituation let line1 = ''; let line2 = ''; @@ -595,7 +598,7 @@ // we do not write any text } else { - + printLabel(line0, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line1.length * FONT_ASPECT_RATIO, point.y - 15, '1', 12); printLabel(line1, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line1.length * FONT_ASPECT_RATIO, point.y, '1', 12); printLabel(line2, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line2.length * FONT_ASPECT_RATIO, point.y + 15, '1', 12); diff --git a/TaskServer/FileStorage.js b/TaskServer/FileStorage.js index 2ec8a47ec..be6f08ccd 100644 --- a/TaskServer/FileStorage.js +++ b/TaskServer/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/TaskServer/TradingBot.js b/TaskServer/TradingBot.js index 7dacf7836..833b16693 100644 --- a/TaskServer/TradingBot.js +++ b/TaskServer/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/TaskServer/TradingSimulation.js b/TaskServer/TradingSimulation.js index 59413023f..9340b2126 100644 --- a/TaskServer/TradingSimulation.js +++ b/TaskServer/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;