From 99f042da0041f37c79a0863dbabd2fe319f2cd6a Mon Sep 17 00:00:00 2001 From: Reto Kaul Date: Sat, 17 Aug 2024 16:57:52 +0200 Subject: [PATCH] Do not count days with 0 investment when calculating average investment --- .../calculator/twr/portfolio-calculator.ts | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts index 3b0f755fd..fea98ccf8 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts @@ -877,8 +877,6 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { startDate = addDays(start, 1); } - let average = new Big(0); - const currentValuesAtStartDateWithCurrencyEffect = currentValuesWithCurrencyEffect[format(startDate, DATE_FORMAT)] ?? new Big(0); @@ -901,11 +899,13 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { return format(date, DATE_FORMAT); }); + let average = new Big(0); let dayCount = 0; for (const date of dates) { if ( - investmentValuesAccumulatedWithCurrencyEffect[date] instanceof Big + investmentValuesAccumulatedWithCurrencyEffect[date] instanceof Big && + investmentValuesAccumulatedWithCurrencyEffect[date].gt(0) ) { average = average.add( investmentValuesAccumulatedWithCurrencyEffect[date].add( @@ -917,18 +917,16 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { } } - average = average.div(dayCount); - - // TODO: Why without minus? - netPerformanceWithCurrencyEffectMap[dateRange] = average.gt(0) - ? netPerformanceValuesWithCurrencyEffect[ - format(endDate, DATE_FORMAT) - ] /*.minus( - netPerformanceValuesWithCurrencyEffect[ - format(startDate, DATE_FORMAT) - ] - )*/ - : new Big(0); + if (dayCount > 0) { + average = average.div(dayCount); + } + + netPerformanceWithCurrencyEffectMap[dateRange] = + netPerformanceValuesWithCurrencyEffect[ + format(endDate, DATE_FORMAT) + ].minus( + netPerformanceValuesWithCurrencyEffect[format(startDate, DATE_FORMAT)] + ); netPerformancePercentageWithCurrencyEffectMap[dateRange] = average.gt(0) ? netPerformanceWithCurrencyEffectMap[dateRange].div(average)