From e40a394e6f8487a06a3c7a38fbe458c66e8b5bf1 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 27 Nov 2020 17:54:02 +0100 Subject: [PATCH] More utility functions --- Projects/ProjectsSchema.json | 6 +++ .../TS/Utilities/MiscellaneousFunctions.js | 20 ++++++++++ TaskServer/Globals.js | 11 ------ .../LowFrequencyTrading/OrdersCalculations.js | 20 +++++----- .../LowFrequencyTrading/OrdersSimulations.js | 18 ++++----- .../LowFrequencyTrading/TradingEpisode.js | 24 ++++++------ .../LowFrequencyTrading/TradingOrders.js | 38 +++++++++---------- .../LowFrequencyTrading/TradingPosition.js | 36 +++++++++--------- .../LowFrequencyTrading/TradingStages.js | 8 ++-- .../LowFrequencyTrading/TradingStrategy.js | 2 +- 10 files changed, 99 insertions(+), 84 deletions(-) create mode 100644 Projects/Superalgos/TS/Utilities/MiscellaneousFunctions.js diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 7b86369ed..77ab0892a 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -377,6 +377,12 @@ "propertyName": "dateTimeFunctions", "functionName": "newSuperalgosUtilitiesDateTimeFunctions", "fileName": "DateTimeFunctions.js" + }, + { + "name": "Miscellaneous Functions", + "propertyName": "miscellaneousFunctions", + "functionName": "newSuperalgosUtilitiesMiscellaneousFunctions", + "fileName": "MiscellaneousFunctions.js" } ], "botClasses": [] diff --git a/Projects/Superalgos/TS/Utilities/MiscellaneousFunctions.js b/Projects/Superalgos/TS/Utilities/MiscellaneousFunctions.js new file mode 100644 index 000000000..391d62a5e --- /dev/null +++ b/Projects/Superalgos/TS/Utilities/MiscellaneousFunctions.js @@ -0,0 +1,20 @@ +exports.newSuperalgosUtilitiesMiscellaneousFunctions = function () { + + let thisObject = { + genereteUniqueId: genereteUniqueId, + truncateToThisPrecision: truncateToThisPrecision + } + + return thisObject + + function genereteUniqueId () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8) + return v.toString(16) + }) + } + + function truncateToThisPrecision(floatNumber, precision) { + return parseFloat(floatNumber.toFixed(precision)) + } +} \ No newline at end of file diff --git a/TaskServer/Globals.js b/TaskServer/Globals.js index 944c67dff..0c1e30147 100644 --- a/TaskServer/Globals.js +++ b/TaskServer/Globals.js @@ -16,17 +16,6 @@ exports.newGlobals = function newGlobals() { global.LOGGER_MAP = new Map() // We will put all the loggers in a map, so that we can eventually finalize them. global.SESSION_MAP = new Map() // We will put all the sessions in a map, so that we can eventually finalize them. - global.UNIQUE_ID = function () { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8) - return v.toString(16) - }) - } - - global.PRECISE = function (floatNumber, precision) { - return this.parseFloat(floatNumber.toFixed(precision)) - } - global.FINALIZE_LOGGERS = function () { global.LOGGER_MAP.forEach(forEachLogger) diff --git a/TaskServer/LowFrequencyTrading/OrdersCalculations.js b/TaskServer/LowFrequencyTrading/OrdersCalculations.js index adea1443a..4fe7d8cbc 100644 --- a/TaskServer/LowFrequencyTrading/OrdersCalculations.js +++ b/TaskServer/LowFrequencyTrading/OrdersCalculations.js @@ -70,8 +70,8 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { */ tradingEngineOrder.orderQuotedAsset.actualSize.value = tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.rate.value - tradingEngineOrder.orderBaseAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.actualSize.value, 10) - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) + tradingEngineOrder.orderBaseAsset.actualSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderBaseAsset.actualSize.value, 10) + tradingEngineOrder.orderQuotedAsset.actualSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) } function recalculateSizePlaced() { @@ -98,8 +98,8 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.actualSize.value - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + tradingEngineStage.stageBaseAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) + tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) } } @@ -129,7 +129,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineOrder.orderStatistics.actualRate.value = order.price } - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) + tradingEngineOrder.orderStatistics.actualRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.actualRate.value, 10) /* If the Actual Rate happens to be exctly the same than the order rate, then there is @@ -160,7 +160,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.orderStatistics.actualRate.value - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) + tradingEngineOrder.orderQuotedAsset.actualSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) tradingSystem.warnings.push( [ @@ -184,7 +184,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.actualSize.value - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) tradingSystem.warnings.push( [ @@ -230,7 +230,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { the order will be 100% filled. */ tradingEngineOrder.orderStatistics.percentageFilled.value = order.filled * 100 / tradingEngineOrder.orderBaseAsset.actualSize.value - tradingEngineOrder.orderStatistics.percentageFilled.value = global.PRECISE(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) + tradingEngineOrder.orderStatistics.percentageFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) } async function feesPaidCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { @@ -273,7 +273,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { not reflect the Fees Paid, even if we are paying the fees in Base Asset. */ tradingEngineOrder.orderBaseAsset.sizeFilled.value = order.filled - tradingEngineOrder.orderBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) + tradingEngineOrder.orderBaseAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) /* For Quoted Asset, CCXT does not return any field with the size filled, so we need to calculate that by ourselves. @@ -281,7 +281,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineOrder.orderQuotedAsset.sizeFilled.value = tradingEngineOrder.orderQuotedAsset.actualSize.value * tradingEngineOrder.orderStatistics.percentageFilled.value / 100 - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) + tradingEngineOrder.orderQuotedAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) } async function amountReceivedCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { diff --git a/TaskServer/LowFrequencyTrading/OrdersSimulations.js b/TaskServer/LowFrequencyTrading/OrdersSimulations.js index cf4fa5a20..aff52dc32 100644 --- a/TaskServer/LowFrequencyTrading/OrdersSimulations.js +++ b/TaskServer/LowFrequencyTrading/OrdersSimulations.js @@ -88,7 +88,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { switch (tradingSystemOrder.type) { case 'Market Sell Order': { tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value - slippageAmount - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) + tradingEngineOrder.orderStatistics.actualRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.actualRate.value, 10) tradingSystem.warnings.push( [ @@ -100,7 +100,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { } case 'Market Buy Order': { tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value + slippageAmount - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) + tradingEngineOrder.orderStatistics.actualRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.actualRate.value, 10) tradingSystem.warnings.push( [ @@ -134,7 +134,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { /* Calculate this only once for this order */ if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.orderStatistics.actualRate.config.initialValue) { let newValue = tradingSystem.formulas.get(tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate.formula.id) - newValue = global.PRECISE(newValue, 10) + newValue = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(newValue, 10) tradingSystem.warnings.push( [ @@ -187,7 +187,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { break } } - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) + tradingEngineOrder.orderStatistics.actualRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.actualRate.value, 10) } function recalculateActualSize() { @@ -200,7 +200,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.orderStatistics.actualRate.value - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) + tradingEngineOrder.orderQuotedAsset.actualSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) tradingSystem.warnings.push( [ @@ -229,7 +229,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.actualSize.value - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) tradingSystem.warnings.push( [ @@ -323,7 +323,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { percentageFilled = 100 - tradingEngineOrder.orderStatistics.percentageFilled.value } tradingEngineOrder.orderStatistics.percentageFilled.value = tradingEngineOrder.orderStatistics.percentageFilled.value + percentageFilled - tradingEngineOrder.orderStatistics.percentageFilled.value = global.PRECISE(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) + tradingEngineOrder.orderStatistics.percentageFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) } } } @@ -397,8 +397,8 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { tradingEngineOrder.orderQuotedAsset.actualSize.value * tradingEngineOrder.orderStatistics.percentageFilled.value / 100 - tradingEngineOrder.orderBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) + tradingEngineOrder.orderBaseAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) + tradingEngineOrder.orderQuotedAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) } async function amountReceivedSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { diff --git a/TaskServer/LowFrequencyTrading/TradingEpisode.js b/TaskServer/LowFrequencyTrading/TradingEpisode.js index 8e26c0787..f4afdbe7c 100644 --- a/TaskServer/LowFrequencyTrading/TradingEpisode.js +++ b/TaskServer/LowFrequencyTrading/TradingEpisode.js @@ -66,7 +66,7 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin /* Recording the opening at the Trading Engine Data Structure */ tradingEngine.current.episode.status.value = 'Open' tradingEngine.current.episode.serialNumber.value = 1 - tradingEngine.current.episode.identifier.value = global.UNIQUE_ID() + tradingEngine.current.episode.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId() tradingEngine.current.episode.beginRate.value = tradingEngine.current.episode.candle.close.value } @@ -131,8 +131,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin tradingEngine.current.episode.episodeQuotedAsset.balance.value - sessionParameters.sessionQuotedAsset.config.initialBalance - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.profitLoss.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value, 10) + tradingEngine.current.episode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeBaseAsset.profitLoss.value, 10) + tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value, 10) /* Updating ROI @@ -147,8 +147,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value / tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value * 100 - tradingEngine.current.episode.episodeBaseAsset.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.ROI.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.ROI.value, 10) + tradingEngine.current.episode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeBaseAsset.ROI.value, 10) + tradingEngine.current.episode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeQuotedAsset.ROI.value, 10) /* Updating Hit Ratio */ if (tradingEngine.current.episode.episodeCounters.positions.value > 0) { @@ -160,8 +160,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin tradingEngine.current.episode.episodeQuotedAsset.hits.value / tradingEngine.current.episode.episodeCounters.positions.value - tradingEngine.current.episode.episodeBaseAsset.hitRatio.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.hitRatio.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value, 10) + tradingEngine.current.episode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeBaseAsset.hitRatio.value, 10) + tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value, 10) } /* @@ -189,8 +189,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin (365 / tradingEngine.current.episode.episodeStatistics.days.value) ) - 1 - tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value, 10) + tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value, 10) + tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value, 10) /* Updating Hit or Fail */ if (tradingEngine.current.episode.episodeBaseAsset.profitLoss.value > 0) { @@ -211,7 +211,7 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.episode.candle.close.value + tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - tradingEngine.current.episode.episodeStatistics.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.profitLoss.value, 10) + tradingEngine.current.episode.episodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeStatistics.profitLoss.value, 10) /* Updating ROI @@ -227,7 +227,7 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value ) * 100 - tradingEngine.current.episode.episodeStatistics.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.ROI.value, 10) + tradingEngine.current.episode.episodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeStatistics.ROI.value, 10) /* Updating Annualized Rate Of Return @@ -250,7 +250,7 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngin (365 / tradingEngine.current.episode.episodeStatistics.days.value) ) - 1 - tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value, 10) + tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value, 10) /* Updating Hit or Fail */ if (tradingEngine.current.episode.episodeStatistics.profitLoss.value > 0) { diff --git a/TaskServer/LowFrequencyTrading/TradingOrders.js b/TaskServer/LowFrequencyTrading/TradingOrders.js index 8d847d9a5..dbb147677 100644 --- a/TaskServer/LowFrequencyTrading/TradingOrders.js +++ b/TaskServer/LowFrequencyTrading/TradingOrders.js @@ -293,9 +293,9 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Update Stage Placed Size */ tradingEngineStage.stageBaseAsset.sizePlaced.value = tradingEngineStage.stageBaseAsset.sizePlaced.value + tradingEngineOrder.orderBaseAsset.size.value - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) + tradingEngineStage.stageBaseAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) tradingEngineStage.stageQuotedAsset.sizePlaced.value = tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.size.value - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) /* Updating Episode Counters */ tradingEngine.current.episode.episodeCounters.orders.value++ @@ -305,7 +305,7 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM /* Create Order Procedure */ tradingEngineOrder.status.value = 'Open' - tradingEngineOrder.identifier.value = global.UNIQUE_ID() + tradingEngineOrder.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId() 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 @@ -328,7 +328,7 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM if (isNaN(tradingEngineOrder.rate.value) === true) { badDefinitionUnhandledException(undefined, 'isNaN(tradingEngineOrder.rate.value) === true', tradingSystemOrder) } if (tradingEngineOrder.rate.value <= 0) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.rate.value <= 0', tradingSystemOrder) } - tradingEngineOrder.rate.value = global.PRECISE(tradingEngineOrder.rate.value, 10) + tradingEngineOrder.rate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.rate.value, 10) } else { /* For Market Orders, the rate is irrelevant, since it is not sent to the Exchange. @@ -376,7 +376,7 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM case 'Base Asset': { /* Size in Base Asset */ tradingEngineOrder.orderBaseAsset.size.value = algorithmSizeInBaseAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100 - tradingEngineOrder.orderBaseAsset.size.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.size.value, 10) + tradingEngineOrder.orderBaseAsset.size.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderBaseAsset.size.value, 10) /* Check that the Size calculated would not surpass Stage Target Size */ if ( @@ -403,7 +403,7 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM case 'Quoted Asset': { /* Size in Quoted Asset */ tradingEngineOrder.orderQuotedAsset.size.value = algorithmSizeInQuotedAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100 - tradingEngineOrder.orderQuotedAsset.size.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.size.value, 10) + tradingEngineOrder.orderQuotedAsset.size.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.size.value, 10) /* Check that the Size calculated would not surpass Stage Target Size */ if ( @@ -469,8 +469,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM } } - tradingEngineOrder.orderBaseAsset.size.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.size.value, 10) - tradingEngineOrder.orderQuotedAsset.size.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.size.value, 10) + tradingEngineOrder.orderBaseAsset.size.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderBaseAsset.size.value, 10) + tradingEngineOrder.orderQuotedAsset.size.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderQuotedAsset.size.value, 10) } async function createOrderAtExchange(tradingSystemOrder, tradingEngineOrder) { @@ -764,11 +764,11 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM tradingEngineStage.stageQuotedAsset.feesPaid.value + tradingEngineOrder.orderQuotedAsset.feesPaid.value - tradingEngineStage.stageBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizeFilled.value, 10) - tradingEngineStage.stageBaseAsset.feesPaid.value = global.PRECISE(tradingEngineStage.stageBaseAsset.feesPaid.value, 10) + tradingEngineStage.stageBaseAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageBaseAsset.sizeFilled.value, 10) + tradingEngineStage.stageBaseAsset.feesPaid.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageBaseAsset.feesPaid.value, 10) - tradingEngineStage.stageQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizeFilled.value, 10) - tradingEngineStage.stageQuotedAsset.feesPaid.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.feesPaid.value, 10) + tradingEngineStage.stageQuotedAsset.sizeFilled.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizeFilled.value, 10) + tradingEngineStage.stageQuotedAsset.feesPaid.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.feesPaid.value, 10) } async function updateBalances() { @@ -831,8 +831,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM break } } - tradingEngine.current.episode.episodeBaseAsset.balance.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.balance.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.balance.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.balance.value, 10) + tradingEngine.current.episode.episodeBaseAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeBaseAsset.balance.value, 10) + tradingEngine.current.episode.episodeQuotedAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.episode.episodeQuotedAsset.balance.value, 10) } } @@ -953,8 +953,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.sizeFilled.value - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + tradingEngineStage.stageBaseAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) + tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) } async function applyFeePercentage(feesNodePropertyName, tradingEngineOrder, tradingSystemOrder, feePercentage, percentageFilled) { @@ -989,8 +989,8 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM } } - feesNode.value = global.PRECISE(feesNode.value, 10) - feesNode.value = global.PRECISE(feesNode.value, 10) + feesNode.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(feesNode.value, 10) + feesNode.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(feesNode.value, 10) } async function checkOrderEvent(event, order, executionAlgorithm, executionNode) { @@ -1037,7 +1037,7 @@ exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineM function updateStatistics(tradingEngineOrder) { tradingEngineOrder.orderStatistics.days.value = tradingEngineOrder.orderCounters.periods.value * sessionParameters.timeFrame.config.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS - tradingEngineOrder.orderStatistics.days.value = global.PRECISE(tradingEngineOrder.orderStatistics.days.value, 10) + tradingEngineOrder.orderStatistics.days.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineOrder.orderStatistics.days.value, 10) } function resetTradingEngineDataStructure(tradingEngineOrder, tradingSystemOrder, stageStatus) { diff --git a/TaskServer/LowFrequencyTrading/TradingPosition.js b/TaskServer/LowFrequencyTrading/TradingPosition.js index a3f27e3ec..1f598f384 100644 --- a/TaskServer/LowFrequencyTrading/TradingPosition.js +++ b/TaskServer/LowFrequencyTrading/TradingPosition.js @@ -58,7 +58,7 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng /* Recording the opening at the Trading Engine Data Structure */ tradingEngine.current.position.status.value = 'Open' tradingEngine.current.position.serialNumber.value = tradingEngine.current.episode.episodeCounters.positions.value + 1 - tradingEngine.current.position.identifier.value = global.UNIQUE_ID() + tradingEngine.current.position.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId() tradingEngine.current.position.beginRate.value = tradingEngine.current.episode.candle.close.value tradingEngine.current.position.positionBaseAsset.beginBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value tradingEngine.current.position.positionQuotedAsset.beginBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value @@ -210,11 +210,11 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng switch (tradingSystemStageNode.type) { case 'Open Stage': { - tradingEngine.current.position.entryTargetRate.value = global.PRECISE(value, 10) + tradingEngine.current.position.entryTargetRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) break } case 'Close Stage': { - tradingEngine.current.position.exitTargetRate.value = global.PRECISE(value, 10) + tradingEngine.current.position.exitTargetRate.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) break } } @@ -245,15 +245,15 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng switch (tradingSystemStageNode.type) { case 'Open Stage': { - tradingEngine.current.position.positionBaseAsset.entryTargetSize.value = global.PRECISE(value, 10) + tradingEngine.current.position.positionBaseAsset.entryTargetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value = - global.PRECISE(value * tradingEngine.current.position.entryTargetRate.value, 10) + TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value * tradingEngine.current.position.entryTargetRate.value, 10) break } case 'Close Stage': { - tradingEngine.current.position.positionBaseAsset.exitTargetSize.value = global.PRECISE(value, 10) + tradingEngine.current.position.positionBaseAsset.exitTargetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value = - global.PRECISE(value * tradingEngine.current.position.exitTargetRate.value, 10) + TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value * tradingEngine.current.position.exitTargetRate.value, 10) break } } @@ -280,15 +280,15 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng } switch (tradingSystemStageNode.type) { case 'Open Stage': { - tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value = global.PRECISE(value, 10) + tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) tradingEngine.current.position.positionBaseAsset.entryTargetSize.value = - global.PRECISE(value / tradingEngine.current.position.entryTargetRate.value, 10) + TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value / tradingEngine.current.position.entryTargetRate.value, 10) break } case 'Close Stage': { - tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value = global.PRECISE(value, 10) + tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value, 10) tradingEngine.current.position.positionBaseAsset.exitTargetSize.value = - global.PRECISE(value / tradingEngine.current.position.exitTargetRate.value, 10) + TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(value / tradingEngine.current.position.exitTargetRate.value, 10) break } } @@ -339,8 +339,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.episode.episodeQuotedAsset.balance.value - tradingEngine.current.position.positionQuotedAsset.beginBalance - tradingEngine.current.position.positionBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionBaseAsset.profitLoss.value, 10) - tradingEngine.current.position.positionQuotedAsset.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionQuotedAsset.profitLoss.value, 10) + tradingEngine.current.position.positionBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionBaseAsset.profitLoss.value, 10) + tradingEngine.current.position.positionQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionQuotedAsset.profitLoss.value, 10) /* ROI Calculation */ tradingEngine.current.position.positionBaseAsset.ROI.value = @@ -351,8 +351,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.position.positionQuotedAsset.profitLoss.value * 100 / tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value - tradingEngine.current.position.positionBaseAsset.ROI.value = global.PRECISE(tradingEngine.current.position.positionBaseAsset.ROI.value, 10) - tradingEngine.current.position.positionQuotedAsset.ROI.value = global.PRECISE(tradingEngine.current.position.positionQuotedAsset.ROI.value, 10) + tradingEngine.current.position.positionBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionBaseAsset.ROI.value, 10) + tradingEngine.current.position.positionQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionQuotedAsset.ROI.value, 10) /* Hit Fail Calculation */ if (tradingEngine.current.position.positionBaseAsset.ROI.value > 0) { @@ -383,7 +383,7 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) - tradingEngine.current.position.positionStatistics.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionStatistics.profitLoss.value, 10) + tradingEngine.current.position.positionStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionStatistics.profitLoss.value, 10) /* ROI Calculation */ tradingEngine.current.position.positionStatistics.ROI.value = @@ -395,7 +395,7 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.position.positionBaseAsset.beginBalance * tradingEngine.current.position.beginRate.value + tradingEngine.current.position.positionQuotedAsset.beginBalance ) - tradingEngine.current.position.positionStatistics.ROI.value = global.PRECISE(tradingEngine.current.position.positionStatistics.ROI.value, 10) + tradingEngine.current.position.positionStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionStatistics.ROI.value, 10) /* Hit Fail Calculation */ if (tradingEngine.current.position.positionStatistics.ROI.value > 0) { @@ -413,7 +413,7 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng tradingEngine.current.position.positionCounters.periods.value * sessionParameters.timeFrame.config.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS - tradingEngine.current.position.positionStatistics.days.value = global.PRECISE(tradingEngine.current.position.positionStatistics.days.value, 10) + tradingEngine.current.position.positionStatistics.days.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.position.positionStatistics.days.value, 10) } } diff --git a/TaskServer/LowFrequencyTrading/TradingStages.js b/TaskServer/LowFrequencyTrading/TradingStages.js index c62fd4b4c..aa2919ceb 100644 --- a/TaskServer/LowFrequencyTrading/TradingStages.js +++ b/TaskServer/LowFrequencyTrading/TradingStages.js @@ -386,8 +386,8 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value = tradingEngine.current.position.positionBaseAsset.entryTargetSize.value tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value = tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value - tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value, 10) - tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value, 10) + tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value, 10) + tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value, 10) } } @@ -850,8 +850,8 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value = tradingEngine.current.position.positionBaseAsset.exitTargetSize.value tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value = tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value - tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value, 10) - tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value, 10) + tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value, 10) + tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value, 10) } function closePositionAndStrategy() { diff --git a/TaskServer/LowFrequencyTrading/TradingStrategy.js b/TaskServer/LowFrequencyTrading/TradingStrategy.js index fbd170845..7c53fe393 100644 --- a/TaskServer/LowFrequencyTrading/TradingStrategy.js +++ b/TaskServer/LowFrequencyTrading/TradingStrategy.js @@ -44,7 +44,7 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng /* Recording the opening at the Trading Engine Data Structure */ tradingEngine.current.strategy.status.value = 'Open' tradingEngine.current.strategy.serialNumber.value = tradingEngine.current.episode.episodeCounters.strategies.value - tradingEngine.current.strategy.identifier.value = global.UNIQUE_ID() + tradingEngine.current.strategy.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId() tradingEngine.current.strategy.beginRate.value = tradingEngine.current.episode.candle.min.value tradingEngine.current.strategy.index.value = index