From ff9cc8012f7bd029f8fcc91af0bf2ce176f6839f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 20 May 2020 18:49:02 +0200 Subject: [PATCH] Refactoring all records --- TradingBot.js | 202 +++++++++++++++++++++---------------------- TradingSimulation.js | 88 ++++++++++--------- 2 files changed, 147 insertions(+), 143 deletions(-) diff --git a/TradingBot.js b/TradingBot.js index 4a71b8b6b..e74a06eb6 100644 --- a/TradingBot.js +++ b/TradingBot.js @@ -120,7 +120,7 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR let recordsArray let conditionsArray let strategiesArray - let tradesArray + let positionsArray let snapshotHeaders let triggerOnSnapshot @@ -139,12 +139,12 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR writeFiles, callBackFunction) - function writeFiles(pTradingSystem, pRecordsArray, pConditionsArray, pStrategiesArray, pTradesArray, pSnapshotHeaders, pTriggerOnSnapshot, pTakePositionSnapshot) { + function writeFiles(pTradingSystem, pRecordsArray, pConditionsArray, pStrategiesArray, pPositionsArray, pSnapshotHeaders, pTriggerOnSnapshot, pTakePositionSnapshot) { tradingSystem = pTradingSystem recordsArray = pRecordsArray conditionsArray = pConditionsArray strategiesArray = pStrategiesArray - tradesArray = pTradesArray + positionsArray = pPositionsArray snapshotHeaders = pSnapshotHeaders triggerOnSnapshot = pTriggerOnSnapshot @@ -177,42 +177,42 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR fileContent = fileContent + separator + '[' + record.begin + ',' + record.end + ',' + - record.balanceBaseAsset + ',' + - record.balanceQuotedAsset + ',' + - record.accumulatedProfitLoss + ',' + - record.lastTradeProfitLoss + ',' + - record.stopLoss + ',' + - record.tradesCount + ',' + - record.hits + ',' + - record.fails + ',' + - record.hitRatio + ',' + - record.ROI + ',' + - record.periods + ',' + - record.days + ',' + - record.anualizedRateOfReturn + ',' + - record.positionRate + ',' + - record.lastTradeROI + ',' + - record.strategy + ',' + - record.takeProfit + ',' + + record.variable_current_balance_baseAsset + ',' + + record.variable_current_balance_quotedAsset + ',' + + record.variable_episode_stat_profitLoss + ',' + + record.variable_last_position_profitLoss + ',' + + record.variable_current_position_stopLoss_value + ',' + + record.variable_episode_count_positions + ',' + + record.variable_episode_count_hits + ',' + + record.variable_episode_count_fails + ',' + + record.variable_episode_stat_hitRatio + ',' + + record.variable_episode_stat_ROI + ',' + + record.variable_episode_count_periods + ',' + + record.variable_episode_stat_days + ',' + + record.variable_episode_stat_anualizedRateOfReturn + ',' + + record.variable_current_position_rate + ',' + + record.variable_last_position_ROI + ',' + + record.variable_current_strategy_index + ',' + + record.variable_current_position_takeProfit_value + ',' + record.variable_current_position_stopLoss_phase + ',' + record.variable_current_position_stopLoss_phase + ',' + - record.positionSize + ',' + - record.initialBalanceA + ',' + - record.minimumBalanceA + ',' + - record.maximumBalanceA + ',' + - record.initialBalanceB + ',' + - record.minimumBalanceB + ',' + - record.maximumBalanceB + ',' + - record.baseAsset + ',' + - record.quotedAsset + ',' + - record.marketBaseAsset + ',' + - record.marketQuotedAsset + ',' + - record.positionPeriods + ',' + - record.positionDays + ',' + - record.distanceToLastTriggerOn + ',' + - record.distanceToLastTriggerOff + ',' + - record.distanceToLastTakePosition + ',' + - record.distanceToLastClosePosition + ']' + record.variable_current_position_size + ',' + + record.variable_episode_parameters_initial_balance_baseAsset + ',' + + record.variable_episode_parameters_minimum_balance_baseAsset + ',' + + record.variable_episode_parameters_maximum_balance_baseAsset + ',' + + record.variable_episode_parameters_initial_balance_quotedAsset + ',' + + record.variable_episode_parameters_minimum_balance_quotedAsset + ',' + + record.variable_episode_parameters_maximum_balance_quotedAsset + ',' + + record.variable_episode_parameters_baseAsset + ',' + + record.variable_episode_parameters_quotedAsset + ',' + + record.variable_episode_parameters_marketBaseAsset + ',' + + record.variable_episode_parameters_marketQuotedAsset + ',' + + record.variable_current_position_periods + ',' + + record.variable_current_position_days + ',' + + record.variable_current_distance_toEvent_triggerOn + ',' + + record.variable_current_distance_toEvent_triggerOff + ',' + + record.variable_current_distance_toEvent_takePosition + ',' + + record.variable_current_distance_toEvent_closePosition + ']' if (separator === '') { separator = ',' } @@ -338,7 +338,7 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR record.number + ',' + record.beginRate + ',' + record.endRate + ',' + - '"' + record.triggerOnSituation + '"' + ',' + + '"' + record.situationName + '"' + ',' + '"' + record.name + '"' + ']' if (separator === '') { separator = ',' } @@ -368,7 +368,7 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR return } - writeTradesFile() + writePositionsFile() } catch (err) { logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) @@ -380,28 +380,28 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR } } - function writeTradesFile() { + function writePositionsFile() { try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writeTradesFile -> Entering function.') } + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writePositionsFile -> Entering function.') } let separator = '' let fileRecordCounter = 0 let fileContent = '' - for (let i = 0; i < tradesArray.length; i++) { - let record = tradesArray[i] + for (let i = 0; i < positionsArray.length; i++) { + let record = positionsArray[i] if (record.stopRate === undefined) { record.stopRate = 0 } fileContent = fileContent + separator + '[' + record.begin + ',' + record.end + ',' + record.status + ',' + - record.lastTradeROI + ',' + + record.ROI + ',' + record.beginRate + ',' + record.endRate + ',' + record.exitType + ',' + - '"' + record.takePositionSituation + '"' + ']' + '"' + record.situationName + '"' + ']' if (separator === '') { separator = ',' } @@ -418,13 +418,13 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR function onFileCreated(err) { try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> Entering function.') } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> fileContent = ' + fileContent) } + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> Entering function.') } + if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> fileContent = ' + fileContent) } if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> err = ' + err.stack) - logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> filePath = ' + filePath) - logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> market = ' + market.baseAsset + '_' + market.quotedAsset) + logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> filePath = ' + filePath) + logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> market = ' + market.baseAsset + '_' + market.quotedAsset) callBackFunction(err) return @@ -432,12 +432,12 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR writeSnapshotFiles() } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writePositionsFile -> onFileCreated -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) } } } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writeTradesFile -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeMarketFiles -> writePositionsFile -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) } } @@ -538,42 +538,42 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR fileContent = fileContent + separator + '[' + record.begin + ',' + record.end + ',' + - record.balanceBaseAsset + ',' + - record.balanceQuotedAsset + ',' + - record.accumulatedProfitLoss + ',' + - record.lastTradeProfitLoss + ',' + - record.stopLoss + ',' + - record.tradesCount + ',' + - record.hits + ',' + - record.fails + ',' + - record.hitRatio + ',' + - record.ROI + ',' + - record.periods + ',' + - record.days + ',' + - record.anualizedRateOfReturn + ',' + - record.positionRate + ',' + - record.lastTradeROI + ',' + - record.strategy + ',' + - record.takeProfit + ',' + + record.variable_current_balance_baseAsset + ',' + + record.variable_current_balance_quotedAsset + ',' + + record.variable_episode_stat_profitLoss + ',' + + record.variable_last_position_profitLoss + ',' + + record.variable_current_position_stopLoss_value + ',' + + record.variable_episode_count_positions + ',' + + record.variable_episode_count_hits + ',' + + record.variable_episode_count_fails + ',' + + record.variable_episode_stat_hitRatio + ',' + + record.variable_episode_stat_ROI + ',' + + record.variable_episode_count_periods + ',' + + record.variable_episode_stat_days + ',' + + record.variable_episode_stat_anualizedRateOfReturn + ',' + + record.variable_current_position_rate + ',' + + record.variable_last_position_ROI + ',' + + record.variable_current_strategy_index + ',' + + record.variable_current_position_takeProfit_value + ',' + record.variable_current_position_stopLoss_phase + ',' + record.variable_current_position_stopLoss_phase + ',' + - record.positionSize + ',' + - record.initialBalanceA + ',' + - record.minimumBalanceA + ',' + - record.maximumBalanceA + ',' + - record.initialBalanceB + ',' + - record.minimumBalanceB + ',' + - record.maximumBalanceB + ',' + - record.baseAsset + ',' + - record.quotedAsset + ',' + - record.marketBaseAsset + ',' + - record.marketQuotedAsset + ',' + - record.positionPeriods + ',' + - record.positionDays + ',' + - record.distanceToLastTriggerOn + ',' + - record.distanceToLastTriggerOff + ',' + - record.distanceToLastTakePosition + ',' + - record.distanceToLastClosePosition + ']' + record.variable_current_position_size + ',' + + record.variable_episode_parameters_initial_balance_baseAsset + ',' + + record.variable_episode_parameters_minimum_balance_baseAsset + ',' + + record.variable_episode_parameters_maximum_balance_baseAsset + ',' + + record.variable_episode_parameters_initial_balance_quotedAsset + ',' + + record.variable_episode_parameters_minimum_balance_quotedAsset + ',' + + record.variable_episode_parameters_maximum_balance_quotedAsset + ',' + + record.variable_episode_parameters_baseAsset + ',' + + record.variable_episode_parameters_quotedAsset + ',' + + record.variable_episode_parameters_marketBaseAsset + ',' + + record.variable_episode_parameters_marketQuotedAsset + ',' + + record.variable_current_position_periods + ',' + + record.variable_current_position_days + ',' + + record.variable_current_distance_toEvent_triggerOn + ',' + + record.variable_current_distance_toEvent_triggerOff + ',' + + record.variable_current_distance_toEvent_takePosition + ',' + + record.variable_current_distance_toEvent_closePosition + ']' if (separator === '') { separator = ',' } @@ -714,7 +714,7 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR record.number + ',' + record.beginRate + ',' + record.endRate + ',' + - '"' + record.triggerOnSituation + '"' + ',' + + '"' + record.situationName + '"' + ',' + '"' + record.name + '"' + ']' if (separator === '') { separator = ',' } @@ -745,7 +745,7 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR return } - writeTradesFile() + writePositionsFile() } catch (err) { logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) @@ -757,17 +757,17 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR } } - function writeTradesFile() { + function writePositionsFile() { try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writeTradesFile -> Entering function.') } + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writePositionsFile -> Entering function.') } let separator = '' let fileRecordCounter = 0 let fileContent = '' - for (let i = 0; i < tradesArray.length; i++) { - let record = tradesArray[i] + for (let i = 0; i < positionsArray.length; i++) { + let record = positionsArray[i] /* Will only add to the file the records of the current day. In this case since objects can span more than one day, we add all of the objects that ends at the current date. */ @@ -779,11 +779,11 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR record.begin + ',' + record.end + ',' + record.status + ',' + - record.lastTradeROI + ',' + + record.ROI + ',' + record.beginRate + ',' + record.endRate + ',' + record.exitType + ',' + - '"' + record.takePositionSituation + '"' + ']' + '"' + record.situationName + '"' + ']' if (separator === '') { separator = ',' } @@ -801,13 +801,13 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR function onFileCreated(err) { try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> Entering function.') } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> fileContent = ' + fileContent) } + if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> Entering function.') } + if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> fileContent = ' + fileContent) } if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> err = ' + err.stack) - logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> filePath = ' + filePath) - logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> market = ' + market.baseAsset + '_' + market.quotedAsset) + logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> filePath = ' + filePath) + logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> market = ' + market.baseAsset + '_' + market.quotedAsset) callBackFunction(err) return @@ -815,12 +815,12 @@ exports.newTradingBot = function newTradingBot(bot, logger, UTILITIES, FILE_STOR writeSnapshotFiles() } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writePositionsFile -> onFileCreated -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) } } } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writeTradesFile -> err = ' + err.stack) + logger.write(MODULE_NAME, '[ERROR] start -> writeDailyFiles -> writePositionsFile -> err = ' + err.stack) callBackFunction(global.DEFAULT_FAIL_RESPONSE) } } diff --git a/TradingSimulation.js b/TradingSimulation.js index 5cc2ae5c4..b79982219 100644 --- a/TradingSimulation.js +++ b/TradingSimulation.js @@ -154,6 +154,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT function inializeCurrentStrategy() { + variable.current.strategy.name = '' variable.current.strategy.index = -1 variable.current.strategy.stage = 'No Stage' variable.current.strategy.begin = 0 @@ -179,6 +180,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT variable.current.position.beginRate = 0 variable.current.position.endRate = 0 variable.current.position.periods = 0 + variable.current.position.days = 0 variable.current.position.situationName = '' variable.current.position.stopLoss = {} @@ -381,7 +383,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT let conditions = new Map() // Here we store the conditions values that will be use in the simulator for decision making. let formulas = new Map() let conditionsArrayRecord = [] // These are the records that will be saved in a file for the plotter to consume. - let conditionsArrayValues = [] // Here we store the conditions values that will be written on file for the plotter. + let conditionsValues = [] // Here we store the conditions values that will be written on file for the plotter. let formulasErrors = [] // Here we store the errors produced by all phase formulas. let formulasValues = [] // Here we store the values produced by all phase formulas. @@ -910,9 +912,9 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT conditions.set(condition.key, condition) if (condition.value) { - conditionsArrayValues.push(1) + conditionsValues.push(1) } else { - conditionsArrayValues.push(0) + conditionsValues.push(0) } } } @@ -1004,6 +1006,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT variable.current.strategy.beginRate = candle.min variable.current.strategy.endRate = candle.min // In case the strategy does not get exited variable.current.strategy.situationName = situation.name + variable.current.strategy.name = strategy.name variable.current.distance.toEvent.triggerOn = 1 @@ -1460,10 +1463,10 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT } variable.current.position.periods++ - variable.positionDays = variable.current.position.periods * variable.episode.parameters.timeFrame / ONE_DAY_IN_MILISECONDS + variable.current.position.days = variable.current.position.periods * variable.episode.parameters.timeFrame / ONE_DAY_IN_MILISECONDS } else { variable.current.position.periods = 0 - variable.positionDays = 0 + variable.current.position.days = 0 } /* Keeping Distance Counters Up-to-date */ @@ -2086,42 +2089,42 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT simulationRecord = { begin: candle.begin, end: candle.end, - balanceBaseAsset: variable.current.balance.baseAsset, - balanceQuotedAsset: variable.current.balance.quotedAsset, - accumulatedProfitLoss: variable.episode.stat.profitLoss, - lastTradeProfitLoss: variable.last.position.profitLoss, - stopLoss: variable.current.position.stopLoss.value, - tradesCount: variable.episode.count.positions, - hits: variable.episode.count.hits, - fails: variable.episode.count.fails, - hitRatio: variable.episode.stat.hitRatio, - ROI: variable.episode.stat.ROI, - periods: variable.episode.count.periods, - days: variable.episode.stat.days, - anualizedRateOfReturn: variable.episode.stat.anualizedRateOfReturn, - positionRate: variable.current.position.rate, - lastTradeROI: variable.last.position.ROI, - strategy: variable.current.strategy.index, - takeProfit: variable.current.position.takeProfit.value, + variable_current_balance_baseAsset: variable.current.balance.baseAsset, + variable_current_balance_quotedAsset: variable.current.balance.quotedAsset, + variable_episode_stat_profitLoss: variable.episode.stat.profitLoss, + variable_last_position_profitLoss: variable.last.position.profitLoss, + variable_current_position_stopLoss_value: variable.current.position.stopLoss.value, + variable_episode_count_positions: variable.episode.count.positions, + variable_episode_count_hits: variable.episode.count.hits, + variable_episode_count_fails: variable.episode.count.fails, + variable_episode_stat_hitRatio: variable.episode.stat.hitRatio, + variable_episode_stat_ROI: variable.episode.stat.ROI, + variable_episode_count_periods: variable.episode.count.periods, + variable_episode_stat_days: variable.episode.stat.days, + variable_episode_stat_anualizedRateOfReturn: variable.episode.stat.anualizedRateOfReturn, + variable_current_position_rate: variable.current.position.rate, + variable_last_position_ROI: variable.last.position.ROI, + variable_current_strategy_index: variable.current.strategy.index, + variable_current_position_takeProfit_value: variable.current.position.takeProfit.value, variable_current_position_stopLoss_phase: variable.current.position.stopLoss.phase, variable_current_position_takeProfit_phase: variable.current.position.takeProfit.phase, - positionSize: variable.current.position.size, - initialBalanceA: variable.episode.parameters.initial.balance.baseAsset, - minimumBalanceA: variable.episode.parameters.minimum.balance.baseAsset, - maximumBalanceA: variable.episode.parameters.maximum.balance.baseAsset, - initialBalanceB: variable.episode.parameters.initial.balance.quotedAsset, - minimumBalanceB: variable.episode.parameters.minimum.balance.quotedAsset, - maximumBalanceB: variable.episode.parameters.maximum.balance.quotedAsset, - baseAsset: '"' + variable.episode.parameters.baseAsset + '"', - quotedAsset: '"' + variable.episode.parameters.quotedAsset + '"', - marketBaseAsset: '"' + variable.episode.parameters.marketBaseAsset + '"', - marketQuotedAsset: '"' + variable.episode.parameters.marketQuotedAsset + '"', - positionPeriods: variable.current.position.periods, - positionDays: variable.positionDays, - distanceToEventTriggerOn: variable.current.distance.toEvent.triggerOn, - distanceToEventTriggerOff: variable.current.distance.toEvent.triggerOff, - distanceToEventTakePosition: variable.current.distance.toEvent.takePosition, - distanceToEventClosePosition: variable.current.distance.toEvent.closePosition + variable_current_position_size: variable.current.position.size, + variable_episode_parameters_initial_balance_baseAsset: variable.episode.parameters.initial.balance.baseAsset, + variable_episode_parameters_minimum_balance_baseAsset: variable.episode.parameters.minimum.balance.baseAsset, + variable_episode_parameters_maximum_balance_baseAsset: variable.episode.parameters.maximum.balance.baseAsset, + variable_episode_parameters_initial_balance_quotedAsset: variable.episode.parameters.initial.balance.quotedAsset, + variable_episode_parameters_minimum_balance_quotedAsset: variable.episode.parameters.minimum.balance.quotedAsset, + variable_episode_parameters_maximum_balance_quotedAsset: variable.episode.parameters.maximum.balance.quotedAsset, + variable_episode_parameters_baseAsset: '"' + variable.episode.parameters.baseAsset + '"', + variable_episode_parameters_quotedAsset: '"' + variable.episode.parameters.quotedAsset + '"', + variable_episode_parameters_marketBaseAsset: '"' + variable.episode.parameters.marketBaseAsset + '"', + variable_episode_parameters_marketQuotedAsset: '"' + variable.episode.parameters.marketQuotedAsset + '"', + variable_current_position_periods: variable.current.position.periods, + variable_current_position_days: variable.current.position.days, + variable_current_distance_toEvent_triggerOn: variable.current.distance.toEvent.triggerOn, + variable_current_distance_toEvent_triggerOff: variable.current.distance.toEvent.triggerOff, + variable_current_distance_toEvent_takePosition: variable.current.distance.toEvent.takePosition, + variable_current_distance_toEvent_closePosition: variable.current.distance.toEvent.closePosition } recordsArray.push(simulationRecord) @@ -2131,7 +2134,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT conditionsArrayRecord.push(variable.current.strategy.index) conditionsArrayRecord.push(variable.current.position.stopLoss.phase) conditionsArrayRecord.push(variable.current.position.takeProfit.phase) - conditionsArrayRecord.push(conditionsArrayValues) + conditionsArrayRecord.push(conditionsValues) conditionsArrayRecord.push(formulasErrors) conditionsArrayRecord.push(formulasValues) @@ -2155,7 +2158,8 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT number: variable.current.strategy.number, beginRate: variable.current.strategy.beginRate, endRate: variable.current.strategy.endRate, - situationName: variable.current.strategy.situationName + situationName: variable.current.strategy.situationName, + name: variable.current.strategy.name } strategiesArray.push(currentStrategyRecord) @@ -2235,7 +2239,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT begin: variable.current.position.begin, end: variable.current.position.end, status: variable.current.position.status, - lastTradeROI: variable.current.position.ROI, + ROI: variable.current.position.ROI, exitType: variable.current.position.exitType, beginRate: variable.current.position.beginRate, endRate: variable.current.position.endRate,