diff --git a/TaskServer/LowFrequencyTrading/OrdersCalculations.js b/TaskServer/LowFrequencyTrading/OrdersCalculations.js index bf334a6cd..f46332fd6 100644 --- a/TaskServer/LowFrequencyTrading/OrdersCalculations.js +++ b/TaskServer/LowFrequencyTrading/OrdersCalculations.js @@ -143,6 +143,7 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { recalculateSizePlaced() function recalculateActualSize() { + if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } /* Now we know the Actual Rate at which the order was filled. Since the actual rate is not the same as the Rate we defined for the order, we need to syncronize @@ -153,14 +154,24 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { got the Order Size in Base Asset, either from direct imput from the user or calculated from the Order Size in Quoted Asset input it by the user. So here we go. */ + previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value + tradingEngineOrder.orderQuotedAsset.actualSize.value = tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.orderStatistics.actualRate.value tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) + + tradingSystem.warnings.push( + [ + [tradingEngineOrder.orderQuotedAsset.actualSize.id, tradingEngineOrder.orderStatistics.actualRate.id], + 'Actual Size (' + previousQuotedAssetActualSize + ') recalculated (' + tradingEngineOrder.orderQuotedAsset.actualSize.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' + ] + ) } function recalculateSizePlaced() { + let previousStageQuotedAssetSizePlaced = tradingEngineStage.stageQuotedAsset.sizePlaced.value /* Since we changed the Actual Size in Quoted Asset, we need to fix the Size Placed in Quoted Asset that was previously calculated with the previous value of actualSize. @@ -174,6 +185,13 @@ exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { tradingEngineOrder.orderQuotedAsset.actualSize.value tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + + tradingSystem.warnings.push( + [ + [tradingEngineStage.stageQuotedAsset.sizePlaced.id, tradingEngineOrder.orderStatistics.actualRate.id], + 'Size Placed (' + previousStageQuotedAssetSizePlaced + ') recalculated (' + tradingEngineStage.stageQuotedAsset.sizePlaced.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' + ] + ) } } diff --git a/TaskServer/LowFrequencyTrading/OrdersSimulations.js b/TaskServer/LowFrequencyTrading/OrdersSimulations.js index 7359d1ed5..3f94b0f78 100644 --- a/TaskServer/LowFrequencyTrading/OrdersSimulations.js +++ b/TaskServer/LowFrequencyTrading/OrdersSimulations.js @@ -53,7 +53,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { function actualRateSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { /* Actual Rate Simulation */ - let previousQuotedAssetActualSize + let previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value basedOnSessionParameters() basedOnTradingSystem() @@ -68,7 +68,7 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { is a definition for this order on how to calculate the actual rate. */ if (tradingSystemOrder.simulatedExchangeEvents !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate !== undefined) { + if (tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate !== undefined) { return } } @@ -188,20 +188,27 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { } function recalculateActualSize() { + if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } /* Now that we have an Actual Rate, we need to adjust the Actual Size in Quoted Asset, since Base Asset is what the exchange accepts as input and give information at. Quotes Asset properties are always calculated. */ - previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value - tradingEngineOrder.orderQuotedAsset.actualSize.value = tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.orderStatistics.actualRate.value tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) + + tradingSystem.warnings.push( + [ + [tradingEngineOrder.orderQuotedAsset.actualSize.id, tradingEngineOrder.orderStatistics.actualRate.id], + 'Actual Size (' + previousQuotedAssetActualSize + ') recalculated (' + tradingEngineOrder.orderQuotedAsset.actualSize.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' + ] + ) } function recalculateSizePlaced() { + if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } /* Since the Actual Rate might have changed, we need to recalculate the Size Placed, where we accumulate all the Size Placed of all orders of a Stage. For Base Asset there is nothing to do, since the Actual Rate does not have an inpact on it. @@ -209,6 +216,8 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { For Quoted Asset, we need to first unaccount what this same orded added before to Size Placed (with the precious Actual Size) and account with the new Actual Size. */ + let previousStageQuotedAssetSizePlaced = tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineStage.stageQuotedAsset.sizePlaced.value = tradingEngineStage.stageQuotedAsset.sizePlaced.value - previousQuotedAssetActualSize @@ -218,6 +227,13 @@ exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { tradingEngineOrder.orderQuotedAsset.actualSize.value tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) + + tradingSystem.warnings.push( + [ + [tradingEngineStage.stageQuotedAsset.sizePlaced.id, tradingEngineOrder.orderStatistics.actualRate.id], + 'Size Placed (' + previousStageQuotedAssetSizePlaced + ') recalculated (' + tradingEngineStage.stageQuotedAsset.sizePlaced.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' + ] + ) } }