Browse Source

Do not count days with 0 investment when calculating average investment

pull/3393/head
Reto Kaul 1 year ago
parent
commit
99f042da00
  1. 28
      apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts

28
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)

Loading…
Cancel
Save